Ir ao conteúdo
  • Cadastre-se

Dúvida nesse código de busca no vetor em C


Anderson16

Posts recomendados

Bom dia, galera!!!

Peguei esse código na net, e comecei a dar uma estudada nele, mas não entendi uma parte do código, vou postar o código todo e vou frisar a parte que estou com dúvida.


#include <stdio.h>
#include <conio.h>


int main ( )
{
int x[5],cont,cont1=0,val,cont_aux=0;
for(cont=0;cont<5;cont++)
{
printf("Digite n %d: ",cont+1);
scanf("%d",&val);
for(cont1=0;(cont1 < cont_aux) && (val != x[cont1]);cont1++)
{}
if (cont1 == cont_aux)
{
x[cont_aux] = val;
cont_aux++;
}
}
printf("Tamanho do vetor sem tamanhos repetidos: %d\n",cont_aux);
for (cont=0;cont<cont_aux;cont++) {
printf("%d ", x[cont]);
}
getch ();
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Estou com dúvida nessa parte aqui:


[COLOR="Red"]for(cont=0;cont<5;cont++)
{
printf("Digite n %d: ",cont+1);
scanf("%d",&val);
for(cont1=0;(cont1 < cont_aux) && (val != x[cont1]);cont1++)
{}
if (cont1 == cont_aux)
{
x[cont_aux] = val;
cont_aux++;
}
}[/COLOR]

Quem puder me explicar eu agradeço, abraço!!!

Link para o comentário
Compartilhar em outros sites


for(cont=0;cont<5;cont++)
{
printf("Digite n %d: ",cont+1);
scanf("%d",&val);
for(cont1=0;(cont1 < cont_aux) && (val != x[cont1]);cont1++)
{}
if (cont1 == cont_aux)
{
x[cont_aux] = val;
cont_aux++;
}
}

Vamos lá, o for está variando de 0 ate 4 e é acrescido de uma-em-uma vez.

temos o prinft que mostra: "Digite n (1~5):"

logo em seguida um scanf para pegar um inteiro e armazenar na variável val

temos um for, onde a variável cont1 varia de 0 e tem que ser menor que a variável cont_aux e a variável val tem que ser diferente dos valores no vetor x[]. Esse for é acrescido de uma-em-uma vez.

percebo agora que o for fica naquela linha, ou seja ele vai apenas variár o cont1, na verificação do for ele compara se é menor que cont_aux ao mesmo tempo verifica se a variável val é diferente dos valores de x[0~4].

Depois temos um IF para verificar se cont1 é igual ao cont_aux, caso sejam iguais, x[cont_aux] recebe o valor de val.

Depois ele fecha o IF e fecha o for lá de cima.

Link para o comentário
Compartilhar em outros sites

for(cont1=0;(cont1 < cont_aux) && (val != x[cont1]);cont1++)

{} -> porque essa chaves foi inserida desse jeito ?

e além do mais, no inicio da verificação, cont1 = 0 e cont_aux = 0, val = o que foi digitado pelo usuário, x[0] = como não tem nada, o que compilador colocar qualquer coisa!!!, vamos lá agora testar a condição do laço...

digitei 12 no inicio, então val=12

e vamos supor que o compilador coloque assim, x[0] = 20

(cont1 < cont_aux) && (val != x[cont1])

( 0 < 0 )&& (12 != 20 )

falso verdadeiro

falso e verdadeiro resulta em falso, sendo assim o laço nem iria inicializar, pois a condição é falsa, mas mesmo assim inicializou...( foi assim que eu entendi)

mas porque ele inicializou?

Link para o comentário
Compartilhar em outros sites

Vamos lá,

primeiro nessas linhas:

	for(cont1=0;(cont1 < cont_aux) && (val != x[cont1]);cont1++)
{}

O cara fez isso pois queria apenas fazer uma variação do contador ate ele atingir o true, note que essa linha tem o mesmo efeito dessa:

	for(cont1=0;(cont1 < cont_aux) && (val != x[cont1]);cont1++);

O cara que fez o código preferiu assim.

E também o for não implica se ele continua ou não pro passo seguinte que é o IF, sendo falso ou verdadeiro o for vai passar pro IF já que o for não possuí nenhum comando interno para sair(break) ou dar continuidade(continue) ao for anterior.

Link para o comentário
Compartilhar em outros sites

 for(cont1=0;(cont1 < cont_aux) && (val != x[cont1]);cont1++) 

então pelo o que eu entendi esse for é uma declaração, correto?

o que faz então um valor do vetor ser comparado com os outros valores, ex:

digitei assim: 5 4 3 2 5, como o x[4] foi comparado o x[0], retornando que eles são iguais, como isso ocorreu? :mellow:

Link para o comentário
Compartilhar em outros sites

(só executei o código agora '-')

Pervceba que é um for dentro de outro for. O for mais externo irá de 0 ate 4. Ele vai pegando os valores em cada ciclo, e ao pegar o valor ele verifica com os que já foram digitados (o for interno verifica isso).

*E nessa declaração ele sai verificando se e variável val é igual à alguma digitada anteriormente (val != x[cont1]).

Link para o comentário
Compartilhar em outros sites

obrigado aí hegaja pelas respostas, mas eu não to conseguindo entender como, o vetor percorre valor por valor procurando se é igual ou não, isso não to entendo mesmo, se tiver como você me dar uma resposta assim, mais esclarecedora kkkk, tem como? agradeço brother pela sua ajuda!!

Link para o comentário
Compartilhar em outros sites

vou tentar ser mais claro:mellow:

Tipo, pelo o que eu estou entendo ele funciona assim:

for(cont1=0;(cont1 < cont_aux) && (val != x[cont1]);cont1++);
printf(" %d\n",cont1);

veja que a variável cont1 sempre sairá do for com um valor acrescido, porém se o valor que você digitar for igual ao valor anterior (ou já for repetido), o valor de cont1 não se altera. Esse valor não alterado que o cont_aux pega. Caso cont1 foi igual ao cont_aux quer dizer que não houve variável diferente, desse modo o vetor x[0~5] recebe o valor da variável val, e o cont_aux é acrescido. Assim que ocorre essa passagem. Insira esse código no seu programa para você ir observando como as variáveis se comportam, isso ajudará basatante pra você tentar entender totalmente :mellow:

Link para o comentário
Compartilhar em outros sites

ah mlk agr eu entendi bem haha, muito obrigado hegaja. Você digita o número, ele fica guardado na variável val, ai o for compara com x[cont1], se for igual os valores, cont1 não é acrescido, já se for diferente cont1 é acrescido.... muito obrigado brother por todas as respostas, se precisar estamos aí, abraços!!

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!