Saving some elements of an array in another array

3

I have defined an integer array in which it will be pointed to by a pointer and then I have another array that will store only a few numbers in which are even numbers. code ...

void main(void) {

    srand(time(NULL));
    //vetor de dimensao 10
    int vetor [MAX] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    //apontador para vetor
    int *ptr_vetor;
    //novo vetor
    int novo_vetor[MAX];
    //apontador para novo vetor
    int *ptr_novo_vetor;
    //escolher numero
    int escolha = 0;
    //contador
    int contador = 0;

    //ponteiro apontado ao primeiro vetor
    ptr_vetor = &vetor[0];
}

shows vector values

printf("\n--- Vetor ---");
    for (int i = 0; i < MAX; i++) {
        //mostra os valores do vetor
        printf("\nvalor : %d ", vetor[i]);
    }

shows the even values pointing to the vector

printf("\n\n--- Ponteiro Vetor para Numero Pares ---");
    for (int i = 0; i < MAX; i++) {
        //escolha apenas numeros pares
        if (*(ptr_vetor + i) % 2 == 0) {
            //mostra os valores pares apontador ao vetor
            printf("\nNumero Par : %d ", *(ptr_vetor + i));
            //adiciona o numero par ao novo vetor
            novo_vetor[i] = *(ptr_vetor + i);
            //aqui devia receber apenas os dados do novo vetor mas
            //mostra aepnas o endereço
            ptr_novo_vetor = &novo_vetor[i];
            //usei isto para iterar os jogadores, nao deu certo
            //contador++;
        }
    }

shows the values of the new vector

printf("\n\n\n--- Novo Vetor ---");
    for (int i = 0; i < MAX; i++) {
        //mostra os valores do novo vetor
        printf("\nvalor: %d ", novo_vetor[i]);
    }

shows the values of the new pointer

printf("\n\n--- Ponteiro Novo Vetor ---");
    for (int i = 0; i < MAX; i++) {
        //mostra os valores do novo ponteiro
        printf("\nNovo Vetor : %d ", *(ptr_novo_vetor+i));
    }

when running the program

How to show the data that has been added to the new array , ie even numbers?

    
asked by anonymous 12.11.2015 / 15:18

2 answers

2

I'll give you a solution that I do not know if it's what you want. But the code does not make much sense either, so I do not know if it will make a difference. He's probably wanting to do something else and he's far from goal. I am responding to what you have understood.

Surely you have better ways of doing this, but I did not spend much time thinking about what to improve, because I see no reason for this code to exist.

#include <stdio.h>
#define MAX 10

int main(void) {

    //vetor de dimensao 10
    int vetor [MAX] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    //apontador para vetor
    int *ptr_vetor;
    //novo vetor
    int novo_vetor[MAX];
    //apontador para novo vetor
    int *ptr_novo_vetor;
    //escolher numero
//    int escolha = 0;
    //contador
//    int contador = 0;

    //ponteiro apontado ao primeiro vetor
    ptr_vetor = &vetor[0];

    printf("\n--- Vetor ---");
    for (int i = 0; i < MAX; i++) {
        //mostra os valores do vetor
        printf("\nvalor : %d ", vetor[i]);
    }

    printf("\n\n--- Ponteiro Vetor para Numero Pares ---");
    for (int i = 0; i < MAX; i++) {
        //escolha apenas numeros pares
        if (*(ptr_vetor + i) % 2 == 0) {
            //mostra os valores pares apontador ao vetor
            printf("\nNumero Par : %d ", *(ptr_vetor + i));
            //adiciona o numero par ao novo vetor
            novo_vetor[i / 2] = *(ptr_vetor + i);
        }
    }
    ptr_novo_vetor = novo_vetor;

    printf("\n\n\n--- Novo Vetor ---");
    for (int i = 0; i < MAX / 2; i++) {
        //mostra os valores do novo vetor
        printf("\nvalor: %d ", novo_vetor[i]);
    }

    printf("\n\n--- Ponteiro Novo Vetor ---");
    for (int i = 0; i < MAX / 2; i++) {
        //mostra os valores do novo ponteiro
        printf("\nNovo Vetor : %d ", *(ptr_novo_vetor+i));
    }
    return 0;
}

See running on ideone .

    
12.11.2015 / 15:40
1

Your resulting vector is the wrong size. If it has to receive only the even numbers, it can not be the same size as the original vector. If you do this, you will have to fill in the resulting vector with values that indicate empty. Better would you, knowing the input set, simply create a 5-position vector.

The reason for jumping positions in the insert is that you are inserting when i is even and putting it in i position. In this way, only the even positions will be filled.

While ptr_novo_vetor is showing these weird values because you never pointed it anywhere.

    
12.11.2015 / 15:24