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

Quantas Moedas nescessária para Troco


Dorivan Silva Sousa

Pergunta

Esse processo deve receber um valor de troco e calcular quantas moedas de cada valor são necessárias para o troco. Por exemplo, se o troco for de R$ 0,85, serão necessárias uma moeda de 0,50, uma de 0,25 e uma de 0,10.

Ele deve receber um valor e imprimir a quantidade de cada moeda.

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

int main()
{
      float troco;
      int t100, t050, t025, t010, t005, t001;

      t100=0;
      t050=0;
      t025=0;
      t010=0;
      t005=0;
      t001=0;
      troco=0;

      system("CLS");
      printf("Informe o Troco ");
      scanf("%f",&troco);

      while (troco > 0)
      {
        if (troco >= 1)
        {
          troco=troco-1;
          t100++;
        } else if (troco >= 0.50)
        {
          troco=troco-0.50f;
          t050++;
        } else if (troco >= 0.25)
        {
          troco=troco-0.25f;
          t025++;
        } else if (troco >= 0.10)
        {
          troco=troco-0.10f;
          t010++;
        } else if (troco >= 0.05)
        {
          troco=troco-0.05f;
          t005++;
        } else if (troco >= 0.01)
        {
          troco=troco-0.01f;
          t001++;
        }
      }

      if (t100 > 0)
        printf("%i Moeda(s) de um Real\n",t100);
      if (t050 > 0)
        printf("%i Moeda(s) de Cinquenta Centavos\n",t050);
      if (t025 > 0)
        printf("%i Moeda(s) de Vinte e Cinco Centavos\n",t025);
      if (t010 > 0)
        printf("%i Moeda(s) de Dez Centavos\n",t010);
      if (t005 > 0)
        printf("%i Moeda(s) de Cinco Centavos\n",t005);
      if (t001 > 0)
        printf("%i Moeda(s) de Um Centavo\n",t001);

      printf("\n");

      system("PAUSE");
      return 0;
}

Quando tem valores que o troco precisa de moedas de 0,10 - 0,05 - 0,01 ele fica em loop eterno é como se perdesse a precisão na hora de diminui o valor do troco... já tentei mudar pra double mas simplesmente acontece nada

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Bom, mudei um pouco da sua lógica, alias dos valores no if alinhado dentro do laço for.

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

int main()
{
      float troco;
      int t100, t050, t025, t010, t005, t001;

      t100=0;
      t050=0;
      t025=0;
      t010=0;
      t005=0;
      t001=0;
      
      

      system("CLS");           //Limpando tela
      printf("Informe o Troco:  ");
      scanf("%f",&troco);

      while (troco > 0.01)
      {
            
        if (troco >0.99)
        {
          troco=(float)troco-1;
          t100++;
         
        } 
        else if (troco >0.49)
              {
              troco=(float)troco-0.50;
              t050++;
              
              } 
              else if (troco > 0.24)
                {
                  troco=(float)troco-0.25;
                  t025++;
                 
                  } 
                  else if (troco >0.09)
                   {
                     troco=(float)troco-0.10;
                     t010++;
                    
                     } else if (troco > 0.04)
                        {
                          troco=(float)troco-0.05;
                          t005++;
                         
                        } else if (troco > 0.00)
                                {
                                  troco=(float)troco-0.01;
                                  t001++;
                                  
                                }
      }


      //Impressão de moedas
      if (t100 > 0)
        printf("\n\n%i Moeda(s) de um Real\n",t100);
      if (t050 > 0)
        printf("%i Moeda(s) de Cinquenta Centavos\n",t050);
      if (t025 > 0)
        printf("%i Moeda(s) de Vinte e Cinco Centavos\n",t025);
      if (t010 > 0)
        printf("%i Moeda(s) de Dez Centavos\n",t010);
      if (t005 > 0)
        printf("%i Moeda(s) de Cinco Centavos\n",t005);
      if (t001 > 0)
        printf("%i Moeda(s) de Um Centavo\n",t001);

      printf("\n");

      system("PAUSE");
      return 0;
}
Perceba que a variavel troco eu não inicio com 0(zero). O laço for é enquanto maior que 0.01, visto que se faltar 0(zero) centavo, você não precisa mais emitir troco. A menos que você sempre queira dar um bonus de 1 centavo ao cliente. Veja outra forma de fazer, bem mais visivel de analisar e realizar correções.
#include <stdlib.h>
#include <stdio.h>

int main()
{
      float troco;
      int t100, t050, t025, t010, t005, t001;

      t100=0;
      t050=0;
      t025=0;
      t010=0;
      t005=0;
      t001=0;
      
     
      system("CLS");           //Limpando tela
      printf("Informe o Troco:  ");
      scanf("%f",&troco);

      while (troco > 0.01)
      {
      printf("\nTROCO: %f: ",troco);
      
        if (troco > 0.99)
        {
          troco=(float)troco-1;
          t100++;
          
        } 
        
        if (troco > 0.49 && troco<1.00)
          {
              troco=(float)troco-0.50;
              t050++;
             
           }
            
        if (troco > 0.24 && troco<0.50)
          {
           troco=(float)troco-0.25;
           t025++;
          
           }
            
        if (troco >0.09 && troco<0.25)
           {
            troco=(float)troco-0.10;
            t010++;
            
            }
             
        if (troco > 0.04 && troco<0.10)
            {
              troco=(float)troco-0.05;
              t005++;
              
             } 
        if (troco >0.00 && troco<0.05)
            {
              troco=(float)troco-0.01;
              t001++;
              
             }
             
      }



      //Impressão de moedas
      if (t100 > 0)
        printf("\n\n%i Moeda(s) de um Real\n",t100);
      if (t050 > 0)
        printf("%i Moeda(s) de Cinquenta Centavos\n",t050);
      if (t025 > 0)
        printf("%i Moeda(s) de Vinte e Cinco Centavos\n",t025);
      if (t010 > 0)
        printf("%i Moeda(s) de Dez Centavos\n",t010);
      if (t005 > 0)
        printf("%i Moeda(s) de Cinco Centavos\n",t005);
      if (t001 > 0)
        printf("%i Moeda(s) de Um Centavo\n",t001);

      printf("\n");

      system("PAUSE");
      return 0;
}

Abraços.

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
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...