• 0
Sign in to follow this  
Ramon Perez

vetores com estruturas de repetição encadeadas

Question

olá. desde já agradeço por compartilhar comigo sua experiencia!

quero preencher um vetor a partir do teclado, sem permitir que valores já adicionados sejam novamente inseridos....

meu problema está justamente na condição que testa se já existe algum numero dentro do vetor que seja igual a entrada atual....

meu raciocínio foi o seguinte: criar um for principal; armazenar a entrada vinda do usuário na variável 'var', e então usar um outro for encadeado varrendo todo o vetor até então preenchido pra ver se tem outro número igual. se ele encontra, teste =1, que é a restrição do do-while e ele sai do loop, voltando pro primeiro scanf pra repetir o processo; se ele não encontra nenhum numero igual, ele guarda o conteúdo da variavel var dentro do vetor v1;

 

Desculpem. não achei outra forma de colocar aqui, então vou postar o código inteiro, mas comentado, e com o problema em questão também identificado.....

o codigo não tá funcionando. a execução tá meio aleatória....

#include<stdio.h>
int main (void)

{
	int v1[10], i, teste, cont, a, var;       //            DECLARAÇÃO DAS VARIÁVEIS
	
	cont = 0;
	i = 0;
	
	printf("DIGITE O VETOR:\n");	
	for(i=0; i<10;i++)                        //           PREENCHIMENTO DO VETOR COM LIMITE DE 10 POSIÇÕES....
	{
		scanf("%d", &var);
		teste = 0;
		if(i == 0)
		{
		//	i = i + 1;	                       //ADICIONEI UMA RESTRIÇÃO PRO PRIMEIRO PREENCHIMENTO NÃO ENTRAR NA CONDIÇÃO PRINCIPAL;
			v1[i] = var;
		}
		else
		{
			do    							//	ESTE 'DO' FOI A MANEIRA QUE ENCONTREI DE FAZER O PROGRAMA SAIR DO LOOP CASO ENCONTRE UM REPETIDO
			{
				for(a=0; a<i;)
				{
					if(var == v1[a])
					{
						printf("numero repetido não pode!\n");
						teste = 1;
					}
				else
				{
					a++;
				}
				v1[i] = var;
				}
			}while(teste != 1);  
		}
	}
	printf("o vetor sem repeticoes é ");
	for(i=0; i<10; i++)
	printf("%d, ", v1[9-i]);
}

 

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0
#include <stdio.h>
#include <locale.h>
#define DIM 10

//definição do tipo bool para simular variáveis booleanas.
typedef enum{
	false, true
}bool;

//protótipo da função que irá verificar se o número gerado já está armazenado no vetor.
bool repetido(int*, int, int);

int main(int argc, char* argv[]){
	int vetor[DIM];
	int temp;
	int i;

	setlocale(LC_ALL, "portuguese");

	//armazena o primeiro valor no vetor.
	printf("Digite um número: ");
	scanf("%d", &vetor[0]);

	while(getchar() != '\n');

	for(i = 1; i < DIM; i++){
		//looping que irá gerar um número enquanto o número gerado for repetido.
		do{
			printf("Digite um número: ");

			scanf("%d", &temp);

			while(getchar() != '\n');
		}while(repetido(vetor, DIM, temp));
		
		//armazena o valor não repetido no vetor.
		vetor[i] = temp;

		printf("Número armazenado com sucesso!\n");
	}

	return 0;
}


bool repetido(int *vetor, int tam, int temp){
	bool resp = false;
	int i;

	for(i = 0; i < tam; i++){
		if(vetor[i] == temp){
			resp = true;

			break;
		}
	}

	return resp;
}

Boa tarde, Ramon.

Estudei seu algoritmo e encontrei uma solução. Coloquei alguns comentários nos pontos que considerei mais importantes.

Não esqueça de editar seu tópico e colocar [resolvido] se o problema foi resolvido.

Segue o código:

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this