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.