Ir ao conteúdo
  • Cadastre-se
BiioeX

Ajuda com Vetores

Recommended Posts

Queria ajuda com esse programinha ele segsegue a ideia de uniao e interseccao onde o existe um vetor A e um vetor B.. Exp: vetorA(1,2,3,4) e vetorB:(1,2,5,6) o vetorU tem q conter a união de A e B ou seja (1,2,3_4,5,6) e o vetorI intersecção (1,2) ambos com 4 elementos

#include <stdio.h>

#include <stdlib.h>

int main(void){

int veta[4], vetb[4], vetu[4], veti[4], i = 0, j = 0, k = 0;

for(i=0; i<4; i++){

printf("Insira vetor A = ");

scanf(" %d", &veta);

}

for(i=0; i<4; i++){

printf("Insira vetor B = ");

scanf(" %d", &vetb);

}

for(i=0; i<4; i++){

for(j=0; j<4; j++){

if(veta==vetb[j]){

veti[k] = veta;

k++;

}

}

}

for(i=0; i<4; i++){

printf("%d\n", veti);

}

for(i=0; i<4; i++){

for(j=0; j<4; j++){

if(vetb==veta[j]){

vetu[k] = vetb;

printf("%d\n uniao recebeu igual ", vetu[k]);

k++;

}

else {

vetu[k] = vetb;

k++;

vetu[k] = veta[j];

k++;

printf(" %d\n uniao recebeu diferente ");

}

}

}

printf("Uniao Vetores e ");

for(i=0; i<4; i++){

printf(" %d\n", vetu);

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque seus códigos na tag CODE pra facilitar a quem for ajudar.

 

Pra fazer união você precisa de um vetor com posições suficientes para caber todos os elementos caso não forem repetidos.

Fiz um aqui meio amador, só falta corrigir um detalhe. Ele não mostra o último elemento da união. 

#include <stdio.h>#include <stdlib.h>int main(void){    int veta[4], vetb[4], vetu[8], veti[4], i = 0, j = 0, k = 0, jatem = 0;    // entrada de dados    for(i=0; i<4; i++){             printf("Insira vetor A = ");             scanf(" %d", &veta[i]);    }    for(i=0; i<4; i++){             printf("Insira vetor B = ");             scanf(" %d", &vetb[i]);    }        //-------------------------------------------------------------------    // INTERSECÇÃO    for(i=0; i<4; i++){             for(j=0; j<4; j++){                      if(veta[i]==vetb[j]){                                           veti[k] = veta[i];                                           k++;                      }             }    }    // mostra intersecção    printf("Interseccao: \n");    for(i=0; i<k; i++){ // só pode contar até k, senão mostra as posições vazias do vetor             if(veti[i] != '\0')                        printf("%d\n", veti[i]);    }        //----------------------------------------------------------------    // UNIÃO        //zera a variável para a reutilização    k = 0;    //armazena o primeiro vetor    for(i=0; i<4; i++){ // guarda o primeiro vetor             vetu[k] = veta[i];             k++;    }    for(j=0; j<4; j++){ // pega elemento por elemento do vetor b             for(i=0; i<4; i++){ // compara com os do a                      if(vetb[i] == veta[j]){ // ele só pode guardar se não for igual                                 jatem = 1;                      }             }             if(jatem == 0){ // se não tem repetido, guarda                      vetu[k] = vetb[j];                      k++;             }             else{                  jatem = 0;             }    }        printf("Uniao Vetores: \n");    for(i=0; i<k; i++){             printf(" %d\n", vetu[i]);    } getch();} 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse código funciona porém quando forem repetidos no vetor ele repete no uniao exp: vetorA(1,1,2,2) vetor(3,3,4,4). quando compilo ele gera o união (1,1,2,2,3,3,4,4) tera q fazer um laço pra ver se tem repetido .. Mais muito obrigado estou começando agora ADS.. valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

@BiioeX

Pensando matematicamente, não deveriam haver elementos repetidos no mesmo vetor. Sei lá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@BiioeX

Coloque um controle que verifique o número digitado e se já tem no vetor. Ele só vai guardar se não tiver.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Observe que como vetor deve ter no mínimo Tamanho(vetor1) + Tamanho(vetor2) na hora que é criado, ou você estará acessando memoria que não devia acessar. Só usar int vetor[8] e não terá erro.
O valor de N é alterado na função através de seu apontador, portando passe o endereço de N (&N) como argumento.
exemplo:
Insere(vetor3,vetor1,0,&N);
 
 void Insere(int *vetor,int x,int pos,int *N)
{
    if(pos<(*N))//Enquanto não tiver percorrido todo o vetor
    {
        if(vetor[pos]!=x) Insere(vetor,x,pos+1,N);//Verifique se encontrou x
    }                                                                   //Se encontrou, não faça nada(sem repetição)
    else//Varreu todo o vetor e não encontrou x?
    {
        vetor=x;//Insere o x na ultima posição do vetor
        (*N)++;//E aumenta o tamanho N do vetor
    }
} 





 

 

 

 

 ​

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×