Como fazer um vetor de Struct reconhecer na hora que usuário digitar um valor igual repetir isso até

1. Como fazer um vetor de Struct reconhecer na hora que usuário digitar um valor igual repetir isso até

Daniel Faria
danielfariaptu

(usa Outra)

Enviado em 06/12/2016 - 01:00h

Boa noite, Então, estou com o seguinte algoritmo em C:
for(i=0;i < 12;i++){


printf("\n|| ------=== CADASTRO DO %dº AVIAO ===-------- ||\n",i+1);
printf("\nDigite o N do %iº voo: ",i+1);
scanf("%i",&aviao[i].numero);

fflush(stdin);
printf("\nDigite a Origem do %iº voo: ",i+1);
gets(aviao[i].origem);
fflush(stdin);
printf("\nDigite o Destino do %iº voo: ",i+1);
gets(aviao[i].destino);
printf("\nDigite a quantidade de lugares disponíveis do %iº voo: ",i+1);
scanf("%d",&aviao[i].vagas);
fflush(stdin);
printf("\nDigite o Horário do %iº voo: ",i+1);
gets(aviao[i].horario);
fflush(stdin);
printf("\nDigite a data do %iº voo: Formato dd/mm/aaaa. ",i+1);
scanf("%d/%d/%d", &dia1[i].dia, &dia1[i].mes, &dia1[i].ano);
system("CLS");

}

Queria repetir o aviao[i].numero até o usuário digitar valor diferente!
Ex: na posição aviao[0].numero está igual a aviao[10].numero
Se for igual fazer usuário digitar até ser diferente, assim sucessivamente pra qualquer posição igual no vetor.


  


2. Re: Como fazer um vetor de Struct reconhecer na hora que usuário digitar um valor igual repetir isso até

Paulo
paulo1205

(usa Ubuntu)

Enviado em 06/12/2016 - 10:29h

Você terá de comparar o valor que acabou de ler com cada um dos valores que já tiverem sido colocados no array.


3. Tentei fazer isso aqui mas nao deu certo

Daniel Faria
danielfariaptu

(usa Outra)

Enviado em 06/12/2016 - 18:05h

for(k=0;k < i ;k++){
for(j=k+1;j < i;j++){
if (aviao[k]->numero==aviao[j]->numero){
c = c + 1;
}

}

}

se c > 1 le o scanf dnv. Mas não dá, fica bugando, se ele entra na condição fica dando loop infinito!
e se colocar um else com c = 0; não funciona também.


4. Re: Como fazer um vetor de Struct reconhecer na hora que usuário digitar um valor igual repetir isso

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/12/2016 - 10:07h

Hoje você tem algo parecido com o seguinte.

Enquanto n<N:
lê o n-ésimo elemento,
incrementa n.


Mas você quer o seguinte.

Enquanto n<N:
repita
lê n-ésimo elemento
enquanto n-ésimo elemento for igual a algum dos (n-1)-ésimos elementos,
incrementa n.


É isso mesmo?

Em C, você tem os equivalentes a “enquanto” (while), a “repita” (do), e a “incrementa” (operador ++), bem como dispõe de funções para fazer a operação de leitura. O problema é que não existe uma sintaxe para ser “igual a algum”.

E justamente, esse trabalho é o que você tem de fazer.

Esse tipo de comparação é algo que você, como ser humano, faz diariamente. Quando está jogando baralho e quer ver se uma das cartas forma um conjunto com alguma outra carta na sua mão ou com alguma das cartas da mesa, ou quando você esqueceu o local exato do estacionamento em que parou seu carro, e quer localizar um carro específico no meio de um monte de carros, o que você faz, na verdade, é olhar cada carta ou cada carro, um elemento de cada vez, até achar aquele que lhe interessa, ou até esgotar todas as possibilidades (a carta que você queria ainda não saiu, ou lembrou que deixou o carro em casa e foi ao shopping de ônibus).

Mas ser “igual a algum” também pode ser implementado de modos diferentes, dependendo de como você dispõe os elementos. Vetores podem ter uma abordagem de trabalho, listas terão outra, árvores terão outra ainda, etc. E também o fato de os elementos estarem dispostos em ordem pode modificar a implementação.

Você tem um vetor de elementos. Olhar cada um dos (n-1)-ésimos corresponde a contar desde o primeiro índice de elemento (que é 0, em C) até o (n-1)-ésimo índice, e aceder ao elemento correspondente ao índice da vez.

Outro problema é que, pelo menos em C, não é possível acomodar diretamente numa só expressão a ideia de “ser igual a algum”. Você teria de transformar a linha “enquanto n-ésimo elemento for igual a algum dos (n-1)-ésimos elementos” em uma das seguintes formas.

// Opção 1: decomposição de operações e uso de uma variável indicadora
repita
lê n-ésimo elemento,
pressupõe valor_repetido:=falso,
para cada índice entre 0 e n-1:
se elemento[índice] igual a elemento[n]:
valor_repetido:=verdadeiro,
enquanto valor_repetido igual a verdadeiro,


// Opção 2: criar uma função que faz a comparação dos elementos e devolve um valor indicando se há repetição
Define função LocalizaRepetição(valor, vetor, n_corrente):
Para cada k entre 0 e n:
se vetor[k] igual a valor:
retorna verdadeiro,
retorna falso.

// ...

repita
lê n-ésimo elemento
enquanto LocalizaRepetição(n-ésimo elemento, vetor, n-1),







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts