Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <locale.h>
- #define TEN_BILL 10
- #define FIFTY_BILL 10
- // Função principal
- void main () {
- // Declarando variáveis estáticas, um ponteiro que armazenará os saques e alguns auxiliares
- double cash = 542.00;
- unsigned int withdraw = 0;
- double *withdraw_values;
- int counter = 0;
- int aux;
- int i;
- int ten_bills = 0;
- int fifty_bills = 0;
- // Alocando espaço na memória para o vetor de saques
- withdraw_values = (double*) malloc(sizeof(double));
- // Setando o local para pt-BR para que o programa não tenha problema para imprimir saídas com acento
- setlocale(LC_ALL, "Portuguese");
- // Fazendo saques enquanto o saldo disponível for acima ou igual da capacidade de retirada do ATM
- while(cash >= 10) {
- printf("Qual o valor deseja sacar: ");
- scanf("%u", &withdraw);
- // Verificando se o valor digitado extrapola o saldo em conta, caso sim termina a execução do laço
- if (withdraw > 542 && withdraw <= 0 || (double) withdraw > cash) {
- printf("Desculpe não é possível sacar este valor!\n");
- break;
- } else {
- printf("Valor solicitado: R$%u\n", withdraw);
- // Caso o valor digitado seja um múltiplo das notas disponíveis
- if (withdraw % 2 == 0 && withdraw % 5 == 0) {
- printf("O caixa irá entregar: R$%u\n", withdraw);
- aux = (int) withdraw;
- // Conta as notas e faz as devidas subtrações de saldo, ao final salva o valor do saque no vetor de saques
- while (aux >= 10) {
- if (aux / FIFTY_BILL > 0 && aux >= 50) {
- fifty_bills++;
- aux -=50;
- }
- else if (aux / TEN_BILL > 0 && aux >= 10) {
- ten_bills++;
- aux -= 10;
- }
- }
- printf("%d nota(s) de R$50 e %d nota(s) de R$10\n", fifty_bills, ten_bills);
- cash -= (double) withdraw;
- printf("Saldo: %.2lf\n", cash);
- fifty_bills = 0;
- ten_bills = 0;
- withdraw_values[counter] = (double) withdraw;
- } else {
- // Caso o valor digitado não seja um múltiplo das notas disponíveis
- aux = (int) withdraw;
- // Conta as notas e faz as devidas subtrações de saldo, ao final salva o valor do saque no vetor de saques
- while (aux >= 10) {
- if (aux / FIFTY_BILL > 0 && aux >= 50) {
- fifty_bills++;
- aux -=50;
- }
- else if (aux / TEN_BILL > 0 && aux >= 10) {
- ten_bills++;
- aux -= 10;
- }
- }
- aux = (50 * fifty_bills) + (10 * ten_bills);
- printf("O caixa irá entregar: R$%u\n", aux);
- printf("%d nota(s) de R$50 e %d nota(s) de R$10\n", fifty_bills, ten_bills);
- cash -= (double) aux;
- printf("Saldo: %.2lf\n", cash);
- fifty_bills = 0;
- ten_bills = 0;
- withdraw_values[counter] = (double) aux;
- }
- // Itera o número da execução e realoca memória para o vetor de saques
- // desta forma o sistema sempre irá alocar a memória necessária para o total de transações
- // nunca a mais ou menos.
- counter++;
- withdraw_values = (double *) realloc(withdraw_values, (counter + 1)*sizeof(double));
- }
- }
- // Imprime todas as transações realizadas, o saldo final e uma mensagem de saída
- printf("Saque(s) realizdos: \n");
- for (i = 0; i < counter; ++i) {
- printf("\t%.2lf\n", withdraw_values[i]);
- }
- printf("Saldo final: %.2lf\nMuito obrigado!\n", cash);
- // Termina a execução
- return;
- }
Add Comment
Please, Sign In to add comment