Ir ao conteúdo

Posts recomendados

Postado

não ta imprimindo o resultado da união mas aparentemente o codigo está certo

<>

#include <stdio.h>

#define TAM 10

int main(void) {

int v1[TAM], v2[TAM], u[TAM*2], x, y;

 

for(x=0; x<TAM; x++){

printf("Itens do primeiro conjunto\n");

scanf("%i", &v1[x]);

u[x]=v1[x];

}

 

for(x=0; x<TAM; x++){

printf("Itens do segundo conjunto\n");

scanf("%i", &v2[x]);

u[x+10]=v2[x];

}

for(x=0; x<TAM*2; x++){

for(y=x; y<TAM*2; y++){

if(u[x]==u[y])

{u[y]=0;}

else{}

}

}

printf("Exibindo vetor");

for(x=0; x<TAM*2; x++){

if(u[x]!=0){

printf("%i", u[x]);

} else{}

}

return 0;

}

Postado

@casa1 Está unindo, mas antes de mostrar está atribuindo zero a todos os elementos do vetor. Se quer atribuir zero apenas aos elementos repetidos, faça só quando x for diferente de y. E nessa parte u[x+10] devia ser u[x+TAM] para não ter erro se compilar TAM com outro valor.

Postado

@Midori assim?

#include <stdio.h>

#define TAM 10

int main(void) {

int v1[TAM], v2[TAM], u[TAM*2], x, y;

 

for(x=0; x<TAM; x++){

printf("Itens do primeiro conjunto\n");

scanf("%i", &v1[x]);

u[x]=v1[x];

}

 

for(x=0; x<TAM; x++){

printf("Itens do segundo conjunto\n");

scanf("%i", &v2[x]);

u[x+10]=v2[x];

}

for(x=0; x<TAM*2; x++){

for(y=x; y<TAM*2; y++){

if(u[x]!=u[y]) ?

{u[y]=0;}

else{}

}

}

printf("Exibindo vetor");

for(x=0; x<TAM*2; x++){

if(u[x]!=0){

printf("%i", u[x]);

} else{}

}

return 0;

}

Postado
2 horas atrás, casa1 disse:

não ta imprimindo o resultado da união mas aparentemente o codigo está certo

<>

 

Aparências enganam, diz o ditado. 

 

<> e o botão code


Por exemplo. falando de aparências,  o botão code tem essa legenda: <>

Mas se você colocar essa legenda no texto só vai aparecer isso: as duas letrinhas <> como se vê no seu post

É para apertar o o botão com a legenda, e vai abrir um formulário onde você cola o código... ;) 
 

image.png.0ef92a92ddeb613bfd51ac0b9404af7f.png

 

Esse aí do lado.

 

 

 

E aí pode colar o código lá dentro...

 

#include <stdio.h>

#define TAM 10

int main(void) {

int v1[TAM], v2[TAM], u[TAM*2], x, y;

 
for(x=0; x<TAM; x++){
printf("Itens do primeiro conjunto\n");
scanf("%i", &v1[x]);
u[x]=v1[x];
}

for(x=0; x<TAM; x++){
printf("Itens do segundo conjunto\n");
scanf("%i", &v2[x]);
u[x+10]=v2[x];
}
for(x=0; x<TAM*2; x++){
for(y=x; y<TAM*2; y++){
if(u[x]!=u[y])
{u[y]=0;}
else{}
}
}
printf("Exibindo vetor");
for(x=0; x<TAM*2; x++){
if(u[x]!=0){
printf("%i", u[x]);
} else{}
}
return 0;
}

 

Seu programa está muito complicado. E ruim de ler com tudo grudado do lado esquerdo.

 

Sabe usar uma função?  É muito mais simples do que repetir código.

 

A lógica parece quase certa, mas não deve declarar variáveis de controle do loop fora do loop. E precisa ter em conta o total de valores usados na união, que pode ser apenas TAM se os dois vetores forem iguais. É o que está faltando

 

 

Postado
1 hora atrás, casa1 disse:

if(u[x]!=u[y])

Assim só está testando se o elemento da posição x é diferente do y. Seu if tem que verificar o elemento e o índice, algo assim,

if(u[x] == u[y] && x != y)

 

  • Curtir 1
Postado

@Midori Obrigadoooooo!!! fiz assim e deu certo 

#include <stdio.h>
#define TAM 10
int main(void) {
  int v1[TAM], v2[TAM], u[TAM*2], x, y;

  for(x=0; x<TAM; x++){
    printf("Itens do primeiro conjunto\n");
    scanf("%i", &v1[x]);
    u[x]=v1[x];
  }

for(x=0; x<TAM; x++){
    printf("Itens do segundo conjunto\n");
    scanf("%i", &v2[x]);
    u[x+10]=v2[x];
  }
  for(x=0; x<TAM*2; x++){
      for(y=x; y<TAM*2; y++){
        if(u[x]==u[y] && x!=y) {u[y]=0;} else{}
        
      }
  }
printf("\nExibindo a união\n");
for(x=0; x<TAM*2; x++){
  if(u[x]!=0){
    printf("Valor %i\n", u[x]);
   } else{}
} 
  return 0;
}

 

Postado
32 minutos atrás, casa1 disse:

Obrigadoooooo!!! fiz assim e deu certo 

 

Mesmo?

 

Entendeu as coisas que eu expliquei? Leu?

 

Imagino que sim porque agora usou direito o tal botão code...

 

O que acontece com seu programa se todos os elementos do primeiro vetor forem 0 e metade dos valores do segundo?

 

Ou se um apenas for zero? 

 

E se os vetores forem iguais?

 

Como testou isso?

 

Não use variáveis globais para controlar um for. É um desastre.

 

TESTE o retorno de scanf(). Sempre. Se não ler um valor vai somar o que?

 

Pode ser mais gentil com o usuario e mostrar a ordem dos valores que ele esta digitando?

 

Pode não pular de linha na leitura?  Não por acaso o prompt fica sempre na mesma linha. é mais natural.

 

  • Curtir 1
Postado

@arfneto Li sim, agradeço pela dica de como usar o botão code.
Entretanto não sei usar uma função para não ficar usando o comando de repetição e usei variáveis globais pra testar, não sabia.

E sim posso não pular de linha, achei que fosse comum, pois vejo meus professores fazendo... Agradeço pelas dicas 🙂

Postado
1 hora atrás, arfneto disse:

O que acontece com seu programa se todos os elementos do primeiro vetor forem 0 e metade dos valores do segundo?

 

Ou se um apenas for zero? 

 

E se os vetores forem iguais?

 

Como testou isso?

 

 

testou mesmo?

1 hora atrás, casa1 disse:

Entretanto não sei usar uma função para não ficar usando o comando de repetição

 

não se trata de comando de repetição mas sim de repetir comandos, afinal precisa mostrar os 3 vetores. Ou deveria.

 

1 hora atrás, arfneto disse:

TESTE o retorno de scanf(). Sempre. Se não ler um valor vai somar o que?

2 horas atrás, arfneto disse:

não deve declarar variáveis de controle do loop fora do loop. E precisa ter em conta o total de valores usados na união, que pode ser apenas TAM se os dois vetores forem iguais. É o que está faltando

 

 

Isso
 

printf("\nExibindo a união\n");
for(x=0; x<TAM*2; x++){
  if(u[x]!=0){
    printf("Valor %i\n", u[x]);
   } else{}
} 

 

confira a união? ter um zero no vetor? E se o primeiro vetor fosse todo de zeros. como eu te perguntei? E se tivesse algum zero? E se tivesse no segundo? Qual a lógica disso?

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...