Considere que a struct abaixo está armazenada na sua lista. Faça uma função para buscar o produto de menor preço. A função deve retornar se a operação foi possível ou não.
struct produto{
int codProd; //código do produto
char nomeProd[10]; //nome do produto
float valor; //valor do produto
int qtdeEstoque; //quantidade disponível em estoque
}
struct produto{
int codProd; //código do produto
char nomeProd[10]; //nome do produto
float valor; //valor do produto
int qtdeEstoque; //quantidade disponível em estoque
}
Passo 1
O exercício pede uma função em C que, dado um vetor de structs produto e seu tamanho, encontre o produto de menor valor e indique se conseguiu (por exemplo, retornando 1) ou não (por exemplo, retornando 0). Vamos usar busca linear e passar o resultado por parâmetro.
Passo 2
Primeiro, checamos se o vetor está vazio: se o tamanho for menor ou igual a zero, não há produto para buscar, então retornamos 0.
Se houver ao menos um produto, inicializamos o “menor” com o primeiro elemento do vetor, copiando sua struct para o endereço apontado pelo parâmetro de saída.
Percorremos o restante do vetor fazendo comparações: sempre que encontrarmos um produto com valor menor que o valor armazenado em *menor, atualizamos *menor com esse produto.
Ao fim do laço, retornamos 1 para indicar que a operação foi bem-sucedida e o produto de menor preço está disponível no struct apontado pelo parâmetro.
Se houver ao menos um produto, inicializamos o “menor” com o primeiro elemento do vetor, copiando sua struct para o endereço apontado pelo parâmetro de saída.
Percorremos o restante do vetor fazendo comparações: sempre que encontrarmos um produto com valor menor que o valor armazenado em *menor, atualizamos *menor com esse produto.
Ao fim do laço, retornamos 1 para indicar que a operação foi bem-sucedida e o produto de menor preço está disponível no struct apontado pelo parâmetro.
Passo 3
Para facilitar, usamos como protótipo: int buscaMenorPreco(struct produto lista[], int n, struct produto *menor).
Resposta
int buscaMenorPreco(struct produto lista[], int n, struct produto *menor) {
// Se não tiver elementos, não dá para buscar
if (n <= 0)
return 0;
// Se não tiver elementos, não dá para buscar
if (n <= 0)
return 0;
// Inicializa menor com o primeiro produto
*menor = lista[0];
// Percorre o vetor a partir do segundo elemento
for (int i = 1; i < n; i++) {
if (lista[i].valor < menor->valor) {
*menor = lista[i];
}
}
// Operação bem-sucedida
return 1;
}