Ir ao conteúdo
  • Cadastre-se

Duvida sobre inicialização de um vetor, sem repetição...


Bronislaw

Posts recomendados

Pessoal estou com um exercicio para fazer, ele é um pouquinho mais complicado, mas eu preciso da ajuda de vocês só no começo.

1) Escreva um programa em C que carregue dois vetores, x e y, com dez numeros inteiros cada um. A digitação do conteúdo dos vetores não deve permitir que um mesmo número se repita dentro do vetor..... depois continua mais um pouco.

Eu já tentei de tudo, o mais perto que cheguei foi nisso aqui:

int x[10], y[10], i, h;

puts ("Informe os 10 numeros do vetor x, sem repeticao:");

for (i=0; i < 10; ++i)

{

scanf ("%d", &x);

}

for (i=0; i < 10; ++i)

{

for (h=i+1; h < 10; ++h)

{

if (x == x[h])

{

do

{

printf("Numero %d repetido, digite outro\n", x[h]);

scanf ("%d", &x[h]);

}while (x == x[h]);

}

}

}

porém se o usuario insistir em digitar um numero repetido ele acaba aparecendo no programa o numero repetido que não poderia estar no vetor.

Então pensei em fazer 2 vezes o testes:

main()

{

int x[10], y[10], i, h;

puts ("Informe os 10 numeros do vetor x, sem repeticao:");

for (i=0; i < 10; ++i)

{

scanf ("%d", &x);

}

for (i=0; i < 10; ++i)

{

for (h=i+1; h < 10; ++h)

{

if (x == x[h])

{

do

{

printf("Numero %d repetido, digite outro\n", x[h]);

scanf ("%d", &x[h]);

}while (x == x[h]);

}

}

}

for (i=0; i < 10; ++i)

{

for (h=i+1; h < 10; ++h)

{

if (x == x[h])

{

do

{

printf ("O numero %d ainda esta repetindo, digite outro\n", x[h]);

scanf ("%d", &x[h]);

}while (x == x[h]);

}

}

}

puts ("o vetor x ficou");

for (i=0; i < 10; ++i)

{

printf (",%d", x);

}

}

Mas se o cara for muito chato e insistir em repetir os numeros eles repetem novamente, já não sei mais o que fazer para eles não repetirem, alguem tem alguma ideia de como isso pode ser feito?

Obrigadão pessoal.

Link para o comentário
Compartilhar em outros sites

o problema está no aninhamento dos for's

Veja o código abaixo:

#include <stdio.h>
int main(){int i, j, x[10];
for(i=0; i<10; i++){    printf("\nDigite um numero: ");    scanf("%i", &x[i]);    for (j=0; j<i; j++)    {	if (x[i] == x[j])	{	  printf("Esse numero ja foi digitado, digite outro!\n");	  i--;	}    }}
return 0;}
Link para o comentário
Compartilhar em outros sites

hunnn verdade não tinha pensado em i < j tava fazendo tudo menor que 10, por ser 10 posições, e também não sabia desse lance do i--, então eu sempre tinha que digitar outro codigo, assim diminuir o codigo, aproveitando o mesmo que já foi digitado, muito muito bom mesmo.

Obrigadão Crudo, agora acho que sai o resto do exercicio, se não sair eu posto aqui novamente o resto da minha duvida dae, mas teoricamente é para ser mais ou menos igual, usando sempre esse mesmo laço ae.

Bom vou até postar o exercicio assim mesmo, se você tiver alguma ideia de como fazer pelo menos a letra A, mas vou tentando aqui também, só que esse ta complicado, todo o resto da lista saiu, menos esse e o 9 tambem... :(

Mas pego o jeito com o tempo.

1) Escreva um programa em C que carregue dois vetores, x e y, com dez números inteiros cada um. A digitação do conteúdo dos vetores não deve permitir que um mesmo número se repita dentro do vetor. Determine e mostre os seguintes vetores resultantes:

A) U = x união com y (união: todos os elementos de X e os elementos de Y que não estejam em X)

B) D = X - Y (diferença: todos os elementos de X que não existam em Y)

C) S = X + Y (soma de cada elemento de X com o elemento da mesma posição em Y) [Esse é fácil fazer]

D) P = X . Y (produto de cada elemento de X com o elemento de mesma posição em Y) [aqui por exemplo não lembro o que é produto...]

E) I = X intersecção Y (apenas os elementos que aparecem nos dois vetores).

Quando tiver um tempo, não precisa resolver tudo, só da umas dicas, de como devo fazer, não consigo fazer nem a A), já aguarra, estou com dificuldade em como fazer ele verificar uma posição de y com todas as de x e copiar somente o que não tem em x, não esta dando certo essa parte.

Mas obrigadão, já me ajudou bastante.

Link para o comentário
Compartilhar em outros sites

Bom consegui resolver o exercicio, só não tenho certeza da letra D, fiz uma multiplicação, não sei realmente se é isso.

Não sei se fiz do melhor jeito também, porque o codigo ficou muito, mas muito grande...

Qualquer correção que vocês acham que poderia ter melhorado no codigo me avisem pessoal ;)

e obrigadão pela força.

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>


#define MAX 20

main()

{
int x[10], y[10], i, h, u[MAX], j, z=10, d[MAX], saida_d, saida_u, s[10], I[MAX],
saida_I, p[10];
puts ("Informe os 10 digitos do vetor x, sem repeticao:");
for (i=0; i < 10; i++)
{
scanf ("%d", &x[i]);
for (h=0; h < i; h++)
{
if (x[i] == x[h])
{
printf("Numero '%d' repetido, por favor digite outro:", x[h]);
i--;
}
}
}
puts("Agora informe os 10 digitos do vetor y, sem repeticao:");
for (i=0; i < 10; i++)
{
scanf("%d", &y[i]);
for (h=0; h < i; h++)
{
if (y[i] == y[h])
{
printf("Numero '%d' repetido, por favor digite outro:", y[h]);
i--;
}
}
}

for (i=0; i < 10; i++)
{
u[i] = x[i];
}

for (i=0; i < 10; i++)
{
j=0;
for (h=0; h < 10; h++)
{
if (y[i] == x[h])
{
j += 1;
}
}
if (j == 0)
{
u[i+z] = y[i];
}
else
{
z--;
}
}
saida_u = i + z;


z=0;
for (i=0; i < 10; i++)
{
j=0;
for (h=0; h < 10; h++)
{
if(x[i] == y[h])
{
j += 1;
}
}
if (j == 0)
{
d[i-z] = x[i];
}
else
{
z++;
}

}
saida_d = i - z;


for(i=0; i < 10; i++)
{
s[i] = x[i] + y[i];
}


z=0;
for (i=0; i < 10; i++)
{
j=0;
for (h=0; h < 10; h++)
{
if (x[i] == y[h])
{
j += 1;
}
}
if (j != 0)
{
I[i-z] = x[i];
}
else
{
z++;
}
}
saida_I = i - z;


for (i=0; i < 10; i++)
{
p[i] = x[i] * y[i];
}


puts ("A uniao entre x e y fica:");
for (i=0; i < saida_u; i++)
{
printf("%d\n", u[i]);
}

puts("A diferença entre x e y fica:");
for (i=0; i < saida_d; i++)
{
printf("%d\n", d[i]);
}

puts("A soma cada posicao de x com a mesma posicao de y fica:");
for (i=0; i < 10; i++)
{
printf("%d\n", s[i]);
}

puts("O produto de casa posicao de x com a mesma posicao de y fica:");
for(i=0; i < 10; i++)
{
printf("%d\n", p[i]);
}

puts("A interseccao de x e y fica:");
if (saida_I <= 0)
{
puts("Nao tem interseccao!");
}
else
{
for (i=0; i < saida_I; i++)
{
printf ("%d\n", I[i]);
}
}

return 0;
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!