Ir para conteúdo

ajuda em programação c


gribes

Posts Recomendados

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:

  1. 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;

  2. 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 por gribes
Link para o comentário
Compartilhar em outros sites

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!

 

Link para o comentário
Compartilhar em outros sites

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:

image.thumb.png.ef9a442dfd723f62a76263c92aaebd8a.png

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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...