Jump to content

ajuda em programação c


gribes

Recommended Posts

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;
}

 

Edited by gribes
Link to comment
Share on other sites

  • Administrators

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 to comment
Share on other sites

  • Administrators

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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...