Ir para conteúdo
Fórum Script Brasil
  • 0

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


angelij

Pergunta

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

 

 

 

Editado por angelij
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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!

 

Editado por angelij
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

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

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...