Pesquisar número num vector em C

Publicado por Perfil removido em 14/11/2007

[ Hits: 27.586 ]

 


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

Linux contra a pirataria

Finalizando programas através de um terminal

Manjaro não inicializa pelo GRUB de outra distribuição [Resolvido]

Backup com tar remoto

Ubuntu 10.04: Claro 3G + pendrive

Leitura recomendada

Como executar um programa em C via Terminal [Vídeo]

Getchar(); sendo ignorado? Não mais!

Função recursiva para inverter um vetor de caracteres

Checagem de erro do scanf

Curso de C em vídeo ambientado no Linux

  

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts