Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rzp

Ordenação Pares e ímpares dentro de vetor

Recommended Posts

Olá, estou com um exercício para fazer:
Suponha um vetor com números inteiros positivos pares e ímpares. Elaborarum algoritmo para colocar todos os números pares à frente no vetor e os ímpares no final. NÃO DEVE SER UTILIZADO UM VETOR AUXILIAR.

O usuário deve determinar o tamanho do vetor, e gerar valores aleatorios.
Meu código por enquanto está assim, só não sei como fazer para organizar os pares de um "lado" e os impares do outro sem usar um vetor/variavel auxiliar.

@EDIT:

Também tenho que mostrar quanto tempo se passou na execução inteira do programa.

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

int main () {
    int i, n, vetor[n];
    printf("Digite o tamanho do vetor: ");
    scanf("%d", &n);
    srand(1000000);
        for (i = 0; i < n ; i++) {
            printf("Os valores são %d.\n", rand() % n);
 }
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia rzp, vou tentar te auxiliar nesse problema ;P

1- Quando você cria uma variavel, como você fez com N em "int n;", e nao atribui um valor para ela, dentro dela tem oq a gente chama de lixo de memoria, q pode ser qualquer valor, entao você criar int n, e depois vetor[n]; você esta criando um vetor de tamanho desconhecido, oq pode ou n funcionar, mas isso gera comportamentos inesperados no seu codigo e pode nao vai funcionar da maneira esperada.

Uma forma de se resolver seria criar o vetor depois de receber o valor do usuario:

scanf("%d", &n);

int vetor[n];

Porém isto nao é uma boa pratica e pode gerar errors sutis.

A forma correta de lidar com esses casos é alocar um espaço na heap:

int *vetor;

scanf("%d", &n);

vetor = (int*)malloc(n * sizeof(int));

2- O srand(time(NULL)) é só para garantir numeros aleatorios diferentes a cada vez q o codigo é compilado.

3- Esta linha nao faz sentido, ja q você nao armazena o random em lugar nenhum.

"printf("Os valores são %d.\n", rand() % n);"

E eu n sei se você intendeu bem o uso do rand, ja q N é a quantia de numeros e você fazer "rand % n" é como dizer pro computador pegar um aleatorio de 0 a N

O codigo esta bem comentado, mas qualquer duvida manda pm ou pergunta aew q noiz tenta responde

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

int main () 
{
	srand(time(NULL));
	
    int i, j;//controle
	int n;//quantia de numeros
	int *vetor;//ponteiro para o vetor
	
    printf("Digite o tamanho do vetor: ");
    scanf("%d", &n);
    
	vetor = (int*)malloc(n * sizeof(int));
        
	for(i = 0; i < n ; i++) 
		vetor[i] = (rand() % 10) + 1;//armazena o random
	
	//Mostra o vetor antes de organizado
	printf("Vetor desorganizado:\n");
	for(i = 0; i < n; i++)
	{
		printf("Vetor[%d] = %d\t", i, vetor[i]);
		if(!((i+1) % 5))//só para organizar, quebra linha a cada 5 numeros
			printf("\n");
	}
	printf("\n");
	
	for(i = 0; i < n; i++)//escaneia o vetor
		if(vetor[i]%2)//se encontrar um numero impar
			for(j = i; j < n; j++)//procura pelo resto do vetor
				if(!(vetor[j]%2))//por um numero par
				{
					//e troca um pelo outro
					int tmp  = vetor[i];
					vetor[i] = vetor[j];
					vetor[j] = tmp;
				}
	
	//Mostra o vetor depois de organizado
	printf("Vetor organizado:\n");
	for(i = 0; i < n; i++)
	{
		printf("Vetor[%d] = %d\t", i, vetor[i]);
		if(!((i+1) % 5))//só para organizar, quebra linha a cada 5 numeros
			printf("\n");
	}
	printf("\n");
	
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.