I need to fill two vectors, A and B, with 10 elements each, then make the Intersection and the Union, in the union, I have to remove the repeated elements.
At the moment, the intersection was made, within the intersection for I put in another vector (vectorR [c]) the indices of the elements that are in B and in A
In the union, I first make a for and add all elements of vector A, in the first 10 positions of another vector (vector U []);
But with a difficulty of solving the passage of the elements of vectorB to vectorU, removing the indices containing the elements repeated between vectorA and vectorB; follow the code:
#include <stdlib.h>
#include <time.h>
int Conjuntos()
{
int vetorA[10];
int vetorB[20];
int *vetorR;
int *vetorU;
int *vetorIn;
int *vetorDif;
int tamVetor = 0;
int tamVetorU = 0;
vetorIn = malloc(sizeof(int*)*tamVetor);
vetorDif = malloc(sizeof(int*)*tamVetor);
vetorU = malloc(sizeof(int*)*tamVetorU);
vetorR = malloc(sizeof(int*)*tamVetor);
srand(time(NULL));// inicia a funcao rand semente;
for (int i = 0; i < 10; i++)
{
vetorA[i] = rand() % 100;
}
for (int i = 10; i < 20; i++)
{
vetorB[i] = 30 + ( rand() % 70 );
}
///
printf("Elementos de A:{ ");
for (int i = 0; i < 10; i++)
{
printf("%d, ",vetorA[i]);
}
printf("}\n");
// imprimi vetor b
printf("Elementos de B:{ ");
for (int i = 10; i < 20; i++)
{
printf("%d, ",vetorB[i]);
}
printf("}\n");
//verifica quais numeros sao repetidos
int c = 0;
for(int i = 0; i < 10; i++)
{
for (int a = 10; a < 20; a++)
{
if (vetorA[i] == vetorB[a])
{
tamVetor++;
vetorIn[c] = vetorA[i];
vetorR[c] = a; //guarda os indices dos elementos do vetorB que tambem estao no vetorA
c++;
vetorIn = realloc(vetorIn,sizeof(int)*tamVetor);
vetorR = realloc(vetorR
,sizeof(int)*tamVetor);
if (vetorIn==NULL)
{
printf("Memoria insuficiente.\n");
exit(1); /* aborta o programa e retorna 1 para o sist. operacional */
}
if (vetorR==NULL)
{
printf("Memoria insuficiente.\n");
exit(1); /* aborta o programa e retorna 1 para o sist. operacional */
}
}//fecha o if
}// fecha for de dentro
}//fecha o for de fora
printf(" tamanho do vetor e: %d\n", tamVetor);
printf("Os elementos da Intersecao entre A e B sao: { ");
for(int i = 0; i < tamVetor; i++)
{
printf("%d, ", vetorIn[i]);
}
printf("}\n");
/// adiciona os elementos de a em umiao
for (int i= 0; i < 10; i++)
{
tamVetorU++;
vetorU = realloc(vetorU,sizeof(int*)*tamVetorU);
if (vetorU==NULL)
{
printf("Memoria insuficiente.\n");
exit(1); /* aborta o programa e retorna 1 para o sist. operacional */
}
vetorU[i] = vetorA[i];
}
printf(" indices do vetor b q possuem numeros iguais ao vetor a\n");
for (int i = 0; i < tamVetor; i++)
{
printf("%d \n", vetorR[i]);
}
//adiciona os elementos de b a unao
/*Aqui esta o que nao consiguo resolver, neste for, adiciono os elementos do vetorB ao vetorU, porem preciso retirar os elementos repetipos, que estao no vetor[R], em alguns teste, consegui, porem na posicao do elemento repetido ficava o "0" e o ultimo elemento do vetor nao entrava no vetor[i]
*/
for(int i = 10; i < 20; i++)
{
for(int c = 0; c < tamVetor; c++)
{
if (i == vetorR[c])
{
}
else
{
tamVetorU++;
vetorU = realloc(vetorU,sizeof(int*)*tamVetorU);
if (vetorU==NULL)
{
printf("Memoria insuficiente.\n");
exit(1);
}
vetorU[i]= vetorB[i];
}
}
}
//int n = 20 - tamVetor;
printf ("Os elementos da uniao entre A e B sao: { ");
for (int i = 0; i < tamVetorU; i++)
{
printf(" %d, ", vetorU[i]);
}
printf("}\n");
}
int main()
{
Conjuntos();
return 0;
}
// after the issues
for(int i=10; i<20; i++) //Coloca -1 nos repetidos de B
for(int c=0; c<tamVetor; c++){
if (vetorB[i] == vetorIn[c])
{
vetorB[i] = -1;
}
}
printf("os elementos de b agr sao: ");
for (int i = 10; i < 20; i++)
{
printf("%d,",vetorB[i]);
}
printf("}\n");
int k = 10;
int tamVetorU = 20 - tamVetor;
vetorU = realloc(vetorU,sizeof(int*)*tamVetorU);
printf("o tamanho do vetor u e: %d\n", tamVetorU);
for(int i=0; i<tamVetorU;i++){ //Preenche vetorU
if (i<10){
vetorU[i] = vetorA[i];
}
else
{
if (vetorB[k] != -1)
{
vetorU[i] = vetorB[k];
}
k++;
}
}