Ir ao conteúdo
  • Cadastre-se
Leo14nerd

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

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á

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Flávio Pedroza Olá, muito obrigado por responder, sim mas vale destacar que a entrada é pelo usuário, e então na saída é separado como você fez

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se é só para 2 valores é só usar um contador. Cada vez que o usuário entrar com o valor 0 você incrementa o contador, depois você grava X zeros no vetor, sendo X o valor do contador, e o resto uns. >_<

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
#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

Compartilhar este post


Link para o post
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]

 

 

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

Aprenda_a_Ler_Resistores_e_Capacitores-capa-3d-newsletter.jpg

ebook grátis "Aprenda a ler resistores e capacitores", de Gabriel Torres

GRÁTIS! BAIXE AGORA MESMO!