Ir ao conteúdo
  • Cadastre-se

Problemas com programa de caixa eletrônico


Sergio Henrique

Posts recomendados

Olá, estou com um pequeno problema no meu programa de simular um caixa eletrônico.
O que foi pedido pelo professor foi o seguinte.

"O usuário deverá, inicialmente, inserir o valor das duas cédulas  que deseja obter. Exemplo: R$ 10,00 e R$ 20,00. Essa opção é limitada aos valores existentes das cédulas da moeda Nacional.  Em seguida, deverá digitar o valor que deseja sacar, limitado a R$ 1000,00. O suposto caixa eletrônico deverá apresentar como resultado as quantidades de cada cédula para obter o valor desejado. Caso tenha mais de uma combinação de cédulas para o mesmo valor, o programa deverá apresentar como resposta aquela que tenha menor quantidade de cédulas. Exemplo: se eu quiser sacar R$170,00, tenho pelos menos duas opções com cédulas de R$50,00 e R$20,00, 3 cédulas de R$50,00 e uma de R$20,00, totalizando 4 cédulas. A outra opção seria uma cédula de R$50,00 e 6 cédulas de R$20,00, totalizando 7 cédulas. Neste caso, de acordo com o critério a resposta correta seria a primeira."

Eu criei, porém estou com um problema.
No caso se eu digito pra sacar 8 reais por exemplo, o programa me mostra que vou receber uma de 5 e uma de 2 reais, sendo que isso da no total 7, gostaria de saber como implemento pra que quando der resultados incompativeis com as notas, ele retorne que não foi possivel. To sem noção alguma do que fazer, e ja tentei o que pude.

Se for possivel me ajudar, agradeço muito.
 

#include<stdlib.h>#include<stdio.h>int main() {		int opcao;    int saque;    int resto100,resto50,resto20,resto10,resto5,resto2;    int nota100,nota50,nota20,nota10,nota5,nota2;			 printf("Escolha 1 = Notas de 2 e 5: \n");		 printf("Escolha 2 = Notas de 5 e 10: \n");		 printf("Escolha 3 = Notas de 10 e 20: \n");		 printf("Escolha 4 = Notas de 20 e 50:  \n");		 printf("Escolha 5 = Notas de 50 e 100:  \n");		 printf("Digite a sua preferência de notas que deseja receber: \n");        scanf("%d",&opcao);                switch (opcao){        	case 1 :        		        		do {        printf("Digite o valor a ser sacado: ");        scanf("%d",&saque);        if (saque % 1 == 0 && saque <= 1000 ) {        	nota5 = saque / 5;            resto5 = saque % 5;                        nota2 = resto5 / 2;            resto2 = resto5 % 2;			}        else            printf("voce digitou um valor de saque nao permitido. Tente novamente.\n");    }    while (saque % 1 != 0 || saque > 1000);	    	printf("%d notas 5\n",nota5);		printf("%d notas 2\n",nota2);	        		        		break;        	        	        	case 2 :        		        		do {        printf("Digite o valor a ser sacado: ");        scanf("%d",&saque);        if (saque % 5 == 0 && saque <= 1000 ) {        	nota10 = saque / 10;            resto10 = saque % 10;                        nota5 = resto10 / 5;            resto5 = resto10 % 5;			}        else            printf("voce digitou um valor de saque nao permitido. Tente novamente.\n");    }    while (saque % 5 != 0 || saque > 1000);	    	printf("%d notas 10\n",nota10);		printf("%d notas 5\n",nota5);	        		        		break;        		        			case 3 :        		        		do {        printf("Digite o valor a ser sacado: ");        scanf("%d",&saque);        if (saque % 10 == 0 && saque <= 1000 ) {        	nota20 = saque / 20;            resto20 = saque % 20;                        nota10 = resto20 / 10;            resto10 = resto20 % 10;			}        else            printf("voce digitou um valor de saque nao permitido. Tente novamente.\n");    }    while (saque % 10 != 0 || saque > 1000)	;	    	printf("%d notas 20\n",nota20);		printf("%d notas 10\n",nota10);	        		        		break;        		        		case 4 :        		        		do {        printf("Digite o valor a ser sacado: ");        scanf("%d",&saque);        if (saque % 10 == 0 && saque <= 1000 ) {        	nota50 = saque / 50;            resto50 = saque % 50;                        nota20 = resto50 / 20;            resto20 = resto50 % 20;			}        else            printf("voce digitou um valor de saque nao permitido. Tente novamente.\n");    }    while (saque % 10 != 0 || saque > 1000)	;	    	printf("%d notas 50\n",nota50);		printf("%d notas 20\n",nota20);	        		        		break;        		        			case 5 :        		        		do {        printf("Digite o valor a ser sacado: ");        scanf("%d",&saque);        if (saque % 10 == 0 && saque <= 1000 ) {        	nota100 = saque / 100;            resto100 = saque % 100;                        nota50 = resto100 / 50;            resto50 = resto100 % 50;			}        else            printf("voce digitou um valor de saque nao permitido. Tente novamente.\n");    }    while (saque % 10 != 0 || saque > 1000)	;	    	printf("%d notas 100\n",nota100);		printf("%d notas 50\n",nota50);	        		        		break;        		        		default : printf("voce digitou um valor de notas nao permitido. Tente novamente.\n");        		        	}                	 return 0;}
Link para o comentário
Compartilhar em outros sites

O que ocorre e que o resto da primeira divisão MOD for != 0. 
por tanto isso vai acontecer sempre!

Caixa Exemplo 1:
Op.: 2 e 5'
Saque para mim: 17,00

Calculando Aguarde...
17/5 = 3 MOD 2 -> / (é < 5) ->
2/2 = 1 MOD 0 -> MOD 0 Ótimo!

 

Pronto: 5 x3' 2 x1 e igual a Saque? SIM
Retira bem sucedida.

 

Caixa Exemplo 2:
Op.: 2 e 5'
Saque para mim: 16,00

Calculando Aguarde...
16/5 = 3 MOD 1 -> / (é < 5) ->
1/2 = 0,5 MOD 0 -> Opa nao tenho 0,50c mais vamos lá...

 

Pronto: 5 x3' 2 x1 e igual a Saque? NAO pois Saque = 16,00 e nem fund**do vou te dar 17,00
Retira FAIL CRASH Policia pega esse HACK bugador ...

 

Caixa Exemplo 3:
Op.: 2 e 5'
Saque para mim: 8,00

Calculando Aguarde...
8/5 = 1 MOD 3 -> / (é < 5) ->
3/2 = 1 MOD 1 -> Opa não tenho moeda mais vamos lá...

 

Pronto: 5 x1' 2 x1 e igual a Saque? NAO pois Saque = 8,00 e o que calculei é 7,00
Retira Fail não sei contar, meu irmão mais novo e mais esperto (todo caçula e mais inteligente) tenta nele ...

 

Caixa Exemplo Caçula (mais novo):
Op.: 2 e 5'
Saque para mim: 8,00

Calculando Aguarde...
8/5 = 1 MOD 3 -> / (é < 5) ->
3/2 = 1 MOD 1 -> Opa não tenho 1,00. Vamos recalcular e sozinho e desta vez sem /5.
Calculando Aguarde...

8/2 = 4 MOD 0 -> Aeee MOD 0' yah...

Pronto: 4 x2' é igual a Saque? SIM
Retira bem sucedida. Tenha um Bom Dia!

É bem assim que vi seu código, se vai te ajudar na implementação mais sólida? A isso não sei, porém espero que sim, Boa Sorte.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...