Ir ao conteúdo
  • Cadastre-se

C Exercício de linguagem de programação em C com vetor


Leo14nerd
Ir à solução Resolvido por Ivander,

Posts recomendados

Olá, gostaria de saber se alguém poderia ajudar, por favor, em um exercício de linguagem de programação em C,

 

Crie um programa que recebe um vetor de 10 posições que contém zeros e uns. Separe os zeros
dos uns no vetor e escreva ele na tela.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int n1[10];
    for (i=0; i<=9; i++) {
    printf("entre com 1 ou 0 ");
    scanf("%d", &n1[i]);
    }
    for (i=0; i<=9; i++) {
    if ((n1[i] != 0 )  && (n1[i] != 1)) {
        printf("\nnumeros invalidos, digite 1 ou 0\n");
        break;
    }
    }
    for (i=0; i<=9; i++) {
        if(n1[i] == 1 ) {

        }
        else {
            printf("\n elementos do vetor com 0\n");
            printf("\n %d \n", n1[i]);
        }
    }


    return 0;
}

Então gostaria de saber, como posso melhorar a separação dos zeros e uns, no caso a visualização, e no enunciado diz para separar os eleamentos zero no vetor e um, se alguém tiver alguma sugestão, por favor, agradeço desde já

Link para o comentário
Compartilhar em outros sites

  • Solução
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

main ()
{
int n, i, j;
int vet[n], min, max;

 system("color F1");
printf ( " \t\t  ORGANIZA VETOR BINARIO DE N posições \n\n");

printf ("Digite o tamanho do vetor desejado: ");
scanf ("%d",&n);


	for ( i=0; i<n; i++)
	{
 		ini:
 		printf ("Digite o elemento [%d] : ", i+1);
 		scanf ("%d", &vet[i]);
 		fflush(stdin);
 
 		if ( vet[i]>1 )
 		{
 			system("cls");
 			printf ("por favor digite 0 ou 1 nos elementos dos vetores.");
 			getch();
 			system("cls");
 			goto ini;
 		}
	}

			for (i=0; i<n; i++)
			{
				for(j= i+1; j<n; j++)
				{
					if (vet[j]<vet[i])
					{	
						min = vet[j];
						max = vet[i];
						vet[i]= min;
						vet[j]= max;	
					}
				}
			
			}

	
system ("cls");

for (i=0; i<n; i++)
	{
	printf ("%d", vet[i]);
	}	
	
return 0;
}

No caso, acredito que o objetivo de seu professor seja que você tenha familiaridade com os métodos conhecidos de seleção.
Existem vários métodos de seleção e caso você consiga desenvolver um pode ser interessante também. 
Cada método possui suas vantagens, uns são mais eficientes outros mais diretos etc.

no caso, escolhi o selection sort, gosto dele por comparar posição por posição e já ir organizando como desejo, porém ele não é tão eficiente como um buble sort.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Ivander , muito obrigado, mas não não teria uma forma que economize o espaço da RAM, sendo que o prgrama é mais simples, na verdade, o professor só pediu uma forma de exibir, então eu queria saber como posso exibir como o Flávio Pedroza

mencionou

4 horas atrás, Flávio Pedroza disse:

Entrada: [0 1 0 0 1 1 0 1 0 1] Saida: [0 0 0 0 0 1 1 1 1 1]

 

 

Link para o comentário
Compartilhar em outros sites

@Leo14nerd Sem problemas, esses métodos de seleção são formas simples de resolver o problema. 
não tive o intuito de dizer que esse programa terá problemas de RAM, mas sim que mesmo sendo um modelo este código, é algo que vale se pensar para algo mais complexo. Afinal é apenas um exercício ilustrativo sem problemas cotidianos.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Ivander Então, realizei algumas modificações no seu código, adaptei e então consegui o que estava sendo objetivado, muito obrigado pela ajuda, gratidão, segue em anexo as modificações

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main () {
int i;
int j;
int vet[10], min, max;


for ( i=0; i<10; i++) {
         printf ("Digite 1 ou 0 : " ,i+1);
         scanf ("%d", &vet[i]);
}

            for (i=0; i<10; i++)
            {
                for(j= i+1; j<10; j++)
                {
                    if (vet[j]<vet[i])
                    {
                        min = vet[j];
                        max = vet[i];
                        vet[i]= min;
                        vet[j]= max;
                    }
                }

            }


system ("cls");

for (i=0; i<10; i++)
    {
    printf ("%d|", vet[i]);
    }

return 0;
}

no meu ver, já está o suficiente para a tarefa, sendo assim muito obrigado, você foi de grande ajuda

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!