Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá!
Bom gente, comecei a ler um livro de C (C Programming: A Modern Approach), e me deparei no 2º capítulo com aquele exercício clássico de todos os livros em que nós devemos dividir tal soma de dinheiro em notas de 20, 10, 5 e 1 (existem variantes com outros tipos de dados), sem usar nenhum operador lógico, como if's, while's, for's, do-while's, operadores lógicos, etc.
Todos já devem ter tido um problema como esses... Eu sempre roubava e usava operadores lógicos, o que torna a tarefa bem fácil. Mas, desta vez, me comprometi a fazer o programa sem usar operadores lógicos...
Bom, aí está o código:
/*
* Escreva um programa que pergunte ao usuário para entrar
* um valor em dólares e então mostra como pagar esse valor
* usando o mínimo número de notas de $20, $10, $5 e $1.
* Exemplo:
* Entern an U.S. dollar amount: 93
*
* $20 bills: 4
* $10 bills: 1
* $5 bills: 0
* $1 bills: 3
*/
#include <stdio.h>
#define BUTT_20 (value / 20)
#define BUTT_10 ( ( value - (20 * BUTT_20) ) / 10 )
#define BUTT_5 ( ( value - (20 BUTT_20) - (10 BUTT_10) ) / 5 )
#define BUTT_1 ( value - (20 BUTT_20) - (10 BUTT_10) - (5 * BUTT_5) )
int main(void)
{
int value;
printf("Enter an U.S. dollar amount: ");
scanf("%d", &value);
printf("$20 bills: %d\n$10 bills: %d\n$5 bills: %d\n$1 bills: %d\n", BUTT_20, BUTT_10,
BUTT_5, BUTT_1);
return 0;
}
Como ele funciona?
Bom, ele primeiro divide o valor dado pelo usuário por 20 para encontrar o número de notas de 20 (lembrando que isso só funciona com o uso de inteiros). Então, printa-se esse valor.
Depois, encontra-se o número de notas de 10. Isso é encontrado com a seguinte expressão:
( ( value - (20 * BUTT_20) ) / 10 )
Sendo BUTT_20 = (value / 20).
Então, é o seguinte: Remove-se do valor inserido pelo usuário (value) o valor equivalente ao número notas de 20, depois se divide o valor por 10 para encontrar o número.
Isso é feito até a nota $1. Veja os #define's para ver as expressões, e teste o programa para entender como funciona. Um pedaço de papel e o teste das expressões "na mão" podem te ajudar a entendê-las.
Bom, isso não é um exemplo mais rápido que usar operadores lógicos e 'keywords lógicas', já que executar expressões desse tipo deve ser algo problemático, mas é somente a amostra de como um exercício básico e fácil desse tipo, sem as ferramentas básicas de programação, pode-se tornar uma coisa bem difícil, chata e propensa a erros.
Abraços :D
Carregando comentários...