Segue a solução da questão 1 da avaliação simulada, sem a parte de arquivos (O vetor a ser separado foi definido no inicio da rotina main ).
------------------------------------------------------------------
Faça
um programa que leia de um arquivo um vetores de números inteiros
positivos e o separe em dois vetores: um com os números pares e
outro com os números pares.
Como
deve ser o programa:
- Deve conter uma função que leia o vetor. (void le_vetor(int*) );
- Deve conter uma função que separe os vetores em 2 vetores ( int* separa(int*) ):
- um com os números pares e que começa na mesma posição (mesmo endereço) do vetor original;
- outro com os números impares, que começa na posição de memória logo após o término do vetor de números pares;
- ambos os vetores devem ser terminados por $;
- deve retornar um ponteiro com o endereço do primeiro elemento do vetor de números ímpares
- O programa principal deve gravar no arquivo original os dois vetores a partir das seguintes informações:
- O vetor de pares a partir do ponteiro que aponta para o primeiro elemento do vetor original;
- O vetor de ímpares a partir do ponteiro retornado pela função;
#include <stdio.h>
#include <stdlib.h>
int* separa(int*);
int main()
{
int vetor_par[20]={1,4,6,7,9,10,12,2,-1},*vetor_impar,k=0,j=0;
vetor_impar=separa(vetor_par);
while(vetor_par[k]!=-1)
{
printf("%d ",vetor_par[k]);
k++;
}
while(vetor_impar[j]!=-1)
{
printf("%d ",vetor_impar[j]);
j++;
}
return 0;
}
int* separa(int* ptr)
{
int vetor_aux[10];
int i=0,k=0,j=0,n;
// coloca os pares no vetor original
// e os impares em um vetor auxiliar
while(ptr[i]!=-1)
{
if(ptr[i]%2)
{
vetor_aux[k]=ptr[i];
k++;
}
else
{
ptr[j]=ptr[i];
j++;
}
i++;
}
ptr[j]=-1; // fim do vetor com os pares
vetor_aux[k]=-1;// fim do vetor auxiliar
k=0; // reinicializa indice do vetor auxiliar
n=++j; // gera endereço de retorno(inicio do vetor com os impares)
// coloca os impares após os pares no vetor original
while(vetor_aux[k]!=-1)
{
ptr[j]=vetor_aux[k];
k++;
j++;
}
ptr[j]=-1; //fim do vetor com os impares
return &ptr[n];
}
Nenhum comentário:
Postar um comentário