gribes Posted March 14, 2022 at 11:59 AM Share Posted March 14, 2022 at 11:59 AM (edited) 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; } Edited March 14, 2022 at 04:36 PM by gribes Quote Link to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted March 14, 2022 at 03:01 PM Administrators Share Posted March 14, 2022 at 03:01 PM 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! Quote Link to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted March 14, 2022 at 03:21 PM Administrators Share Posted March 14, 2022 at 03:21 PM 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.