sconetto

Questão 2 - SENADO (C)

Sep 5th, 2017
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.29 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <locale.h>
  4. #define TEN_BILL 10
  5. #define FIFTY_BILL 10
  6.  
  7. // Função principal
  8. void main () {
  9.     // Declarando variáveis estáticas, um ponteiro que armazenará os saques e alguns auxiliares
  10.     double cash = 542.00;
  11.     unsigned int withdraw = 0;
  12.     double *withdraw_values;
  13.     int counter = 0;
  14.     int aux;
  15.     int i;
  16.     int ten_bills = 0;
  17.     int fifty_bills = 0;
  18.  
  19.     // Alocando espaço na memória para o vetor de saques
  20.     withdraw_values = (double*) malloc(sizeof(double));
  21.    
  22.     // Setando o local para pt-BR para que o programa não tenha problema para imprimir saídas com acento
  23.     setlocale(LC_ALL, "Portuguese");
  24.  
  25.     // Fazendo saques enquanto o saldo disponível for acima ou igual da capacidade de retirada do ATM
  26.     while(cash >= 10) {
  27.         printf("Qual o valor deseja sacar: ");
  28.         scanf("%u", &withdraw);
  29.         // Verificando se o valor digitado extrapola o saldo em conta, caso sim termina a execução do laço
  30.         if (withdraw > 542 && withdraw <= 0 || (double) withdraw > cash) {
  31.             printf("Desculpe não é possível sacar este valor!\n");
  32.             break;
  33.         } else {
  34.             printf("Valor solicitado: R$%u\n", withdraw);
  35.             // Caso o valor digitado seja um múltiplo das notas disponíveis  
  36.             if (withdraw % 2 == 0 && withdraw % 5 == 0) {
  37.                 printf("O caixa irá entregar: R$%u\n", withdraw);
  38.                 aux = (int) withdraw;
  39.                 // Conta as notas e faz as devidas subtrações de saldo, ao final salva o valor do saque no vetor de saques
  40.                 while (aux >= 10) {
  41.                     if (aux / FIFTY_BILL > 0 && aux >= 50) {
  42.                         fifty_bills++;
  43.                         aux -=50;
  44.                     }
  45.                     else if (aux / TEN_BILL > 0 && aux >= 10) {
  46.                         ten_bills++;
  47.                         aux -= 10;
  48.                     }
  49.                 }
  50.                 printf("%d nota(s) de R$50 e %d nota(s) de R$10\n", fifty_bills, ten_bills);
  51.                 cash -= (double) withdraw;
  52.                 printf("Saldo: %.2lf\n", cash);
  53.                 fifty_bills = 0;
  54.                 ten_bills = 0;
  55.                 withdraw_values[counter] = (double) withdraw;
  56.             } else {
  57.             // Caso o valor digitado não seja um múltiplo das notas disponíveis
  58.                 aux = (int) withdraw;
  59.                 // Conta as notas e faz as devidas subtrações de saldo, ao final salva o valor do saque no vetor de saques
  60.                 while (aux >= 10) {
  61.                     if (aux / FIFTY_BILL > 0 && aux >= 50) {
  62.                         fifty_bills++;
  63.                         aux -=50;
  64.                     }
  65.                     else if (aux / TEN_BILL > 0 && aux >= 10) {
  66.                         ten_bills++;
  67.                         aux -= 10;
  68.                     }
  69.                 }
  70.                 aux = (50 * fifty_bills) + (10 * ten_bills);
  71.                 printf("O caixa irá entregar: R$%u\n", aux);
  72.                 printf("%d nota(s) de R$50 e %d nota(s) de R$10\n", fifty_bills, ten_bills);
  73.                 cash -= (double) aux;
  74.                 printf("Saldo: %.2lf\n", cash);
  75.                 fifty_bills = 0;
  76.                 ten_bills = 0;
  77.                 withdraw_values[counter] = (double) aux;
  78.  
  79.             }
  80.             // Itera o número da execução e realoca memória para o vetor de saques
  81.             // desta forma o sistema sempre irá alocar a memória necessária para o total de transações
  82.             // nunca a mais ou menos.
  83.             counter++;
  84.             withdraw_values = (double *) realloc(withdraw_values, (counter + 1)*sizeof(double));
  85.         }
  86.     }
  87.     // Imprime todas as transações realizadas, o saldo final e uma mensagem de saída
  88.     printf("Saque(s) realizdos: \n");
  89.     for (i = 0; i < counter; ++i) {
  90.         printf("\t%.2lf\n", withdraw_values[i]);
  91.     }
  92.     printf("Saldo final: %.2lf\nMuito obrigado!\n", cash);
  93.  
  94.     // Termina a execução
  95.     return;
  96. }
Add Comment
Please, Sign In to add comment