How do I solve this problem using VisualG

0

Read a floating-point value with two decimal places. This value represents a monetary value. Next, calculate the fewest possible banknotes and coins in which the value can be decomposed. The grades considered are 100, 50, 20, 10, 5, 2. The possible currencies are 1, 0.50, 0.25, 0.10, 0.05 and 0.01. Next I show the list of required notes, OBS already tried to use the mod and div however it did not work, if someone can show an example thank you

To know if it's right, I have to use the following entry 576.73 to obtain the following outputs GRADES: 5 rating (s) from $ 100.00 1 rating (s) from $ 50.00 1 rating (s) from $ 20.00 0 rating (s) from $ 10.00 1 rating (s) from $ 5.00 0 rating (s) from $ 2.00 COINS: 1 coin (s) from R $ 1.00 1 coin (s) from $ 0.50 0 coin (s) of $ 0.25 2 currency (s) of $ 0.10 0 currency (s) of $ 0.05 3 currency (s) from $ 0.01

    
asked by anonymous 11.03.2018 / 14:28

1 answer

0

Faced with a certain limitation in the use of the data types and their predefined functions for handling it, I came to that!

A little too long for a simple, more functional question.

algoritmo "Contagem de Cédulas"
// Função : Recebe um valor monetário e retorna a quantidade de Cédulas e Moedas que correspondem ao valor.
// Autor : Paulo Vieira
// Data : 19/04/2018
// Seção de Declarações 
var
   x, t, RestoMoeda: inteiro
   Texto: caractere
   Valor: real
   Cedulas: vetor[1..6, 1..6] de inteiro
   Moedas: vetor[1..6, 1..6] de inteiro


//-->Procedimento ultilizado para definir a quantidade de cédulas armazenando-as no Vetor Cedulas em suas resoectivas posições.
procedimento DefinirCedulas(valortemp: real)
var
   resto: inteiro

inicio
se (int(valortemp) >= 100) entao
   Cedulas[1,2] <- int(int(valortemp) / Cedulas[1,1])
   resto <- int(valortemp) % Cedulas[1,1]

senao
   se (int(valortemp) >= 50) e (int(valortemp) < 100) entao
      Cedulas[2,2] <- int(int(valortemp) / Cedulas[2,1])
      resto <- int(valortemp) % Cedulas[2,1]

   senao
      se (int(valortemp) >= 20) e (int(valortemp) < 50) entao
         Cedulas[3,2] <- int(int(valortemp) / Cedulas[3,1])
         resto <- int(valortemp) % Cedulas[3,1]

      senao
         se (int(valortemp) >= 10) e (int(valortemp) < 20) entao
            Cedulas[4,2] <- int(int(valortemp) / Cedulas[4,1])
            resto <- int(valortemp) % Cedulas[4,1]

         senao
            se (int(valortemp) >= 5) e (int(valortemp) < 10) entao
               Cedulas[5,2] <- int(int(valortemp) / Cedulas[5,1])
               resto <- int(valortemp) % Cedulas[5,1]

            senao
               se (int(valortemp) >= 2) e (int(valortemp) < 5) entao
                  Cedulas[6,2] <- int(int(valortemp) / Cedulas[6,1])
                  resto <- int(valortemp) % Cedulas[6,1]
               senao
                  resto <- 1
               fimse
            fimse
         fimse
      fimse
   fimse
fimse

se (resto > 1) entao
   DefinirCedulas(resto)

senao
   se (resto = 1) entao
      Moedas[1,2] <- resto
   fimse
fimse
fimprocedimento


//-->Procedimento ultilizado para definir a quantidade de moedas armazenando-as no Vetor Moedas em suas resoectivas posições.
procedimento DefinirMoedas(textotemp: caractere)
var
   str: caractere
   n1, n2: inteiro

inicio

n1 <- pos(".", textotemp)

se (n1 > 0) entao
   n2 <- compr(textotemp)
   str <- copia(textotemp, (n1 + 1), n2)

   se (compr(str) = 1) entao
      str <- str + "0"
   fimse
senao
   se (n1 = 0)entao
     str <- textotemp
   fimse
fimse


se (caracpnum(str) >= 50) entao
   Moedas[2,2] <- int(caracpnum(str) / 50)
   RestoMoeda <- int(caracpnum(str) % 50)
senao
   se (caracpnum(str) < 50) e (caracpnum(str) >= 25) entao
      Moedas[3,2] <- int(caracpnum(str) / 25)
      RestoMoeda <- int(caracpnum(str) % 25)
   senao
      se (caracpnum(str) < 25) e (caracpnum(str) >= 10) entao
         Moedas[4,2] <- int(caracpnum(str) / 10)
         RestoMoeda <- int(caracpnum(str) % 10)
      senao
         se (caracpnum(str) < 10) e (caracpnum(str) >= 5) entao
            Moedas[5,2] <- int(caracpnum(str) / 5)
            RestoMoeda <- int(caracpnum(str) % 5)
         senao
            se (caracpnum(str) < 5) e (caracpnum(str) >= 1) entao
               Moedas[6,2] <- caracpnum(str)
               RestoMoeda <- 0
            fimse
         fimse
      fimse
   fimse
fimse

se (RestoMoeda > 0) entao
   DefinirMoedas(numpcarac(RestoMoeda))
fimse
fimprocedimento



inicio
// Seção de Comandos
Cedulas[1,1] <- 100
Cedulas[2,1] <- 50
Cedulas[3,1] <- 20
Cedulas[4,1] <- 10
Cedulas[5,1] <- 5
Cedulas[6,1] <- 2

Moedas[1,1] <- 1
Moedas[2,1] <- 50
Moedas[3,1] <- 25
Moedas[1,1] <- 10
Moedas[2,1] <- 5
Moedas[3,1] <- 1

escreva("Entre com um valor: R$")
leia(Texto)
escreval("")


DefinirCedulas(caracpnum(Texto))

para x de 1 ate 6 faca
   escolha(x)
      caso 1
         se (Cedulas[x,2] = 1) entao
            escreval(numpcarac(Cedulas[x,2]) + " Cédula de R$ 100,00")
         senao
            se (Cedulas[x,2] > 1) entao
               escreval(numpcarac(Cedulas[x,2]) + " Cédulas de R$ 100,00")
            fimse
         fimse
      caso 2
         se (Cedulas[x,2] = 1) entao
            escreval(numpcarac(Cedulas[x,2]) + " Cédula de R$ 50,00")
         senao
            se (Cedulas[x,2] > 1) entao
               escreval(numpcarac(Cedulas[x,2]) + " Cédulas de R$ 50,00")
            fimse
         fimse
      caso 3
         se (Cedulas[x,2] = 1) entao
            escreval(numpcarac(Cedulas[x,2]) + " Cédula de R$ 20,00")
         senao
            se (Cedulas[x,2] > 1) entao
               escreval(numpcarac(Cedulas[x,2]) + " Cédulas de R$ 20,00")
            fimse
         fimse
      caso 4
         se (Cedulas[x,2] = 1) entao
            escreval(numpcarac(Cedulas[x,2]) + " Cédula de R$ 10,00")
         senao
            se (Cedulas[x,2] > 1) entao
               escreval(numpcarac(Cedulas[x,2]) + " Cédulas de R$ 10,00")
            fimse
         fimse
      caso 5
         se (Cedulas[x,2] = 1) entao
            escreval(numpcarac(Cedulas[x,2]) + " Cédula de R$ 5,00")
         senao
            se (Cedulas[x,2] > 1) entao
               escreval(numpcarac(Cedulas[x,2]) + " Cédulas de R$ 5,00")
            fimse
         fimse
      caso 6
         se (Cedulas[x,2] = 1) entao
            escreval(numpcarac(Cedulas[x,2]) + " Cédula de R$ 2,00")
         senao
            se (Cedulas[x,2] > 1) entao
               escreval(numpcarac(Cedulas[x,2]) + " Cédulas de R$ 2,00")
            fimse
         fimse
   fimescolha
fimpara

se (int(compr(Texto)) > 2) entao
   DefinirMoedas(Texto)
fimse

para x de 1 ate 6 faca
   escolha(x)
      caso 1
         se (Moedas[x,2] = 1) entao
            escreval(numpcarac(Moedas[x,2])+ " Moeda de R$ 1,00")
         senao
            se (Moedas[x,2] > 1) entao
               escreval(numpcarac(Moedas[x,2])+ " Moedas de R$ 1,00")
            fimse
         fimse
      caso 2
         se (Moedas[x,2] = 1) entao
            escreval(numpcarac(Moedas[x,2])+ " Moeda de R$ 0,50")
         senao
            se (Moedas[x,2] > 1) entao
               escreval(numpcarac(Moedas[x,2])+ " Moedas de R$ 0,50")
            fimse
         fimse

      caso 3
         se (Moedas[x,2] = 1) entao
            escreval(numpcarac(Moedas[x,2])+ " Moeda de R$ 0,25")
         senao
            se (Moedas[x,2] > 1) entao
               escreval(numpcarac(Moedas[x,2])+ " Moedas de R$ 0,25")
            fimse
         fimse

      caso 4
         se (Moedas[x,2] = 1) entao
            escreval(numpcarac(Moedas[x,2])+ " Moeda de R$ 0,10")
         senao
            se (Moedas[x,2] > 1) entao
               escreval(numpcarac(Moedas[x,2])+ " Moedas de R$ 0,10")
            fimse
         fimse

      caso 5
         se (Moedas[x,2] = 1) entao
            escreval(numpcarac(Moedas[x,2])+ " Moeda de R$ 0,05")
         senao
            se (Moedas[x,2] > 1) entao
               escreval(numpcarac(Moedas[x,2])+ " Moedas de R$ 0,05")
            fimse
         fimse

      caso 6
         se (Moedas[x,2] = 1) entao
            escreval(numpcarac(Moedas[x,2])+ " Moeda de R$ 0,01")
         senao
            se (Moedas[x,2] > 1) entao
               escreval(numpcarac(Moedas[x,2])+ " Moedas de R$ 0,01")
            fimse
         fimse
   fimescolha
fimpara
fimalgoritmo

I used two Vectors with dimensions [6.2] to store the corresponding Notes and Coins and their quantities. After performing the procedures a loop repetition to traverse the vector and print their respective amount.

The code is working perfectly just copy, paste and rotate.

    
20.04.2018 / 01:29