Pesquisar número num vector em C

Publicado por Perfil removido em 14/11/2007

[ Hits: 28.744 ]

 


Pesquisar número num vector em C



Esta é uma dica para ajudar a encontrar um inteiro num vetor, indicando depois a posição desse número no vetor.

#include<stdio.h>

int main()
{

int vec[5],i,x;
printf("\n nº a procurar no vector: ");
//inserir o nº a procurar no vector
scanf("%d",&x);
//ler vector
for(i=1;i<=5;i++)
scanf("%d",&vec[i]);

i=1;
//encontrar a posição de x no vector v
while(vec[i]!=x)
i++;
//mostrar a posição
printf("\nencontrado na pos %d",i);

return 0;
}

Para compilar basta guardar o código num arquivo e fazer:

$ cc nome_ficherio.c -o nome_executável

Espero que gostem *

Outras dicas deste autor

Mentindo descaradamente para recompilar o kernel do Fedora

Como instalar o Age of Empires2 sem PlayOnLinux ou Lutris

Manjaro - Escolher mirrors brasileiros com o pacman

Shell Script - Usando vários scripts em um só

Fazer funcionar a "rodinha" (scroll) do mouse PS/2 Slackware 12

Leitura recomendada

Gerando números aleatórios em C

Instalando a biblioteca libxml2

Como limpar a tela em C

Utilizando funções em C++

stty: alternativa para echo e noecho

  

Comentários
[1] Comentário enviado por HelioCampos em 14/11/2007 - 10:26h

1º) Se não me engano, o vetor tem 5 posições, de 0 à 4, então esse seu programa vai dar erro quando chegar a i=5

2º) Foi pra esses casos que o comando "for" foi inventado.
for ( i = 0; vec[i]!=x; i++);

3º) Se o número que a pessoa digitar não existir no vetor, o programa vai dar erro sempre pois você nunca verifica se o i é menor que o índice máximo do vetor.
Assim, um jeito melhor de apresentar o programa seria:
// Procurando o valor no vetor.
for ( i = 0; vec[i]!=x && i < 5; i++);
// Imprimindo a posição se o valor existir.
if ( i == 5 )
printf("O valor não existe no vetor.\n");
else
printf("\nencontrado na pos %d",i);

[2] Comentário enviado por albertguedes em 27/12/2007 - 22:40h

Realmente tem que se verificar os programas antes de publica-los Joana.
Mas pelo menos você está tentando. Continue assim.

[3] Comentário enviado por Steve em 17/05/2018 - 18:20h

Ela só precisaria melhorar o While!

[4] Comentário enviado por Steve em 17/05/2018 - 18:44h

Mas se for para contribuir, o que ela poderia fazer mantendo o código dela sem mecher seria somente uma correção no while. Eu considero o if abaixo informado apenas porque comentaram de ter uma resposta, mas dentro do que ela publicou era informação, logo, não considero como crítica a falta do if .

Do contrário, o programa inteiro teria que ser mudado para checar um monte de condições do usuário e deixaria de ser um simples exemplo, porque teria que verificar se a pessoa digitou números, consertar a captura do comando scanf e etc...

De qualquer forma acho que o exemplo da Joana está bom, considerando apenas a correção do while.

i = 0;
while(vec[i] != x && i < 5) //encontrar a posição de x no vector v
i++;
if (vec[i] == x)
printf("Encontrado na posicao %d\n",i); //mostrar a posição
else
printf("Nao Encontrado\n");

[5] Comentário enviado por Heitor.rj em 28/02/2019 - 23:16h

Existem erros, mas a iniciativa é válida. Vamos então corrigir definitivamente os erros encontrados aqui para Joana Silva.

DICA: Coloque os códigos que vc postar entre [code] [/code] pois eles ficarão melhor formatados aqui no Viva o Linux

Erros Econtrados que foram corrigidos:

#include <stdio.h>

int main(void){ // SEMPRE Declare assim a função main, é a forma correta de declará-la

// VAMOS corrigir essa declaração, pois se vc não informar o conteúdo de vec, ele estará vazio né sem conteúdo, ou ainda pior com valores inimagináveis
// Troquei o nome das variáveis para nomes mais básicos para iniciantes entender o que as variáveis fazem!
// int vec[5],i,x;
int vec[5] = {1,2,3,4,5}, Localizar, NaoEncontrado = 0;

printf("\n nº a procurar no vector: ");
scanf("%d", &Localizar); // inserir o nº a procurar no vector

// SOBRE O FOR OU O WHILE. Penso que vc deveria escolher um dos 2. Não precisa os 2 em seu código. Apenas 1 faz bem esse trabalho!
// ENTÃO eu mostrarei usando o FOR e TAMBÉM MOSTRAREI usando o While. Mas como disse, não precisa dos 2
// CORRIGINDO o seu for
// for(i=1;i<=5;i++) //ler vector
// scanf("%d",&vec[i]);

// EXEMPLO USANDO O for
for (int Posicao = 0; Posicao < 5; Posicao++)
if (vec[Posicao] == Localizar){
printf(" O Laço for Encontrou na posição %d\n", Posicao);
NaoEncontrado = 1;
}

// CORRIGINDO O SEU while
// i=1;
// while(vec[i]!=x) //encontrar a posição de x no vector v
// i++;

// EXEMPLO USANDO O while
int Posicao = 0;
while(Posicao < 5){
if (vec[Posicao] == Localizar) {
printf(" O Laço while Encontrou na posicao %d\n",Posicao);
NaoEncontrado = 1;
}
Posicao++;
}
if (NaoEncontrado == 0)
printf(" O valor não existe no vetor.\n");
}

Infelizmente aqui neste comentário não funciona [code][/code] ficando tudo acima mal formatado colado a esquerda!
Lembrando, não precisa do for e while. Apenas 1 deles resolve o problema, coloquei os 2 para vc poder escolher qual prefere usar!



Contribuir com comentário