gribes Postado Março 14, 2022 em 11:59 Compartilhar Postado Março 14, 2022 em 11:59 (editado) Olá!! Estou com dificuldade em terminar uma atividade em linguagem c, onde se pede: Em um sistema de comércio eletrônico os dados são armazenados em 2 vetores e 1 matriz: float clientes[10] = {1,25,13,...} // ler códigos de clientes até o usuário informar o valor -1; float produtos[10] = {10,2,5,3,...} // ler códigos de produtos até o usuário informar o valor -1; float vendas[30][4] = {{1,10,3.5,11},{1,2,9,7},{25,3,4,4},...}ler a quádrupla (código do cliente, código do produto, quantidade, preço unitário} até o usuário informar o valor -1 para o código do cliente; Faça um programa em C que: leia os vetores e a matriz que serão informadas pelo usuário - os vetores e a matriz poderão ser declarados como variáveis globais; contenha funções/procedimentos para: a) calcular o valor total gasto por um cliente cujo o código será passado como parâmetro; b) calcular o valor médio gasto pelos clientes; c) calcular e mostrar na tela o valor já vendido de cada produto; d) encontrar o produto que apresentou o maior faturamento (produto mais vendido considerando o valor total vendido deste produto). O programa já esta quase todo pronto, porém estou com dificuldade na ultima função que pede o produto com maior faturamento, sendo que no meu programa o resultado é sempre o ultimo produto declarado na matriz (mesmo ele nao sendo o produto de maior faturamento). codigo: #include <stdio.h> //função ler vetor dos clientes int ler_clientes(float clientes[10]){ int a, i, pos; float num; printf("Informe os valores , 1 em cada linha. Informe -1 para finalizar.\n"); scanf("%f\n", &num); for(pos=0; num!=-1 && pos<10; pos++){ clientes[pos]=num; scanf("%f", &num); } return pos; } //função ler vetor dos produtos int ler_produtos(float produtos[10]){ int b, i, pos; float num; printf("Informe os valores , 1 em cada linha. Informe -1 para finalizar.\n"); scanf("%f\n", &num); for(pos=0; num!=-1 && pos<10; pos++){ produtos[pos]=num; scanf("%f", &num); } return pos; } //função ler matriz de vendas int ler_vendas(float vendas[30][4]){ int c, i, j, pos; float num; printf("Informe os valores , 1 em cada linha. Informe -1 para finalizar.\n"); scanf("%f\n", &num); for(pos=0; num!=-1 && pos<10; pos++){ for(j=0; j<4; j++){ vendas[pos][j]=num; scanf("%f", &num); } } return pos; } //função que retorna o gasto do cliente float gasto_clientes(float vendas[30][4], float cod1, int p3){ int i, j; float valor=0, soma=0; for(i=0; i<p3; i++){ //percorre linhas da matriz vendas if(cod1==vendas[i][0]){ valor=vendas[i][2]*vendas[i][3]; soma=soma+valor; } } return soma; } //função que retorna o gasto medio dos clientes float gasto_medio(float vendas[30][4], int p1, int p3){ int a, i; float valor=0, soma=0, media=0; for(i=0; i<p3; i++){ valor=vendas[i][2]*vendas[i][3]; soma=soma+valor; } for(a=0; a<p1; a++){ //percorre vetor de clientes for(i=0; i<p3; i++){ //percorre linhas da matriz vendas media=soma/p1; } } return media; } //função que retorna o valor ja vendido de cada produto void venda_produto(float produtos[10], float vendas[30][4], int p2, int p3){ int b, i; float valor=0, soma=0; for(b=0; b<p2; b++){ //percorre vetor produtos valor=0; soma=0; for(i=0; i<p3; i++){ //percorre linhas da matriz vendas if(produtos[b]==vendas[i][1]){ valor=vendas[i][2]*vendas[i][3]; soma=soma+valor; } } printf("valor ja vendido do produto %f = %f\n", produtos[b], soma); } } //função que retorna o produto mais vendido float mais_vendido(float produtos[10], float vendas[30][4], int p2, int p3){ int b, i; float mais_vendido=0, valor=0, soma=0; for(b=0; b<p2; b++){ //percorre vetor produtos valor=0; soma=0; for(i=0; i<p3; i++){ //percorre matriz vendas if(produtos[b]==vendas[i][1]){ valor=vendas[i][2]*vendas[i][3]; soma=soma+valor; } } if(soma>mais_vendido){ mais_vendido=produtos[b]; } } return mais_vendido; } int main() { float clientes[10], produtos[10], vendas[30][4]; float cod; int pos1, pos2, pos3; //lendo vetor dos clientes pos1=ler_clientes(clientes); //lendo vetor dos produtos pos2=ler_produtos(produtos); //lendo matriz de vendas pos3=ler_vendas(vendas); //calcular o valor total gasto por um cliente cujo o código será passado como parâmetro printf("informe o codigo do cliente\n"); scanf("%f", &cod); printf("Valor gasto pelo cliente %f: %f\n", cod, gasto_clientes(vendas, cod, pos3)); //calcular valor medio gasto dos clientes printf("Valor medio gasto pelos clientes: %f\n", gasto_medio(vendas, pos1, pos3)); //valor ja vendido de cada produto venda_produto(produtos, vendas, pos2, pos3); //produto mais vendido printf("Produto mais vendido: %f\n", mais_vendido(produtos, vendas, pos2, pos3)); return 0; } Editado Março 14, 2022 em 16:36 por gribes Citar Link para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Março 14, 2022 em 15:01 Compartilhar Postado Março 14, 2022 em 15:01 Opa, tudo bem? Para nos ajudar, pode editar seu tópico e formatar a parte do código como código? É o botãozinho <> no editor. ? Eu achei a lógica meio complexa, mas te recomendo examinar o valor da variável soma na iteração do loop na função mais_vendido. Se você souber colocar breakpoint de depurar, ótimo. Se não, pode usar um: printf("%f\n", soma); Bom, acredito que o problema esteja na seguinte parte: if(soma>mais_vendido){ mais_vendido=produtos[b]; } Aí você está comparando soma (que tem o total faturado por todas as vendas de determinado produto) com o código do produto. Na real você precisa armazenar quanto um produto vendeu e comparar soma com esta nova variável. Boa sorte! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Março 14, 2022 em 15:21 Compartilhar Postado Março 14, 2022 em 15:21 Pra facilitar seus testes, você pode escrever um arquivo texto com todas as entradas para o programa e depois só redirecionar a entrada ao executar seu programa. Por exemplo, o arquivo anexo pode ser usado da seguinte maneira no Prompt de Comando (no Windows) ou no shell do Linux: No examplo do arquivo anexo, ele vai criar: Produto de código 1. Produto de código 2. Cliente de código 1. Cliente de código 2. Cliente de código 3. Cliente de código 4. Venda para o cliente de código 2 do produto de código 1 de 5 unidades a 2.50 cada. Venda para o cliente de código 1 do produto de código 4 de 3 unidades a 5.00 cada. Venda para o cliente de código 1 do produto de código 2 de 1 unidade a 3.00. Ou seja, é o mesmo que você digitar tudo isso, só que não precisar digitar toda hora. ? Valeu. entrada.txt Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.