pessoal alguém poderia me ajudar com esse exercício em linguagem c?
O projeto deverá contemplar, no mínimo,as seguintes funcionalidades:
- Ao executar o programa, o caixa eletrônico deverá ser carregado com notas de 10, 20, 50 e 100 reais, sendo informado a quantidade de notas inseridas de cada um dos valores citados;
- Depois, deverá estar disponível para realização de saques sucessivos e informar a cada saque as notas que foram entregues a pessoa que está realizando aquele saque, sempre controlando o saldo e a quantidade de notas e expondo mensagens elucidativas quando não for possível o saque ;
- Em algum momento encerrar o funcionamento do “caixa eletrônico” exibindo o valor monetário ainda disponívele as quantidades de notas que formam este valor.
Respostas
respondido por:
0
Deixei os "System's" comentados, pois estou sem a lib. Programei num compilador online e não funciona nele os comandos System... Pode descomentar para deixar mais limpo o console.
Esse deu um trabalhinho nas lógicas...
Testei diversas coisas. As principais possíveis falhas:
1) Valor de saque acima do disponível
Exemplo: Tem R$150 em caixa e deseja sacar R$200.
2) Valor de saque dentro do disponível, porém as notas não formam o valor.
Exemplo: Tem R$150 em caixa (3 notas de 50) e deseja sacar R$130. Não tem como formar 130 com somente notas de 50.
Segue o código em C:
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
int main ()
{
int notas[4][2] = {10,0,20,0,50,0,100,0}; // (valor, quantidade)
int total_caixa = 0;
for(int i=0; i<4;i++)
{
printf("Informe a quantidade de notas de R$ %d,00: ", notas[i][0]);
scanf("%d", ¬as[i][1]);
total_caixa += notas[i][0] * notas[i][1];
}
printf("\nCaixa iniciado com um total de: R$ %d,00: ", total_caixa);
//System("PAUSE");
int opc;
do
{
//System("CLS");
printf("\n\n ##### CAIXA EM OPERAÇÃO #####\n\n");
printf("OPÇÕES: \n");
printf("[1] - REALIZAR SAQUE\n");
printf("[0] - SAIR\n");
printf("Opção desejada: ");
scanf("%d", &opc);
switch(opc)
{
case 1: //REALIZAR SAQUE
{
int valor;
printf("\n\n ##### REALIZAR SAQUE #####\n\n");
printf("Informe o valor que deseja sacar:");
scanf("%d", &valor);
if(valor > total_caixa)
{
printf("\nO caixa não possui este valor. Valor em caixa: R$ %d,00.\n", total_caixa);
//System("PAUSE")
break;
}
else if(valor%10!=0) //Tem que ser multiplo de 10
{
printf("\nO caixa não possui cédulas para entregar este valor.\n");
//System("PAUSE")
break;
}
else
{
int notas_saque[4][2] = {10,0,20,0,50,0,100,0};
int total_saque = 0;
int restante = valor;
for(int i = 3; i>=0; i--)
{
while(notas[i][1] != 0) //quantidade da nota X em caixa !=0
{
if(total_saque == valor) break;
if(notas[i][0] <= restante)
{
total_saque += notas_saque[i][0];
restante -= notas_saque[i][0];
notas_saque[i][1]++;
notas[i][1]--;
}
else break;
}
}
if(total_saque == valor) //Foi possível fazer o saque
{
total_caixa -= valor;
printf("\nNotas entregues:\n");
for(int i = 3; i>=0; i--)
{
if(notas_saque[i][1]!=0)
{
printf("%d X R$ %d,00\n", notas_saque[i][1], notas_saque[i][0]);
}
}
}
else //As notas não formam o valor desejado
{
//Retorna os valores pro caixa
for(int i = 3; i>=0; i--)
{
notas[i][1] += notas_saque[i][1];
}
printf("\nAs notas disponíveis não compõem o valor desejado.");
}
}
break;
}
case 0:
{
break;
}
default:
printf("Opção inválida\n");
break;
}
}while(opc!=0);
//System("CLS");
printf("\n\n ##### CAIXA FINALIZADO #####\n\n");
printf("RESTANTE EM CAIXA:\n");
for(int i=0; i<4; i++)
{
if(notas[i][1]!=0)
printf("%d X R$ %d,00\n", notas[i][1], notas[i][0]);
}
printf("Total = R$ %d,00", total_caixa);
return 0;
}
Esse deu um trabalhinho nas lógicas...
Testei diversas coisas. As principais possíveis falhas:
1) Valor de saque acima do disponível
Exemplo: Tem R$150 em caixa e deseja sacar R$200.
2) Valor de saque dentro do disponível, porém as notas não formam o valor.
Exemplo: Tem R$150 em caixa (3 notas de 50) e deseja sacar R$130. Não tem como formar 130 com somente notas de 50.
Segue o código em C:
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
int main ()
{
int notas[4][2] = {10,0,20,0,50,0,100,0}; // (valor, quantidade)
int total_caixa = 0;
for(int i=0; i<4;i++)
{
printf("Informe a quantidade de notas de R$ %d,00: ", notas[i][0]);
scanf("%d", ¬as[i][1]);
total_caixa += notas[i][0] * notas[i][1];
}
printf("\nCaixa iniciado com um total de: R$ %d,00: ", total_caixa);
//System("PAUSE");
int opc;
do
{
//System("CLS");
printf("\n\n ##### CAIXA EM OPERAÇÃO #####\n\n");
printf("OPÇÕES: \n");
printf("[1] - REALIZAR SAQUE\n");
printf("[0] - SAIR\n");
printf("Opção desejada: ");
scanf("%d", &opc);
switch(opc)
{
case 1: //REALIZAR SAQUE
{
int valor;
printf("\n\n ##### REALIZAR SAQUE #####\n\n");
printf("Informe o valor que deseja sacar:");
scanf("%d", &valor);
if(valor > total_caixa)
{
printf("\nO caixa não possui este valor. Valor em caixa: R$ %d,00.\n", total_caixa);
//System("PAUSE")
break;
}
else if(valor%10!=0) //Tem que ser multiplo de 10
{
printf("\nO caixa não possui cédulas para entregar este valor.\n");
//System("PAUSE")
break;
}
else
{
int notas_saque[4][2] = {10,0,20,0,50,0,100,0};
int total_saque = 0;
int restante = valor;
for(int i = 3; i>=0; i--)
{
while(notas[i][1] != 0) //quantidade da nota X em caixa !=0
{
if(total_saque == valor) break;
if(notas[i][0] <= restante)
{
total_saque += notas_saque[i][0];
restante -= notas_saque[i][0];
notas_saque[i][1]++;
notas[i][1]--;
}
else break;
}
}
if(total_saque == valor) //Foi possível fazer o saque
{
total_caixa -= valor;
printf("\nNotas entregues:\n");
for(int i = 3; i>=0; i--)
{
if(notas_saque[i][1]!=0)
{
printf("%d X R$ %d,00\n", notas_saque[i][1], notas_saque[i][0]);
}
}
}
else //As notas não formam o valor desejado
{
//Retorna os valores pro caixa
for(int i = 3; i>=0; i--)
{
notas[i][1] += notas_saque[i][1];
}
printf("\nAs notas disponíveis não compõem o valor desejado.");
}
}
break;
}
case 0:
{
break;
}
default:
printf("Opção inválida\n");
break;
}
}while(opc!=0);
//System("CLS");
printf("\n\n ##### CAIXA FINALIZADO #####\n\n");
printf("RESTANTE EM CAIXA:\n");
for(int i=0; i<4; i++)
{
if(notas[i][1]!=0)
printf("%d X R$ %d,00\n", notas[i][1], notas[i][0]);
}
printf("Total = R$ %d,00", total_caixa);
return 0;
}
lucasjean92:
amigo obrigado pela força, eu consegui fazer um menor mais não consigo colocar 100 notas de cada no caixa e depois do saque mostras quantas tem pode me ajudar?
Perguntas similares
6 anos atrás
6 anos atrás
8 anos atrás
8 anos atrás
9 anos atrás
9 anos atrás
9 anos atrás