Ir ao conteúdo

Posts recomendados

Postado

Preciso de ajuda num exercício. Ele pede que o usuário insira valores em dois vetores do tipo inteiro, podendo escolher qual inserir primeiro, que tenha um critério de parada (no caso, 0), e que verifique se o valor já foi inserido, para evitar a repetição de valores. 

O que fiz até agora foi isto:

#include <stdio.h>
#include <stdlib.h>

void main (){
	int a[100],b[100],i,escolha,cont=0;
	do{
	printf ("Escolha o conjunto que deseja inserir os valores. Digite:\n1- Conjunto A\n2- Conjunto B\n");
	scanf ("%d",&escolha);
		if (escolha!=1 && escolha!=2){
			printf ("Erro. Digite novamente!\n");
		}
	}while (escolha!=1 && escolha!=2);
	switch (escolha){
		case 1:		
		for (i=0;i<100 && a[i-1]!=0;i++){
			printf ("Digite o valor para a posição %d, ou 0 para sair: ",i);
			scanf ("%i",&a[i]);
		}
	}
}

Não consigo fazer a parte em que ele verifica se o número já foi digitado e pede para digitar novamente. Dá pra fazer isso já na parte que está lendo os números ou somente no final, tendo que digitar o conjunto inteiro novamente?

Eu tinha tentado colocando um outro for, com uma variável j = i -1 e verificando se a==a[j], mas não deu certo.

  • Obrigado 1
Postado

Não estudei funções ainda, mas consegui resolver colocando um do while. Além disso dei a opção de remover os valores do conjunto (como pedido no exercício) e também mostrei os conjuntos na tela, mas preciso ainda fazer a união dos conjuntos a e b, formando um terceiro vetor, a intersecção e verificar se um conjunto está contido no outro. Meu código está assim:

void main (){
	int a[100],b[100],u[200],m[100],i,escolha,va,vb,cont=0,cont2=0,n;
	do{
	do{
	printf ("Escolha o conjunto que deseja inserir os valores. Digite:\n1- Conjunto A\n2- Conjunto B\n");
	scanf ("%d",&escolha);
		if (escolha!=1 && escolha!=2){
			printf ("Erro. Digite novamente!\n");
		}
	}while (escolha!=1 && escolha!=2);
	do{	
	switch (escolha){
		case 1:
		cont=0;
		va=0;		
		for (i=0;i<100 && a[i-1]!=0;i++){
		do{
			printf ("Digite o valor para a posição %d, ou 0 para sair: ",i);
			scanf ("%i",&a[i]);
			if (a[i]==a[i-1]){
				printf ("Número repetido. Digite novamente!\n");
			}
		}while (a[i]==a[i-1]);
		va++;
		}
		cont++;
		break;
		case 2:
		cont2=0;
		vb=0;
		for (i=0;i<100 && b[i-1]!=0;i++){
		do{
			printf ("Digite o valor para a posição %d, ou 0 para sair: ",i);
			scanf ("%i",&b[i]);
			if (b[i]==b[i-1]){
				printf ("Número repetido. Digite novamente!\n");
			}
		}while (b[i]==b[i-1]);
		vb++;
		}
		cont2++;
		break;	
		}
		printf ("Caso queira reescrever os valores do conjunto, digite 3. Caso contrário, digite 0.\n");
		scanf ("%d",&n);
		if (n==3){
			printf ("Digite 1 para reescrever o conjunto 1, ou 2 para reescrever o conjunto 2.\n");
			scanf ("%d",&escolha);
		 }
		}while (n==3);		
	}while (cont!=1 || cont2!=1);
	printf ("O conjunto A é: \n");
	if (a[0]==0){
		printf ("Vazio.");
	}
	else{
		for (i=0;i<va-1;i++){
			printf ("%i ",a[i]);
		}
	}
	if (b[0]==0){
		printf("Vazio.");
	}
	else{
	printf ("\nO conjunto B é: \n");
		for (i=0;i<vb-1;i++){
			printf ("%i ",b[i]);
		}
	}
}

Queria só uma luz da lógica pra fazer essas operações que faltam...

Postado
  • Para determinar a intersecção: Vai ter que investigar todos os elementos em A, e verificar se exitem também em B, assim digamos que a1 é um elemento que pertence A; é B= [b1, b2, b3, b4, b5 ... bn], então temos que comparar a1 com todos elementos em B e determinar se existe um elemento a1 == b1 até bn, repetir essa comparação de a1 até an. Os elementos do vetor intersecção são todos elementos em A que também estão em B:

 

A∩B= {x : x ∈ A && x ∈ B}

52 minutos atrás, ngiovana disse:

... a intersecção ...

 

entendeu?

Postado

Obrigada, entendi!! Mas agora está dando um erro no meu código, não sei porque. Ele está assim:

#include <stdio.h>
#include <stdlib.h>

void main (){
	int a[100],b[100],u[200],i,escolha,escolha2,va,vb,cont=0,cont2=0,n,j,maior=0;
	int  escolha3,contab=0,contba=0;
	do{
	do{
	printf ("Escolha o conjunto que deseja inserir os valores. Digite:\n1- Conjunto A\n2- Conjunto B\n");
	scanf ("%d",&escolha);
		if (escolha!=1 && escolha!=2){
			printf ("Erro. Digite novamente!\n");
		}
	}while (escolha!=1 && escolha!=2);
	do{	
	switch (escolha){
		case 1:
		cont=0;
		va=0;		
		for (i=0;i<100 && a[i-1]!=0;i++){
		do{
			printf ("Digite o valor para a posição %d, ou 0 para sair: ",i);
			scanf ("%i",&a[i]);
			if (a[i]==a[i-1]){
				printf ("Número repetido. Digite novamente!\n");
			}
		}while (a[i]==a[i-1]);
		va++;
		}
		cont++;
		break;
		case 2:
		cont2=0;
		vb=0;
		for (i=0;i<100 && b[i-1]!=0;i++){
		do{
			printf ("Digite o valor para a posição %d, ou 0 para sair: ",i);
			scanf ("%i",&b[i]);
			if (b[i]==b[i-1]){
				printf ("Número repetido. Digite novamente!\n");
			}
		}while (b[i]==b[i-1]);
		vb++;
		}
		cont2++;
		break;	
		}
		printf ("Caso queira reescrever os valores do conjunto, digite 3. Caso contrário, digite 0.\n");
		scanf ("%d",&n);
		if (n==3){
			printf ("Digite 1 para reescrever o conjunto 1, ou 2 para reescrever o conjunto 2.\n");
			scanf ("%d",&escolha);
		 }
		}while (n==3);		
	}while (cont!=1 || cont2!=1);
	if (va>vb){
		maior=va;
	}
	if (vb>=va){
		maior=vb;
	}
	printf ("O conjunto A é: \n");
	if (a[0]==0){
		printf ("Vazio.");
	}
	else{
		for (i=0;i<va-1;i++){
			printf ("%i ",a[i]);
		}
	}
	if (b[0]==0){
		printf("Vazio.");
	}
	else{
	printf ("\nO conjunto B é: \n");
		for (i=0;i<vb-1;i++){
			printf ("%i ",b[i]);
		}
	}
	printf ("\nUnião entre os conjuntos:\n");
	for (i=0;i<va-1;i++){
		for (j=0;j<vb-1;j++){
			if (a[i]!=b[j]){
			printf ("%i %i ",a[i],b[j]);
			}
			else{
				printf("%i",a[i]);
			}
		}
	}
	printf ("\nIntersecção entre A e B:\n");
	for (i=0;i<va-1;i++){
		for (j=0;j<vb-1;j++){
			if (a[i]==b[j]){
				printf ("%i ",a[i]);
			}
		}
	}
	printf ("\nDiferença entre os vetores:\n");
	do{
	printf ("Digite 1 para A - B, ou digite 2 para B - A:\n");
	scanf ("%d",&escolha2);
	if (escolha2!=1 && escolha2!=2){
		printf ("Erro. Digite novamente!");
	}
	}while (escolha2!=1 && escolha2!=2);
	switch (escolha2){
		case 1:
			printf("A - B = \n");
			for (i=0;i<maior-1;i++){
				printf ("%i ",a[i]-b[i]);
			}
		break;
		case 2:
			printf ("B - A = \n");
			for (i=0;i<maior-1;i++){
				printf ("%i ",b[i]-a[i]);
			}
		break;
	}
	printf ("\nUm conjunto contido no outro: \n");
	do{
		printf ("Digite 1 para verificar se A está contido em B, ou 2 para verificar se B está contido em A: \n");
		scanf ("%d",&escolha3);
		if (escolha3!=1 && escolha3!=2){
			printf ("Erro. Digite Novamente!\n");
		}
	}while (escolha3!=1 && escolha3!=2);
	switch (escolha3){
		case 1:
			for (i=0;i<va-1;i++){
				for (j=0;j<vb-1;j++){
					if (a[i]==b[j]){
						contab++;
					}
				}
			}
			if (contab==va-1){
				printf ("A está contido em B.\n");
			}
			else{
				printf ("A não está contido em B.\n");
			}
		break;
		case 2:
			for (i=0;i<vb-1;i++){
				for (j=0;j<va-1;j++){
				 	if (b[i]==a[j]){
				 		contba++;
					 }
				}
			}
				if (contba==vb-1){
						printf ("B está contido em A.\n");
					}
					else{
						printf ("B não está contido em A.\n");
					}
		break;
	}
}

Pode desconsiderar a parte da união, que ainda vou tentar ajeitar, e a parte para verificar se um conjunto está contido no outro também não consegui testar. O erro é que depois que escrevi a última parte (para verificar se um conjunto está contido no outro), o início não funciona mais, e não dá pra inserir os valores do conjunto B. Não sei se o erro é do dev ou algo do final realmente interfere no início.

quando o código está assim ele funciona:

#include <stdio.h>
#include <stdlib.h>

void main (){
	int a[100],b[100],u[200],i,escolha,escolha2,va,vb,cont=0,cont2=0,n,j,maior=0;
	do{
	do{
	printf ("Escolha o conjunto que deseja inserir os valores. Digite:\n1- Conjunto A\n2- Conjunto B\n");
	scanf ("%d",&escolha);
		if (escolha!=1 && escolha!=2){
			printf ("Erro. Digite novamente!\n");
		}
	}while (escolha!=1 && escolha!=2);
	do{	
	switch (escolha){
		case 1:
		cont=0;
		va=0;		
		for (i=0;i<100 && a[i-1]!=0;i++){
		do{
			printf ("Digite o valor para a posição %d, ou 0 para sair: ",i);
			scanf ("%i",&a[i]);
			if (a[i]==a[i-1]){
				printf ("Número repetido. Digite novamente!\n");
			}
		}while (a[i]==a[i-1]);
		va++;
		}
		cont++;
		break;
		case 2:
		cont2=0;
		vb=0;
		for (i=0;i<100 && b[i-1]!=0;i++){
		do{
			printf ("Digite o valor para a posição %d, ou 0 para sair: ",i);
			scanf ("%i",&b[i]);
			if (b[i]==b[i-1]){
				printf ("Número repetido. Digite novamente!\n");
			}
		}while (b[i]==b[i-1]);
		vb++;
		}
		cont2++;
		break;	
		}
		printf ("Caso queira reescrever os valores do conjunto, digite 3. Caso contrário, digite 0.\n");
		scanf ("%d",&n);
		if (n==3){
			printf ("Digite 1 para reescrever o conjunto 1, ou 2 para reescrever o conjunto 2.\n");
			scanf ("%d",&escolha);
		 }
		}while (n==3);		
	}while (cont!=1 || cont2!=1);
	if (va>vb){
		maior=va;
	}
	if (vb>=va){
		maior=vb;
	}
	printf ("O conjunto A é: \n");
	if (a[0]==0){
		printf ("Vazio.");
	}
	else{
		for (i=0;i<va-1;i++){
			printf ("%i ",a[i]);
		}
	}
	if (b[0]==0){
		printf("Vazio.");
	}
	else{
	printf ("\nO conjunto B é: \n");
		for (i=0;i<vb-1;i++){
			printf ("%i ",b[i]);
		}
	}
	printf ("\nUnião entre os conjuntos:\n");
	for (i=0;i<va-1;i++){
		for (j=0;j<vb-1;j++){
			if (a[i]!=b[j]){
			printf ("%i %i ",a[i],b[j]);
			}
			else{
				printf("%i",a[i]);
			}
		}
	}
	printf ("\nIntersecção entre A e B:\n");
	for (i=0;i<va-1;i++){
		for (j=0;j<vb-1;j++){
			if (a[i]==b[j]){
				printf ("%i ",a[i]);
			}
		}
	}
	printf ("\nDiferença entre os vetores:\n");
	do{
	printf ("Digite 1 para A - B, ou digite 2 para B - A:\n");
	scanf ("%d",&escolha2);
	if (escolha2!=1 && escolha2!=2){
		printf ("Erro. Digite novamente!");
	}
	}while (escolha2!=1 && escolha2!=2);
	switch (escolha2){
		case 1:
			printf("A - B = \n");
			for (i=0;i<maior-1;i++){
				printf ("%i ",a[i]-b[i]);
			}
		break;
		case 2:
			printf ("B - A = \n");
			for (i=0;i<maior-1;i++){
				printf ("%i ",b[i]-a[i]);
			}
		break;
	}
	printf ("\nUm conjunto contido no outro: \n");
	
}

 

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