Jump to content

Question

Programa que recebe do usuário um valor de saque e as cédulas disponíveis no caixa eletrônico, retornando se o saque é possível com as cédulas disponíveis e quantas cédulas serão necessárias no total e especifica quantas cédulas de cada valor.

o que fiz até agora:

//Função inicial
    funcao inicio()
    {
        //Declaração de variáveis
        logico notaDeDois, notaDeCinco, notaDeDez, notaDeVinte, notaDeCinquenta, notaDeCem //Variáveis que guardam a informação
                                                                           //de verdadeiro ou falso para a
                                                                           //existência cada cédula no caixa
                                                                           //eletrônico
        inteiro quantidadeNotaDeDois, quantidadeNotaDeCinco, quantidadeNotaDeDez, quantidadeNotaDeVinte //Variáveis que guardam as
        inteiro quantidadeNotaDeCinquenta, quantidadeNotaDeCem //quantidades mínimas necessárias de cada uma das cédulas para o
                                                    //saque do valor informado pelo usuário
        inteiro quantidadeCedulas = 0 //Variável para uso do programa para a soma da quantidade mínima de cédulas pro saque
        inteiro valorDeSaque //Valor a ser sacado, informado pelo usuário
        inteiro controleDeResposta //Variável que guardao valor (1 ou 2) da resposta do usuário para a existência da cédula no
                              //caixa eletrônico para posterior conversão em uma variável lógica

        //Apresentação do programa
        escreva ("-- Caixa eletrônico --")
        escreva ("\nPrograma que informa as cédulas mínimas necessárias para um saque.\n")

        //Solicitações ao usuário
        escreva ("\n- Informe o valor do saque: ")
        leia (valorDeSaque)

        escreva ("- No caixa, há cédulas de R$ 2? (1- sim ou 2- não)\n")
        leia (controleDeResposta)
        se (controleDeResposta == 1){ //Conversão do controle de resposta (1 ou 2) em valor logico
            notaDeDois = verdadeiro
            } senao {
                notaDeDois = falso
                }
        escreva ("- No caixa, há cédulas de R$ 5? (1- sim ou 2- não)\n")
        leia (controleDeResposta)
        se (controleDeResposta == 1){ //Conversão do controle de resposta (1 ou 2) em valor logico
            notaDeCinco = verdadeiro
            } senao {
                notaDeCinco = falso
                }
        escreva ("- No caixa, há cédulas de R$ 10? (1- sim ou 2- não)\n")
        leia (controleDeResposta)
        se (controleDeResposta == 1){ //Conversão do controle de resposta (1 ou 2) em valor logico
            notaDeDez = verdadeiro
            } senao {
                notaDeDez = falso
                }        
        escreva ("- No caixa, há cédulas de R$ 20? (1- sim ou 2- não)\n")
        leia (controleDeResposta)
        se (controleDeResposta == 1){ //Conversão do controle de resposta (1 ou 2) em valor logico
            notaDeVinte = verdadeiro
            } senao {
                notaDeVinte = falso
                }    
        escreva ("- No caixa, há cédulas de R$ 50? (1- sim ou 2- não)\n")
        leia (controleDeResposta)
        se (controleDeResposta == 1){ //Conversão do controle de resposta (1 ou 2) em valor logico
            notaDeCinquenta = verdadeiro
            } senao {
                notaDeCinquenta = falso
                }    
        escreva ("- No caixa, há cédulas de R$ 100? (1- sim ou 2- não)\n")
        leia (controleDeResposta)
        se (controleDeResposta == 1){ //Conversão do controle de resposta (1 ou 2) em valor logico
            notaDeCem = verdadeiro
            } senao {
                notaDeCem = falso
                }


        //Realização das aferições
        //Cédulas de R$100
        se (notaDeCem == verdadeiro){ //Verifica se há cédulas de R$100 no caixa
            se (valorDeSaque/100>=1){ //Verifica se o valor de saque é superior a R$100
                quantidadeNotaDeCem = valorDeSaque/100 //Cálculo da quantidade de cédulas de R$100
                quantidadeCedulas = quantidadeCedulas + quantidadeNotaDeCem //Soma a quantidade de cédulas de R$100 a quantidade
                                                                //mínima necessária de de cédulas para o saque
                valorDeSaque = valorDeSaque - (quantidadeNotaDeCem*100) //Subtrai o valor que já será sacado só em notas de
                                                             //R$100 do valor total de saque
                } senao { //Caso haja cédulas de R$100 e o valor do saque seja inferior a R$100
                    quantidadeNotaDeCem = 0
                    }
                
            } senao { //Caso não haja cédulas de R$100
                quantidadeNotaDeCem = 0
                }
        //Cédulas de R$50
        se (notaDeCinquenta == verdadeiro){ //Verifica se há cédulas de R$50 no caixa
            se (valorDeSaque/50>=1){ //Verifica se o valor de saque é superior a R$50
                quantidadeNotaDeCinquenta = valorDeSaque/50 //Cálculo da quantidade de cédulas de R$50
                quantidadeCedulas = quantidadeCedulas + quantidadeNotaDeCinquenta //Soma a quantidade de cédulas de R$50 a
                                                                     //quantidade mínima necessária de de cédula
                                                                     //para o saque
                valorDeSaque = valorDeSaque - (quantidadeNotaDeCinquenta*50) //Subtrai o valor que já será sacado só em notas de
                                                                 //R$50 do valor total de saque
                } senao {
                    quantidadeNotaDeCinquenta = 0 //Caso haja cédulas de R$50 e o valor do saque seja inferior a R$50
                    }
            } senao {
                quantidadeNotaDeCinquenta = 0 //Caso não haja cédulas de R$100
                }
        //Cédulas de R$20
        se (notaDeVinte == verdadeiro){ //Verifica se há cédulas de R$20 no caixa
            se (valorDeSaque/20>=1){ //Verifica se o valor de saque é superior a R$20
                quantidadeNotaDeVinte = valorDeSaque/20 //Cálculo da quantidade de cédulas de R$20
                quantidadeCedulas = quantidadeCedulas + quantidadeNotaDeVinte //Soma a quantidade de cédulas de R$20 a
                                                                  //quantidade mínima necessária de de cédula para
                                                                  //o saque
                valorDeSaque = valorDeSaque - (quantidadeNotaDeVinte*20) //Subtrai o valor que já será sacado só em notas de R$20
                                                              //do valor total de saque
                } senao {
                    quantidadeNotaDeVinte = 0 //Caso haja cédulas de R$20 e o valor do saque seja inferior a R$20
                    }
            } senao {
                quantidadeNotaDeVinte = 0 //Caso não haja cédulas de R$20
                }        
        //Cédulas de R$10
        se (notaDeDez == verdadeiro){ //Verifica se há cédulas de R$10 no caixa
            se (valorDeSaque/10>=1){ //Verifica se o valor de saque é superior a R$10
                quantidadeNotaDeDez = valorDeSaque/10 //Cálculo da quantidade de cédulas de R$10
                quantidadeCedulas = quantidadeCedulas + quantidadeNotaDeDez //Soma a quantidade de cédulas de R$10 a quantidade
                                                                //mínima necessária de de cédula para o saque
                valorDeSaque = valorDeSaque - (quantidadeNotaDeDez*10) //Subtrai o valor que já será sacado só em notas de R$10
                                                            //do valor total de saque
                } senao {
                    quantidadeNotaDeDez = 0 //Caso haja cédulas de R$10 e o valor do saque seja inferior a R$10
                    }
            } senao {
                quantidadeNotaDeDez = 0 //Caso não haja cédulas de R$10
                }                            
        //Cédulas de R$5
        se (notaDeCinco == verdadeiro){ //Verifica se há cédulas de R$5 no caixa
            se (valorDeSaque/5>=1){  //Verifica se o valor de saque é superior a R$5
                quantidadeNotaDeCinco = valorDeSaque/5 //Cálculo da quantidade de cédulas de R$5
                quantidadeCedulas = quantidadeCedulas + quantidadeNotaDeCinco //Soma a quantidade de cédulas de R$5 a quantidade
                                                                  //mínima necessária de de cédula para o saque
                valorDeSaque = valorDeSaque - (quantidadeNotaDeCinco*5) //Subtrai o valor que já será sacado só em notas de R$5
                                                             //do valor total de saque
                } senao {
                    quantidadeNotaDeCinco = 0 //Caso haja cédulas de R$5 e o valor do saque seja inferior a R$5
                    }
            } senao {
                quantidadeNotaDeCinco = 0 //Caso não haja cédulas de R$5
                }    
        //Cédulas de R$2
        se (notaDeDois == verdadeiro){ //Verifica se há cédulas de R$2 no caixa
            se (valorDeSaque/2>=1){ //Verifica se o valor de saque é superior a R$2
                quantidadeNotaDeDois = valorDeSaque/2 //Cálculo da quantidade de cédulas de R$2
                quantidadeCedulas = quantidadeCedulas + quantidadeNotaDeDois  //Soma a quantidade de cédulas de R$2 a quantidade
                                                                  //mínima necessária de de cédula para o saque
                valorDeSaque = valorDeSaque - (quantidadeNotaDeDois*2) //Subtrai o valor que já será sacado só em notas de R$2
                                                             //do valor total de saque
                } senao {
                    quantidadeNotaDeDois = 0 //Caso haja cédulas de R$2 e o valor do saque seja inferior a R$2
                    }
            } senao {
                quantidadeNotaDeDois = 0 //Caso não haja cédulas de R$2
                }    

        //Exposição dos resultados
        se (valorDeSaque == 0){ //Verifica se todo o valor de saque pôde ser disposto nas cédulas disponíveis
            //Expõe a quantidade mínima de cédulas para a realização do saque
            escreva ("\n> A quantidade mínima de cédulas para a realização desse saque é ", quantidadeCedulas, ". Sendo elas:\n")
            //Exposição da quantidade mínima de cédulas de cada valor necessárias para a realização de saque
            se (quantidadeNotaDeCem > 0){ //Verifica se é necessária alguma cédula de R$100
                escreva (quantidadeNotaDeCem, " notas de R$100\n") //Expõe a quantidade de cédula de R$100, caso haja
                }
            se (quantidadeNotaDeCinquenta > 0){ //Verifica se é necessária alguma cédula de R$50
                escreva (quantidadeNotaDeCinquenta, " notas de R$50\n") //Expõe a quantidade de cédula de R$50, caso haja
                }
            se (quantidadeNotaDeVinte > 0){ //Verifica se é necessária alguma cédula de R$20
                escreva (quantidadeNotaDeVinte, " notas de R$20\n") //Expõe a quantidade de cédula de R$20, caso haja
                }    
            se (quantidadeNotaDeDez > 0){ //Verifica se é necessária alguma cédula de R$10
                escreva (quantidadeNotaDeDez, " notas de R$10\n") //Expõe a quantidade de cédula de R$10, caso haja
                }    
            se (quantidadeNotaDeCinco > 0){ //Verifica se é necessária alguma cédula de R$5
                escreva (quantidadeNotaDeCinco, " notas de R$5\n") //Expõe a quantidade de cédula de R$5, caso haja
                }                
            se (quantidadeNotaDeDois > 0){ //Verifica se é necessária alguma cédula de R$2
                escreva (quantidadeNotaDeDois, " notas de R$2\n") //Expõe a quantidade de cédula de R$2, caso haja
                }        
            
            } senao { //Caso, mesmo usando todos os valores de cédulas disponíveis, ainda reste um valor de saque que cuja
                    //realização não seja possível  pelo caixa eletrônico, emite uma mensagem de aviso.
                escreva ("\n> O saque não poderá ser realizado.")
                }
        
        
    }
}

 

 

o problema é no caso de um valor de saque como 13 que pode ser possível mas o programa diz que não é

Edited by Gabriel Heming
adicionar marcação de código

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Como você está fazendo a lógica decrescente, e o valor de nota mais baixa é a de 2, você deve validar se o valor é múltiplo de 2 ou não (par ou ímpar). Se for par, sua lógica funciona sem problemas. Se for impar, você terá que mudar a lógica, para que utilize-se de notas uma nota de 5.

 

Como você precisa chegar a um número impar, existe apenas uma nota que faz com que o valor par se torne ímpar, que é 5. Pois:

 

  • par + par = par;
  • ímpar + ímpar = par;
  • ímpar + par = ímpar.

Logo, deve-se começar subtraindo a nota de 5.

 

Por exemplo: Digamos que o valor a ser sacado é 27.

O valor que você deve sacar é 27 - 5: pois, uma nota de 5 é obrigatória no seu cálculo. Assim:

  • 27 - 5 = 1
  • 22 / 20 = 1;
  • 2 / 2 = 1.

Logo:

  • 1 nota de R$ 5,00;
  • 1 nota de R$ 20,00
  • 1 nota de 2.

O mesmo vale para o 13:

  • 13 - 5 = 1 nota de R$ 5,00 (nota inicial);
  • 7 / 5 = 1 nota de R$ 5,00;
  • 2 / 2 = 1 nota de R$ 2,00;

 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Felipe_2k19
      Olá galera tudo beleza?
       Eu estou tentando resolver um problema no visualg, usando Portugol porém eu não sei aplicar algumas coisas que são pedidas no mesmo.
      Problema: Dado um número, informar se é par ou ímpar. Se for par somar 5 no número informado e se for  ímpar multiplicar por 3 o número informado.
      Eu fiz a parte em que ele fala se o número e par ou ímpar, mas não sei fazer a parte da soma e a multiplicação alguém pode me ajudar?
      ALGORITMO:
      Var n:inteiro inicio escreval("Insira um número inteiro") leia (n) se (n mod2=0) entao escreval ("O número é par") senao escreval("O número é impar") fimse Fimalgoritmo  
    • By Felipe_2k19
      Fala galera tudo beleza?
      Então meu professor passou um "problema" e falou para criar um programa no Visualg usando Portugol, só que eu estou com alguns problemas principalmente na fórmula, alguém pode me ajudar?
      Pergunta: Dado o preço do ingresso e a idade o programa devera informar o preço do ingresso com os seguintes descontos de acordo com a idade:
      IDADE
      0-5-15%
      6-20-5%
      21-40- 2%
      acima de 40 - 30%
       
      Se puderem me ajudar agradeço.
    • By guiilhermej
      Galera, to com um impasse em umas questões passadas na faculdade, eu realmente gosto de resolver meus exercícios, pois só assim sei que irei aprender, mas acontece que to meio perdido nessas questões, alguem me da um help por favor.

       
      6. Escreva um algoritmo que peça um número n ao usuário, e que gere um novo n de acordo
      com a seguinte regra:
      • se n é par, n = n / 2
      • se n é impar, n = 3 * n + 1
      • imprime n
      • O programa deve parar quando x tiver o valor igual a 1. Por exemplo, para n = 13, a saída
      será:
      40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1

      7. Fazer um algoritmo que leia um número que servira para controlar os primeiros números
      ímpares. Deverá ser impressa a soma desses números. Suponha que o número informado será
      maior que zero, caso não seja, informar o erro.
      Informe um número: 5
      1 3 5 7 9
      A soma dos 5 valores impares é: 25

      8. Fazer um algoritmo que leia os limites inferior e superior de um intervalo e o número cujos
      múltiplos se deseja que sejam impressos no intervalo aberto. Suponha que os dados digitados
      são para um intervalo crescente. Exemplo:
      Valor inicial: 5
      Valor final: 15
      Divisor: 3
      6 9 12 15
       
      9. Fazer um algoritmo que leia a quantidade de números que se deseja digitar para que
      possa ser impresso o maior e o menor número digitado. Não suponha que todos os
      números lidos serão positivos. Exemplo:
      Quantos números deseja digitar?
      5
      Informe um numero:3
      Informe um numero:-2
      Informe um numero:5
      Informe um numero:6
      Informe um numero:19
      O maior numero informado foi: 19
      O menor numero informado foi: -2
    • By Felipe Cunha
      Boa tarde galera, sei que não é muito comum problemas com essa linguagem porem estou no começo e preciso muito da ajuda de vocês, preciso desenvolver um programa que estou desde ontem tentando desenvolver e não consigo achar uma solução,a linguagem é portugol estou começando no mundo de programação mais estou com muita dificuldade em solucionar esse algorítimo:
       
      Solicite para o usuário nome e sexo de pessoas, ao final da entrada desses dados pergunte para o usuário se o mesmo deseja digitar mais pessoas, se sim solicite novamente os dados, se não, encerre o programa e exiba a quantidade de pessoas que foram digitadas, o total de pessoas do sexo masculino, o total do sexo feminino, o total de sexo inválido e a porcentagem de cada um.
       
      Alguém poderia me ajudar por favor
    • By Maroto
      Olá, pessoas.
       
      Criei um programa com fins de estudo no visualg, cuja finalidade é preencher uma matriz com valores aleatórios e, em seguida, conferir e armazenar numa segunda atriz se o valores gerados são pares ou ímpares. Todavia o programa fica dando um erro ("Access violation at address xxxx in module" visualg30.exe). Não sei se eu que estou errando na lógica, se meu pc está quebrado ou se é um bug do visualg. 

      Abaixo deixo meu código para quem puder me ajudar. Obrigado :)
       
      Var // Seção de Declarações das variáveis matriz1: vetor [0..2, 0..2] de inteiro matriz2: vetor [0..2, 0..2] de caractere // Procedimento que gera valores inteiros aleatorios para preencher a matriz1. procedimento preencheMatriz var // Variaveis contadoras i1, i2: inteiro inicio para i1 de 0 ate 1 passo 1 faca para i2 de 0 ate 2 passo 1 faca aleatorio on leia (matriz1[i1,i2]) limpatela aleatorio off fimpara fimpara // Imprimindo a matriz na tela para i1 de 0 ate 1 passo 1 faca para i2 de 0 ate 2 passo 1 faca escreva (matriz1[i1,i2]) fimpara escreval ("") fimpara fimprocedimento // Procedimento que verifica se os valores das posições da matriz1 são pares // ou ímpares. procedimento verificaParImpar var i1, i2: inteiro inicio para i1 de 0 ate 1 passo 1 faca para i2 de 0 ate 2 passo 1 faca se (matriz1[i1, i2] MOD 2=0) entao matriz2[i1,i2] <- "par" escreva(matriz2[i1,i2], " ") senao matriz2[i1,i2] <- "ímpar" escreva(matriz2[i1,i2], " ") fimse fimpara escreval(" ") fimpara fimprocedimento Inicio // Seção de Comandos, procedimento, funções, operadores, etc... preencheMatriz verificaParImpar Fimalgoritmo  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.