Faça um programa, utilizando as funções abaixo, que inicialmente leia o nome e o preço unitário de cada um dos 1000 produtos diferentes comercializados por uma loja. A seguir, o programa irá permitir que sejam efetuadas várias consultas da seguinte forma: o usuário informa o nome do produto a ser pesquisado e obtém como resposta o seu preço unitário (caso seja encontrado) ou a mensagem “Produto inexistente” (caso não seja encontrado). Término das consultas: nome do produto a ser pesquisado = “Fim”. Faça as seguintes funções:
a) leitura: recebe como parâmetro dois vetores a serem preenchidos. Esta função irá ler os dados de cada um dos 1000 produtos diferentes comercializados por uma loja, armazenando-os nos vetores.
b) busca: recebe como parâmetro um vetor de string já preenchido e um nome a ser procurado no vetor. Esta função irá retornar -1 , caso o produto não seja encontrado ou a posição onde ele foi encontrado.

Passo 1

O problema pede que a gente leia os dados de 1000 produtos (nome e preço unitário) e armazene em dois vetores paralelos. Depois, devemos permitir consultas pelo nome do produto até que o usuário digite “Fim”. Para isso, vamos criar duas funções:
  1. Função leitura que preenche os vetores de nomes e preços.
  2. Função busca que, dado um vetor de nomes já preenchido e um nome a procurar, retorna a posição do produto ou -1 se não existir.
Em seguida, no main, chamamos leitura, repetimos a leitura de nomes de consulta, usamos busca para obter o índice e exibimos o preço ou “Produto inexistente”.

Passo 2

Implementamos a função leitura. Ela recebe como parâmetro o número de produtos n, um vetor de strings para os nomes e um vetor de floats para os preços, e preenche ambos com dados lidos da entrada padrão.
#include <stdio.h>
#define MAX_PRODUTOS 1000
#define MAX_NOME     100

void leitura(char nomes[][MAX_NOME], float precos[], int n) {
    for (int i = 0; i < n; i++) {
        // lê o nome (sem espaços) e o preço unitário
        scanf("%s %f", nomes[i], &precos[i]);
    }
}

Passo 3

Implementamos a função busca. Ela faz busca linear no vetor de nomes usando strcmp e retorna o índice em que encontrou ou -1 caso não encontre.
#include <string.h>

int busca(char nomes[][MAX_NOME], int n, const char *alvo) {
    for (int i = 0; i < n; i++) {
        if (strcmp(nomes[i], alvo) == 0) {
            return i;
        }
    }
    return -1;
}

Passo 4

No main, definimos os vetores, chamamos leitura com n=1000, depois fazemos um laço de consulta que lê um nome de produto, verifica se é "Fim" e, caso não seja, chama busca e imprime o preço ou mensagem de inexistência.
#include <stdio.h>
#include <string.h>

#define MAX_PRODUTOS 1000
#define MAX_NOME     100

void leitura(char nomes[][MAX_NOME], float precos[], int n);
int busca(char nomes[][MAX_NOME], int n, const char *alvo);

int main() {
    char nomes[MAX_PRODUTOS][MAX_NOME];
    float precos[MAX_PRODUTOS];
    char consulta[MAX_NOME];

    // 1) Leitura dos 1000 produtos
    leitura(nomes, precos, MAX_PRODUTOS);

    // 2) Loop de consultas até nome == "Fim"
    while (1) {
        scanf("%s", consulta);
        if (strcmp(consulta, "Fim") == 0) {
            break;
        }
        int pos = busca(nomes, MAX_PRODUTOS, consulta);
        if (pos != -1) {
            printf("%.2f\n", precos[pos]);
        } else {
            printf("Produto inexistente\n");
        }
    }

    return 0;
}

Resposta

#include <stdio.h>
#include <string.h>

#define MAX_PRODUTOS 1000
#define MAX_NOME     100

void leitura(char nomes[][MAX_NOME], float precos[], int n) {
    for (int i = 0; i < n; i++) {
        scanf("%s %f", nomes[i], &precos[i]);
    }
}

int busca(char nomes[][MAX_NOME], int n, const char *alvo) {
    for (int i = 0; i < n; i++) {
        if (strcmp(nomes[i], alvo) == 0) {
            return i;
        }
    }
    return -1;
}

int main() {
    char nomes[MAX_PRODUTOS][MAX_NOME];
    float precos[MAX_PRODUTOS];
    char consulta[MAX_NOME];

    leitura(nomes, precos, MAX_PRODUTOS);

    while (1) {
        scanf("%s", consulta);
        if (strcmp(consulta, "Fim") == 0) {
            break;
        }
        int pos = busca(nomes, MAX_PRODUTOS, consulta);
        if (pos != -1) {
            printf("%.2f\n", precos[pos]);
        } else {
            printf("Produto inexistente\n");
        }
    }

    return 0;
}

Exercícios relacionados