Jump to content
Fórum Script Brasil
  • 0

Me ajudem a encontrar erro em programinha que não roda


angelij
 Share

Question

Quero exatamente ... 

Desenvolver um algoritmo para ler a quantidade de produtos vendidos em uma mercearia no mês passado. Com base nessa quantidade, o algoritmo deve ler o código (valor inteiro), o preço de custo e o preço de venda de cada produto vendido e imprimir se houve lucro, prejuízo ou empate de preços para cada produto lido. O algoritmo também deve calcular o percentual de produtos que deram lucro, o percentual de produtos que deram prejuízo e o percentual de produtos que deram empate de preços. Depois, imprimir o código do produto que deu maior lucro ou informar se nenhum produto deu lucro na mercearia.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int cod_produto, contador, cont_lucro, cont_prej, cont_igual, quantidade, prejuizo, lucro, igualdade;
    float preco_custo, preco_venda;


    printf("Digite o codigo do produto: ");
    scanf("%d", &cod_produto);

    printf("Digite a quantidade vendida deste produto: ");
    scanf("%d", &quantidade);

    printf("Digite o preço de custo do produto: ");
    scanf("%f", &preco_custo);

    printf("Digite o preço de venda do produto: ");
    scanf("%f", &preco_venda);


    printf("O preço total da compra foi de %.2f x %d = %f", preco_custo, quantidade, preco_custo * quantidade);
    printf("O preço de venda da compra foi de %.2f x %d = %f", preco_venda, quantidade, preco_venda * quantidade);

while (cod_produto>=1 && cod_produto<=9999)
    {

        if(preco_custo == preco_venda)

            printf("\nO preço de custo do produto codigo %.2f e igual ao de venda.", preco_custo);
            cont_igual++;

        else if (preco_custo > preco_venda)
        {
            printf("\nO preço do produto codigo %.2f apresentou prejuizo.", preco_custo);
            cont_prej++;
        }
        else if (preco_custo < preco_venda)
        {
            printf("\nO preço do produto codigo %d apresentou lucro.", cod_produto);
            cont_lucro++;
        }
        else
        {
            printf("há' algo de errado!");
            contador++;
        }

        prejuizo = contador / cont_prej;
        lucro = contador / cont_lucro;
        igualdade = contador / cont_igual;
    }
    return 0;
    }

 

 

 

Edited by angelij
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Essa linha esta mal: while ( cod_produto = 1 && cod_produto <= 9999 )  na parte cod_produto = 1, sempre se vai executar pois cod_produto sempre vai valer 1. Não seria cod_produto >= 1?.

 

Essa linha esta errada tambem:
printf ( "O preço total da compra foi de %.2f x %d = %f", preco_custo = preco_custo * quantidade );

você tem 3 especificadores, %.2f, %d e %f, porem preco_custo = preco_custo * quantidade se trata de uma só expressão, é como si fosse:
preco_custo = preco_custo * quantidade
printf ( "O preço total da compra foi de %.2f x %d = %f", preco_custo );
... O preço_custo vai parar no %.2f, os outros 2 especificadores estão esperando suas respectivas variáveis.

Talvez seja:
printf ( "O preço total da compra foi de %.2f x %d = %f", preco_custo,  quantidade, preco_custo * quantidade );

A mesma coisa acontece na linha de abaixo:
printf ( "O preço de venda da compra foi de %.2f x %d = %f", preco_venda = preco_venda * quantidade );

 

 

Link to comment
Share on other sites

  • 0

Compreendi o que você explicou vangodp, fiz as devidas modificações conforme você sugeriu, porém o programinha continua parando no primeiro "else if", ocorre que recorri a alguns livros e apostilas, mas não consigo identificar o que está errado.


Fico grata caso alguém possa me ajudar nisso!

 

Edited by angelij
Link to comment
Share on other sites

  • 0
#include <stdio.h>

#define N_PRODUTOS 100

struct Produto{
    int codigo;
    float compra;
    float venda;
};


int main() {
    struct Produto lista[N_PRODUTOS];
    int r = 0; //numero de produtos registrados. Irá aumentando conforme o numero de produtos registrados.
    int sair = 0;
    int n = 0;
    //Pedimos produtos até que se escolha sair, nesse caso sair=1, e nao supere N_PRODUTOS.
    while ( !sair ) {
        printf("Entre com o código do produto ou 0 para sair: ");
        scanf("%d%*c", &n);
        switch (n) {
            case 0:
                sair = 1;
                break;                
            default:
                if ( ( ( r >= 0 ) && ( r < N_PRODUTOS ) ) ) { //E somente se o código for positivo e nao superar a N_PRODUTOS
                    printf ( "Click!!\n" );
                    lista[r].codigo = n;
                    printf("Valor de compra?: ");
                    scanf("%f%*c", &lista[r].compra);
                    printf("Valor de venda?: ");
                    scanf("%f%*c", &lista[r].venda);
                    r++;//Cada produto registrado reg se incrementa. É o indice.
                } else if ( r == N_PRODUTOS ) { //si n for igual a N_PRODUTOS sai automaticamente, pois nao podemos registrar mais produtos. Si necesitas más produtos aumente o valor a N_PRODUTOS
                    printf ( "Numero maximo de registros atingido!!!\n" );
                    sair = 1;
                }
    
                break;
       
        }
    }
    printf("\n");
    int i;
    for ( i = 0; i < r ; i++ ) {
        printf ( "Produto cod: %d ", lista[i].codigo  );
        int cont_igual = 0, cont_prej = 0, cont_lucro = 0, contador = 0;
        
        if ( lista[i].compra == lista[i].venda ) {
            printf ( "igual ao de venda." );
            cont_igual++;
            
        } else if ( lista[i].compra > lista[i].venda ) {
            printf ( "apresentou prejuizo." );
            cont_prej++;
            
        } else if ( lista[i].compra < lista[i].venda ) {
            printf ( "apresentou lucro.");
            cont_lucro++;
        } else {
            printf ( "há' algo de errado!" );
            contador++;
        }
        printf("\n");
    }
    
    //falta calcular o porcentagem aqui.
    
    getchar();
    return 0;
}

 

Acho que isso te vai servir, si tiver duvidas pergunte. Falta terminar a parte das porcentagens, isso você será capaz de fazer correto? Estude o código linha por linha, tente prever o que ele faz.

Link to comment
Share on other sites

  • 0
#include <stdio.h>

#define N_PRODUTOS 100

struct Produto{
    int codigo;
    float compra;
    float venda;
};


int main() {
    struct Produto lista[N_PRODUTOS];
    int r = 0; //numero de produtos registrados. Irá aumentando conforme o numero de produtos registrados.
    int sair = 0;
    int n = 0;
    //Pedimos produtos até que se escolha sair, nesse caso sair=1, e não supere N_PRODUTOS.
    while ( !sair ) {
        printf("Entre com o código do produto ou 0 para sair: ");
        scanf("%d%*c", &n);
        switch (n) {
            case 0:
                sair = 1;
                break;                
            default:
                if ( ( ( r >= 0 ) && ( r < N_PRODUTOS ) ) ) { //E somente se o código for positivo e não superar a N_PRODUTOS
                    printf ( "Click!!\n" );
                    lista[r].codigo = n;
                    printf("Valor de compra?: ");
                    scanf("%f%*c", &lista[r].compra);
                    printf("Valor de venda?: ");
                    scanf("%f%*c", &lista[r].venda);
                    r++;//Cada produto registrado reg se incrementa. É o indice.
                } else if ( r == N_PRODUTOS ) { //si n for igual a N_PRODUTOS sai automaticamente, pois não podemos registrar mais produtos. Si necesitas más produtos aumente o valor a N_PRODUTOS
                    printf ( "Numero maximo de registros atingido!!!\n" );
                    sair = 1;
                }
    
                break;
       
        }
    }
    printf("\n");
    int i;
    for ( i = 0; i < r ; i++ ) {
        printf ( "Produto cod: %d ", lista[i].codigo  );
        int cont_igual = 0, cont_prej = 0, cont_lucro = 0, contador = 0;
        
        if ( lista[i].compra == lista[i].venda ) {
            printf ( "igual ao de venda." );
            cont_igual++;
            
        } else if ( lista[i].compra > lista[i].venda ) {
            printf ( "apresentou prejuizo." );
            cont_prej++;
            
        } else if ( lista[i].compra < lista[i].venda ) {
            printf ( "apresentou lucro.");
            cont_lucro++;
        } else {
            printf ( "há' algo de errado!" );
            contador++;
        }
        printf("\n");
    }
    
    //falta calcular o porcentagem aqui.
    
    getchar();
    return 0;
}

 

Acho que isso te vai servir, si tiver duvidas pergunte. Falta terminar a parte das porcentagens, isso você será capaz de fazer correto? Estude o código linha por linha, tente prever o que ele faz.

Explique-me esta parte do código por gentileza...

struct Produto lista[N_PRODUTOS];

lista.codigo

#include <stdio.h>

#define N_PRODUTOS 100

struct Produto{
    int codigo;
    float compra;
    float venda;
};


int main() {
    struct Produto lista[N_PRODUTOS];
    int r = 0; //numero de produtos registrados. Irá aumentando conforme o numero de produtos registrados.
    int sair = 0;
    int n = 0;
    //Pedimos produtos até que se escolha sair, nesse caso sair=1, e não supere N_PRODUTOS.
    while ( !sair ) {
        printf("Entre com o código do produto ou 0 para sair: ");
        scanf("%d%*c", &n);
        switch (n) {
            case 0:
                sair = 1;
                break;                
            default:
                if ( ( ( r >= 0 ) && ( r < N_PRODUTOS ) ) ) { //E somente se o código for positivo e não superar a N_PRODUTOS
                    printf ( "Click!!\n" );
                    lista[r].codigo = n;
                    printf("Valor de compra?: ");
                    scanf("%f%*c", &lista[r].compra);
                    printf("Valor de venda?: ");
                    scanf("%f%*c", &lista[r].venda);
                    r++;//Cada produto registrado reg se incrementa. É o indice.
                } else if ( r == N_PRODUTOS ) { //si n for igual a N_PRODUTOS sai automaticamente, pois não podemos registrar mais produtos. Si necesitas más produtos aumente o valor a N_PRODUTOS
                    printf ( "Numero maximo de registros atingido!!!\n" );
                    sair = 1;
                }
    
                break;
       
        }
    }
    printf("\n");
    int i;
    for ( i = 0; i < r ; i++ ) {
        printf ( "Produto cod: %d ", lista[i].codigo  );
        int cont_igual = 0, cont_prej = 0, cont_lucro = 0, contador = 0;
        
        if ( lista[i].compra == lista[i].venda ) {
            printf ( "igual ao de venda." );
            cont_igual++;
            
        } else if ( lista[i].compra > lista[i].venda ) {
            printf ( "apresentou prejuizo." );
            cont_prej++;
            
        } else if ( lista[i].compra < lista[i].venda ) {
            printf ( "apresentou lucro.");
            cont_lucro++;
        } else {
            printf ( "há' algo de errado!" );
            contador++;
        }
        printf("\n");
    }
    
    //falta calcular o porcentagem aqui.
    
    getchar();
    return 0;
}

 

Acho que isso te vai servir, si tiver duvidas pergunte. Falta terminar a parte das porcentagens, isso você será capaz de fazer correto? Estude o código linha por linha, tente prever o que ele faz.

Link to comment
Share on other sites

  • 0

Que parte? você pegou todo o código, porem citou 

struct Produto lista[N_PRODUTOS];

lista.codigo

 

Uma Lista pois é isso... uma lista dahhh XD!! você não faz um array de inteiros? Pois você pode criar um array de estruturas, a diferença esta na forma de acessar os elementos, em um array de chars por exemplo, si o declaramos como char palabra[11]="Alo mundo!" podemos ir direto para a 5ª letra desta forma palavra[4], pois em um array de estruturas( struct Produto lista[N_PRODUTOS];) podemos fazer a mesma coisa, si queremos ir a 5ª estrutura de esse array(lista) fazemos lista[4] e depois acessamos o que tem dentro com '.' mais o nome do membro, exemplo lista[4].código, lembre-se que que o sistema é primeiro acesso a estrutura e logo ao membro com o operador de seleçao de membro '.' seguido do nome da variavel membro da estrutura, não se trata de uma só estrutura, si não de N_produtos (numero de produtos) que vale 100.

Pense em uma lista como isso:

001 2.50 3.00
002 3.05 4.00
...
099 0.70 1.00
100 0.70 1.00

Isso é uma lista. Quando eu quero ler a ultima linha a olho que eu faço? sigo com meu olho até a ultima linha, depois vejo o valor não é? Então! sigo com meu olho até a ultima linha lista[99]. Agora que já localizei a ultima linha leio seu conteúdo, por exemplo, valor de compra: lista[99].compra, lembra que lista[99].compra esta composto por 2 partes, lista[99] + .compra, acesso primeiro a estrutura e depois ao dado interno da estrutura, tudo junto fica lista[99].compra, porem são 2 ações conjuntas.

não sei si essa é sua duvida pois é o que eu entendi. Si não for isso pergunte novamente e pegue o texto exato, comentando ao lado sua duvida naquelas linhas que achar conveniente.

Si achar melhor, pode me adicionar no skype e te explico melhor.

Sorte!

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
Answer this question...

×   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.

 Share



  • Forum Statistics

    • Total Topics
      150.1k
    • Total Posts
      647k
×
×
  • Create New...