quinta-feira, 5 de janeiro de 2012

Programa em C: Caixa eletrônico.

Na prova de ontem tivemos que resolver esta questão. Nem todos os colegas conseguiram encontrar a solução da questão. Então, para registrar uma solução, eis como resolvi a questão abaixo:

Um programa para gerenciar os saques de um caixa eletrônico deve possuir  algum mecanismo para decidir o número de notas de cada valor que deve ser  disponibilizado para o cliente que realizou o saque. Um possível critério seria o da "distribuição ótima" no sentido de que as notas de menor valor
disponíveis fossem distribuídas em número mínimo possível. 

Por exemplo, se a máquina só dispõe de notas de R$ 50, de R$ 10, de R$ 5 e de R$ 1, para uma quantia solicitada de R$ 87, o programa deveria indicar uma nota de R$ 50, três notas de R$ 10, uma nota de R$ 5 e duas notas de R$ 1. Escreva um programa que  receba o valor da quantia solicitada e retorne a distribuição das notas de acordo com o critério da distribuição ótima.

Eis o código:

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

main()
{
      int valor, qtd50,qtd10,qtd5,qtd1=0,resto50,resto10=0,resto5=0; 
       while (valor > 0 )
      {

      printf ("|-------------------------------------------------|\n");
      printf ("|    CAIXA ELETRONICO | ADAO BRAGA   | 0 = SAIR   |\n");
      printf ("|-------------------------------------------------|\n");
      printf ("\n\n");
       printf("Valor do saque: ");
       scanf("%d",&valor);

      //O  Processamento.
      // O resto da divisão é separado na variavel resto50;
      // O resto50 é dividido por 10 e o resultado guardado em resto10
      // Faz o mesmo para 5, e 1

           qtd50   = (valor / 50);   // O valor é dividido por 50.
           resto50 = (valor-(qtd50*50));
           qtd10   = (resto50 / 10);
           resto10 = (valor-(qtd10*10)-(qtd50*50));
           qtd5    = (resto10 / 5);
           resto5  = (valor-(qtd10*10)-(qtd50*50)-(qtd5*5));
           qtd1    = (resto5 /1);

      // Apresentação na tela
      // %5d serve para justificar os números na tela a direita

      printf("\n\n");
      printf("     %5d ....:  de 50,00 = %d \n",qtd50,(qtd50*50));// quantidade notas de 50
      printf("     %5d ....:  de 10,00 = %d \n",qtd10,(qtd10*10));// quantidade notas de 10
      printf("     %5d ....:  de  5,00 = %d \n",qtd5,(qtd5*5));// quantidade notas de 5
      printf("     %5d ....:  de  1,00 = %d \n",qtd1,(qtd1*1));// quantidade notas de 1

      printf("\n\n");
      printf("TECLE ALGO PARA CONTINUAR\n");

      getch();   
      system("cls");
      }
}

Nenhum comentário:

Postar um comentário