Ir ao conteúdo
  • Cadastre-se
Sergio Henrique

Problemas com programa de caixa eletrônico

Recommended Posts

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;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce pode testar se o resto para a 2º nota é zero,se for zero então é porque o valor do saque é valido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu coloco pra sacar 8, em notas de 5 e 2. 

Ele mostra que tem 1 nota de 5 e 1 de 2.

Não entendi por que ele ao invés disso mostra pra mim que é 4 notas de 2.  Que ai sim daria 8.

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×