segunda-feira, 21 de outubro de 2013

Programação C - Resolução da questão 1 da avaliação simulada

Senhores alunos:

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