Faça um programa que preencha um vetor com os nomes digitados pelo usuário (no máximo 100 nomes). Em seguida, permite a realização de várias pesquisas (utilizar o algoritmo de busca seqüencial sobre o vetor resultante, retornando qual é a posição (ordem de entrada) do nome pesquisa ou uma mensagem explicativa quando ele não for encontrado. Tanto a entrada quanto a pesquisa serão finalizadas se o usuário digitar “FIM”.

Passo 1

O enunciado pede para criar um vetor de até 100 nomes digitados pelo usuário, usando o algorítmo de busca seqüencial para responder a várias pesquisas. Em ambas as fases (leitura de nomes e de pesquisas) o laço deve parar se o usuário digitar “FIM”.

Passo 2

Reservamos um vetor bidimensional de caracteres para armazenar até 100 strings e um contador para controlar quantos nomes já foram lidos. Em seguida, fazemos um laço de leitura: lemos cada nome e, se for diferente de “FIM” e ainda não alcançamos 100 nomes, armazenamos no vetor e incrementamos o contador.

Passo 3

Depois de preencher o vetor, iniciamos o segundo laço para as pesquisas: lemos cada termo de pesquisa e, se for “FIM”, encerramos o programa. Caso contrário, executamos a busca seqüencial no vetor de nomes, comparando cada posição com a string pesquisada.

Passo 4

Na busca seqüencial, percorremos o vetor do índice 0 até n-1. Se encontrarmos uma correspondência exata (strcmp == 0), guardamos a posição (i+1) e interrompemos o laço. Se o laço terminar sem achar, mantemos um indicador de “não encontrado”.

Passo 5

Por fim, dependendo de termos encontrado o nome ou não, imprimimos a mensagem correspondente: “Nome encontrado na posicao X” (onde X é a ordem de entrada, começando em 1) ou “Nome nao encontrado”.

Resposta

#include <stdio.h>
#include <string.h>
#define MAX_NOMES 100
#define MAX_TAM 100
int main() {
char nomes[MAX_NOMES][MAX_TAM];
char consulta[MAX_TAM];
int n = 0;
// Leitura dos nomes
while (n < MAX_NOMES) {
    scanf("%99s", consulta);
    if (strcmp(consulta, "FIM") == 0) {
        break;
    }
    strcpy(nomes[n], consulta);
    n++;
}

// Leitura e processamento das pesquisas
while (1) {
    scanf("%99s", consulta);
    if (strcmp(consulta, "FIM") == 0) {
        break;
    }

    int pos = -1;
    for (int i = 0; i < n; i++) {
        if (strcmp(consulta, nomes[i]) == 0) {
            pos = i + 1;  // posição em ordem de entrada
            break;
        }
    }

    if (pos != -1) {
        printf("Nome encontrado na posicao %d\n", pos);
    } else {
        printf("Nome nao encontrado\n");
    }
}

return 0;
}

Exercícios relacionados