• Matéria: Informática
  • Autor: lucasjean92
  • Perguntado 8 anos atrás

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: jvsilvictorox7rfj
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", &notas[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?
jvsilvictorox7rfj: Testou esse que fiz ? Realizei uns 50 testes dos mais variados tipos...
lucasjean92: testei ele da erro nessa linha
lucasjean92: int notas[4][2] = {10,0,20,0,50,0,100,0}; // (valor, quantidade)
lucasjean92: em qual simulador testou?
lucasjean92: consegue me manda no e-mail esse arquivo?
lucasjean92: [email protected]
jvsilvictorox7rfj: Tente agrupando as linhas em parênteses e veja se sua IDE aceita.
jvsilvictorox7rfj: Eu usei uma IDE online, o "onlinegdb". Faça o teste com ele.
Perguntas similares