Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Renato Utsch

[Código] Resolução Exercício de divisão de dinheiro em notas sem usar

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Renato Utsch, fiz a resolução deste problema de um modo mais claro a ser entendido. O método que fiz é levando em consideração que o aluno esteja aprendendo C com o livro "C Programming - A Modern Approach".

 

Na resolução do exercício, você utilizou conhecimentos que um leitor normal não teria, que seria o uso do #define

 

Segue a resolução de forma coerente com o aprendizado do livro:

 

/*
* Excercise 7 - Second Chapter
* "C Programming - A Modern Approach"
* Page 34
* By Bruno Alano <http://brunoalano.com.br>
*/

#include <stdio.h>

int main ( void )
{
int dollarAmount = 0;

printf("Enter a dollar amount: ");
scanf("%d", &dollarAmount);

/* $20 Bills */
	/* We need show before the number of bills */
	printf("\n$20 Bills: %d\n", dollarAmount / 20);
	/* Now we remove the value of bills from the dollarAmount */
	dollarAmount %= 20;

/* $10 Bills */
	printf("$10 Bills: %d\n", dollarAmount / 10);
	dollarAmount %= 10;

/* $5 Bills */
	printf("$5 Bills: %d\n", dollarAmount / 5);
	dollarAmount %= 5;

/* $1 Bills */
	printf("$1 Bills: %d\n", dollarAmount / 1);
	dollarAmount %= 1;

return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.