Union of vectors, adding the vectors?

2

I created the following function to join two vectors (not being able to repeat an equal number), follow the function and comments showing what I did and the error that is giving:

void uniao(int *A, int *B, int qnt)
{
    int  C[qnt*2], cont, cont2, pos = 0, dif = 0;
    for(cont = 0; cont < qnt; cont ++)
    {
        C[cont] = 0; // zera o vetor do resultado
    }
    for(cont = 0; cont < qnt; cont ++)
    {
        for(cont2 = 0; cont2 < qnt; cont2 ++)
        {  // compara cada numero do vetor A com todos os numeros do vetor B
            if(A[cont] != B[cont2]) // se for diferente ele incrementa um contador
                dif += 1;
        }
        if(dif == (qnt))
        { // se ele for único (diferente de todos os outros numeros do outro vetor
            C[pos] = A[cont]; // ele armazena em um novo vetor
            pos += 1; // muda a posição desse novo vetor
        }
        dif = 0; // redefine o contador
    }
    /* 
        aqui é a parte que não funcina, primeiro eu armazenei só os números que não
        são repitidos do vetor A, agora para completar a união, basta adicionar ao vetor C
        todos elementos do vetor B (cujo não serão repitidos), porém preciso adicionar esses
        elementos nas posições posteriores do que li ali no for anterior, por isso a variavel pos
        agora varro todos elementos do vetor após a última posição que adicionei e atribuo o valor de B a ela,
        porem como o cont começa do pos, ele não vai pegar os 'pos' primeiros elementos do vetor B, como resolvo
        isso? Tentei colocar outro for dentro dele mas não entendi muito bem
    */
    for(cont = pos ; cont < qnt*2; cont ++ )
    {
            C[cont] = B[cont];
    }
} 

In the case he does not get x first positions of vector B because I equate the counts. One solution I thought would be to equalize it in the first for, all elements of c equal to null (but I do not know how I do it) and then do an if to fill only the null elements, but as null assignment to an int vector? Because 0 can give a wrong result, since vector A or B can have a 0

    
asked by anonymous 16.09.2015 / 19:15

1 answer

1

I think this code works. Somewhat different from the logic you proposed ...

void uniao(int *A, int *B, int qnt)
{
    int  C[qnt*2], i,j, contResultado;
    bool novoA, novoB;

    contResultado=0;
    for(i= 0; i< qnt; i++)
    {
        novoA=true;
        novoB=true;


        //Percorre o vetor resultao até a última posição, para ver se os números
        //da posição atual já existem 
        for(j=0;j<contResultado;j++)
        {
           if(C[j]==A[i])
               novoA=false;
           //Se o valor da posição atual do vetor B já existir, ou se for igual
           //ao valor do vetor A, ele não deve ser inserido.
           if(C[j]==B[i] || B[i]==A[i])
               novoB=false;
        }

        if(novoA)
        {
             C[contResultado]=A[i];
             contResultado++;
        }
        if(novoB)
        {
             C[contResultado]=B[i];
             contResultado++;
        }
    }
    //Zera o restante do vetor resultado
    for(i=contResultado+1;i<qnt;i++)
        C[i]=0;
}
    
16.09.2015 / 20:06