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.
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
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:
- Função leitura que preenche os vetores de nomes e preços.
- Função busca que, dado um vetor de nomes já preenchido e um nome a procurar, retorna a posição do produto ou
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
, 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
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
, 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;
}