Logo Hardware.com.br
Gordon
Gordon Tô em todas Registrado
2.3K Mensagens 49 Curtidas

Como verificar se um numero pertence a um vetor

#1 Por Gordon 18/04/2005 - 14:32
a operacao q eu quero fazer eh seguinte:

se um dado numero pertence a um vetor realizo uma determinada operacao , caso contrario realizo uma outra.

mas para isso tenho q comparar o numero com TODOS, os do vetor.

tipo meu problema, eh q qndo faco a comparacao qndo ele encontra um valor q atende as condicoes ele ja executa a operacao sem percorrer todo vetor.

resumindo eh ver se um numero "pertence" ou "nao pertence" a um conjunto

alguem tem uma ideia..
Responder
intruso
intruso Tô em todas Registrado
1.8K Mensagens 41 Curtidas
#2 Por intruso
18/04/2005 - 17:19
em que linguagem?? C??

o vetor esta ordenado??

de mais algumas informações...

.....
edit:

Se o vetor esta ordenado vc pode testar o valor do meio do vetor, se ele for acima do valor pesquisado, procure o valor a partir dele, caso contrário procure o valor abaixo dele. Isso vai economizar algum tempo na pesquisa.

caso o vetor não seja ordenado, pesquisa de um por um mesmo.
jose_silva_neto
jose_silva_n... General de Pijama Registrado
4.6K Mensagens 98 Curtidas
#6 Por jose_silva_n...
18/04/2005 - 18:45
Gordon
a operacao q eu quero fazer eh seguinte:

se um dado numero pertence a um vetor realizo uma determinada operacao , ...


Eu faria da seguinte maneira(técnica troglodita):

Uma variável "lógica"
Uma variável de contagem
Uma variável vetorial

/* completamente informal */

float buscar; /* elemento a ser procurado */
int i = 0; /* variável lógica */
int n =0; /* contador */
float v[10]; /* por exemplo */

while ( i == 0 && n < 10)
{
if (v[n]== buscar)
i = 1;
n++;
}

If (i ==1)
printf(" O elemento %f pertence ao conjunto",buscar);
else
printf(" O elemento %f nao pertence ao conjunto",buscar);

Obs: De qualquer modo, dentro do laço while, descobrimos se o elemento pertence ou não ao conjunto, o laço termina se o elemento foi encontrado ou se após percorrer todo o vetor, nada foi encontrado (a variável n dá conta disso)

Té+

Kali

PS: se alguém fizer uma versão via busca binária, faça um post para aprendermos!
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#7 Por jackinabox
18/04/2005 - 21:08
Gordon
mas para isso tenho q comparar o numero com TODOS, os do vetor.

tipo meu problema, eh q qndo faco a comparacao qndo ele encontra um valor q atende as condicoes ele ja executa a operacao sem percorrer todo vetor.

resumindo eh ver se um numero "pertence" ou "nao pertence" a um conjunto

:?: Não entendi. Por que você precisa percorrer todo o vetor? Se a operação é verificar se o número "pertence ou não pertence" ao vetor, bastaria parar na primeira ocorrência. :?:
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
intruso
intruso Tô em todas Registrado
1.8K Mensagens 41 Curtidas
#8 Por intruso
19/04/2005 - 09:06
ele quer dizer que precisa percorrer todo o vetor até achar... big_green.png

por isso eu sugeri que ele iniciasse a pesquisa do valor do meio, assim ja teria "pulado" muitos valores, ganhando tempo.
depois de testar se o valor é menor do que o meio ele implementa um teste do tipo que o kalicrates postou. Só ser for maior que o valor central incrementa contator, caso contrário decrementa.
intruso
intruso Tô em todas Registrado
1.8K Mensagens 41 Curtidas
#9 Por intruso
19/04/2005 - 10:43
kalicrates
PS: se alguém fizer uma versão via busca binária, faça um post para aprendermos!


sobre a pesquisa binária, ela usa a idéia que eu postei ou seja, usar um intervalo de valores partindo da idéia de que se eu procuro X dentro de um conjunto, ele tem de estar em uma faixa de valores do conjunto, por isso eu pedi que ele procurasse o valor a partir do meio do vetor.

mas, a pesquisa binária usa um intervalo.

aqui vc encontra explicações sobre o algorítimo e um fonte em c.

http://www.adeec.fct.ualg.pt/PI_flobo/teorica16.html

t+
fdbelo
fdbelo Veterano Registrado
1.9K Mensagens 1 Curtida
#10 Por fdbelo
19/04/2005 - 10:50
O problema é que o vetor não está ordenado, então acho que o esforço computacional de ordenar tudo, e depois fazer uma busca binária seria maior do que simplesmente fazer uma busca sequencial.
|Dell Inspiron 6400|Intel Core 2 Duo T7200 (2GHz) |2GB DDR-2 RAM|120GB HD (5.400)|15.4" Wide True Life (1280x800)|Bluetooth integrado, bateria 9 células e mais umas coisinhas smile.png|

Folding@Home Member!
intruso
intruso Tô em todas Registrado
1.8K Mensagens 41 Curtidas
#11 Por intruso
19/04/2005 - 11:49
fdbelo
O problema é que o vetor não está ordenado, então acho que o esforço computacional de ordenar tudo, e depois fazer um...


depende do tamanho do vetor e de como ele será usado posteriormente.

por exemplo se o vetor será usado em várias pesquisas, depois de ordenado, a ordenação será util pois ganhamos tempo na pesquisa binária tornando o programa mais eficiente nas próximas pesquisas.

se o vetor é pequeno e a pesquisa será feita uma única vez então não temos porque ordenar o vetor pois as maquinas atualmente são rapidas o suficiente para realizar uma pesquisa sequencial eficiente em tempo aceitavel para conjuntos pequenos e a ordenação só seria perda de tempo.

Também depende do que chamamos de "pequeno".

t+
fdbelo
fdbelo Veterano Registrado
1.9K Mensagens 1 Curtida
#12 Por fdbelo
19/04/2005 - 11:54
Sim, se o vetor for utilizado outras vezes, em várias pesquisas, pode realmente valer a pena ordenar o mesmo.

Porém daí quem sabe o ideal seria na própria entrada de dados (dependendo de como ela for feita), já fazer a ordenação. Cada novo número recebido pelo vetor já é colocado na posição correta, ficando o vetor sempre ordenado. Nesse caso pode-se implementar inclusive uma pesquisa binária para achar a posição correta do novo número dentro do vetor.

Tudo depende da necessidade.
|Dell Inspiron 6400|Intel Core 2 Duo T7200 (2GHz) |2GB DDR-2 RAM|120GB HD (5.400)|15.4" Wide True Life (1280x800)|Bluetooth integrado, bateria 9 células e mais umas coisinhas smile.png|

Folding@Home Member!
CaSt
CaSt Super Participante Registrado
573 Mensagens 5 Curtidas
#13 Por CaSt
20/04/2005 - 23:51
Não é mais ou menos isso que você está procurando?

#include <stdio.h>
int main()
{
int i=0;
int x;
int a=0;
int y[5];

for (i=0;i<=4;i++)
{
printf("Digite um valor numérico: &quot;
scanf("%d",&y[i]);
}
printf("Digite o valor que deseja procurar no vetor: &quot;
scanf("%d",&x);

for (i=0;i<=4;i++)
{
if (x==y[i])
printf("O valor foi encontrado: %d",y[i]);
else
a=a+1;
}

if (a>=5)
printf("\nO valor não foi encontrado.&quot;

return (0);
}


O usuário digitará 5 valores que serão gravados no vetor, e depois pesquisará por algum valor que esteja dentro deste...

[ ]'s
Linux User #394367
Asking Smart Questions

"Always remember that you are unique. Just like everyone else"
jose_silva_neto
jose_silva_n... General de Pijama Registrado
4.6K Mensagens 98 Curtidas
#14 Por jose_silva_n...
21/04/2005 - 16:58
Mr.1001
Não é mais ou menos isso que você está procurando?

[code]#include
int main()
{
...


Boa tarde,

O seu algoritimo também funciona, mas em qualquer situação, o vetor é percorrido sequencialmente do começo até o fim. A busca deve terminar se o valor foi encontrado ou se o vetor foi completamente percorrido, o laço que você propôs não leva isso em conta.

Té+

Kali
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#15 Por jqueiroz
22/04/2005 - 17:31
Porém daí quem sabe o ideal seria na própria entrada de dados (dependendo de como ela for feita), já fazer a ordenação. Cada novo número recebido pelo vetor já é colocado na posição correta, ficando o vetor sempre ordenado. Nesse caso pode-se implementar inclusive uma pesquisa binária para achar a posição correta do novo número dentro do vetor.


Eu também acho que esta é a solução mais eficiente.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal