Mais vendido?? A minha ideia::
Consideremos a
lista de encomendas. Nesta lista temos "
prodEnc" (código do produto), "
quantEnc" (quantidade da encomenda).
Primeiramente, vamos criar uma estrutura ao qual vamos chamar
maisVendido, no qual existem apenas três campos:: 1º - [ int codProduto ] e o 2º - [ int quantProduto ]. Entao teremos::
typedef struct maisV
{
int codProduto;
int quantProduto;
struct maisV * prox;
} maisVendido;
maisVendido * M;
Como usar esta lista??
Aqui começa a magia.
Percorremos a lista de encomendas do primeiro ao último elemento (o apontador "
prox" de encomendas != NULL)
Criamos uma lista M dentro da função/procedimento que é do tipo da lista de
maisVendido.
-- # ------------------------------------------------------------------------------------
dentro da função/procedimento criamos duas varáveis::
int maior = 0;
int codProduto = 0;
-- # ------------------------------------------------------------------------------------
while(enc->prox != NULL)//percorremos a lista de encomendas
{
if(M == NULL) //verificamos se a lista de maisVendido está preenchida
{ //Se não estiver, inserimos o primeiro elemento
M->codProduto = enc->prodEnc;
M->quantProduto = enc->quantEnc;
M->prox = NULL;
}
else
{ //se estiver preenchida, vamos "actualizar", digamos assim
while(M->prox != NULL) //enquanto não chegarmos ao fim dessa lista M
{
if(M->codProduto == enc->prodEnc) //Se o produto já existir na lista
{
M->quantProduto = M->quantProduto + enc->quantEnc; //actualizamos a quantidade vendida deste produto
}
else //Se não existir na lista, então vamos inseri-lo
{
M->codProduto = enc->prodEnc;
M->quantProduto = enc->quantEnc;
M->prox = NULL;
}
}//fim do while(M->prox != NULL)
}//fim do if (M == NULL)
}//fim do while(enc->prox != NULL)
-- # ------------------------------------------------------------------------------------
Acredito, salvo erro, que este código funcione, pois nunca o testei.
A ideia é criar uma lista suplente M, onde vou inserir todos os produtos existentes na lista de encomendas uma vez só, actualizando apenas a sua quantidade se o produto estiver repetido na lista de encomendas.
Assim no final só terei de percorrer a lista M e verificar qual o produto com maior número de vendas (
ver código seguinte)::
while(M->prox != NULL)
{
if(maior < M->quantProduto)
{
maior = M->quantProduto;
codProduto = M->codProduto;
}//fim do if (maior < M->quantProduto)
}//fim do while(M->prox != NULL)
printf("O produto mais vendido tem o codigo [ %d ]. Ja foram vendidas [ %d ] unidades desse produto\n",codProduto, maior);
-- # ---------------------------------------------------------------------------------------
Espero ter ajudado alguém, pelo menos com a ideia. Se estiver errado a nível do código, por favor deixem o vosso comentário com a correcção. :)
by Johnny Pina