Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Marcos William M

C Erro no comando For

Recommended Posts

Saudações,

 

Estou realizando um exercicio onde se deve pedir o valor de um carro, o seu ano, com estes dois valores, caso o carro seja de 2000 para baixo, devera conter 12% de desconto, caso seja acima de 2000, 7% de desconto. O algoritmo deverá retornar o Valor a pagar, o desconto que foi oferecido, a quantidade de carros até o ano 2000, e a quantidade total, depois de informado os resultados, o algoritmo pergunta se o usuario quer continuar ou não. Eu estabeleci que o usuario deve digitar 1 para continuar, e 2 para sair.

 

O problema é que o algoritmo não esta entrando na função for, mesmo com o valor de "parar" já estabelecido em 1. Onde está o erro ?

 

Segue o algoritmo:

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

/* Digitar o preço do carro, calcular o desconto e o valor a ser pago, Carros < 2000 - 12% de desconto, Carros > 2000 - 7% de desconto
o sistema pergunta se deve continuar a calcular até a resposta ser N, no final, informa total de carros com ano até 2000 e total geral */
float ValorPago (float valor_carro, float valor_desconto){
    float valor_pago;
    valor_pago = valor_carro - valor_desconto;
    return valor_pago;
}
float ValorDescontoMenor2000 (float valor_carro){
    float valor_desconto;
    valor_desconto = valor_carro * 0.12;
    return valor_desconto;
}
float ValorDescontoMaior2000 (float valor_carro){
    float valor_desconto;
    valor_desconto = valor_carro * 0.07;
    return valor_desconto;
}

int main() {
    float valor_carro, valor_desconto, valor_pago;
    int ano_carro, parar, qtd_2000, qtd_total;
    
    setlocale (LC_ALL, "");
    
    qtd_2000 = 0;
    qtd_total = 0;
    parar = 1;
    
    for (parar = 1; parar >= 2; qtd_total ++){
        
        printf("\n Digite o valor do carro \t");
        scanf ("%f", & valor_carro);
        printf("\n Digite o ano do carro\t");
        scanf ("%d", & ano_carro);
        if (ano_carro <= 2000){
            valor_desconto = ValorDescontoMenor2000 (valor_carro);
            valor_pago = ValorPago (valor_carro, valor_desconto);
            printf("O valor a ser pago é: %.2f \n Desconto:%.2f", valor_pago, valor_desconto);
            qtd_2000 ++;
        }
        else{
                valor_desconto = ValorDescontoMaior2000 (valor_carro);
                valor_pago = ValorPago (valor_carro, valor_desconto);
                printf("O valor a ser pago é: %.2f \n Desconto: %.2f", valor_pago, valor_desconto);        
            }
        
        printf("\n Digite 1 para continuar ou 2 para sair \t");
        scanf("%d", & parar);
    } 
    printf("Quantidade de carros total: %d \n Quantidade de carros com ano até 2000: %d", qtd_total, qtd_2000);
    return 0;
}

 

"

 

Editado por DiF
Botão CODE <>
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Marcos William M   O erro ta aqui
 

 for (parar = 1; parar >= 2; qtd_total ++){

O certo devia ser 
 for (parar = 1; parar >= 1; qtd_total ++){

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Marcos William M    exatamente o que o @Xaws  disse, esse for assim não funciona ,  creio que seja melhor usar o do /  while .

  então seu código ficaria assim :

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

/* Digitar o preço do carro, calcular o desconto e o valor a ser pago, Carros < 2000 - 12% de desconto, Carros > 2000 - 7% de desconto
o sistema pergunta se deve continuar a calcular até a resposta ser N, no final, informa total de carros com ano até 2000 e total geral */
float ValorPago (float valor_carro, float valor_desconto){
    float valor_pago;
    valor_pago = valor_carro - valor_desconto;
    return valor_pago;
}
float ValorDescontoMenor2000 (float valor_carro){
    float valor_desconto;
    valor_desconto = valor_carro * 0.12;
    return valor_desconto;
}
float ValorDescontoMaior2000 (float valor_carro){
    float valor_desconto;
    valor_desconto = valor_carro * 0.07;
    return valor_desconto;
}

int main() {
    float valor_carro, valor_desconto, valor_pago;
    int ano_carro, parar, qtd_2000, qtd_total;

    setlocale (LC_ALL, "");

    qtd_2000 = 0;
    qtd_total = 0;
    parar = 1;

    do{
        parar=1;
        printf("\n Digite o valor do carro \t");
        scanf("%f",&valor_carro);
        printf("\n Digite o ano do carro\t");
        scanf("%d",&ano_carro);
        qtd_total++;
        valor_desconto = ValorDescontoMenor2000 (valor_carro);
        valor_pago = ValorPago (valor_carro, valor_desconto);
        printf("O valor a ser pago é: %.2f \n Desconto:%.2f", valor_pago, valor_desconto);
        if(ano_carro <= 2000){
            qtd_2000 ++;
        }
        printf("\n Digite 1 para continuar ou 2 para sair \t");
        scanf("%d",&parar);
    }while(parar != 2);
    printf("\n Quantidade de carros total: %d \n Quantidade de carros com ano até 2000: %d", qtd_total, qtd_2000);
    printf("\n     Tecle");
    getch();
    printf("\n\n");
    return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 17 horas atrás, Xaws disse:

    @Marcos William M   O erro ta aqui
     

    
     for (parar = 1; parar >= 2; qtd_total ++){
    
    O certo devia ser 
     for (parar = 1; parar >= 1; qtd_total ++){

     

     

    Fazendo deste jeito, o Loop fica infinito, independente do valor que tu digitar quando ele pergunta se tu deseja continuar ou  nao.

     

    Conseguir fazer o codigo funcionar desta maneira :

     

    for (parar = 1; parar < 2; qtd_total ++){
    		
    		printf("\n Digite o valor do carro \t");
    		scanf ("%f", & valor_carro);
    		printf("\n Digite o ano do carro\t");
    		scanf ("%d", & ano_carro);
    		if (ano_carro <= 2000)

    No entanto, o que ainda não entendi é que com esta linha de comando, decifrando o for seria: Começar quando parar seja igual a 1, parar quando o parar for menor que 2, acrescentar 1 unidade em qtd_total. Certo ?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Marcos William M  Da forma que eu falei funcionou normal, eu testei aqui (uso o devc++)

    "No entanto, o que ainda não entendi é que com esta linha de comando, decifrando o for seria: Começar quando parar seja igual a 1, parar quando o parar for menor que 2, acrescentar 1 unidade em qtd_total. Certo ?"

    Não entendi direito sua pergunta, mais se for o que faz o for nesse caso: for (parar = 1; parar < 2; qtd_total ++){
     Sempre que parar for menor que 2 ele vai add

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×