Olá amigos, bom dia
Preciso fazer um Mapa de troco,
Exemplo
R$ 45,30
2 Nota(s) de R$ 20,00
4 Nota(s) de R$ 10,00
1 Nota(s) de R$ 5,00
3 Moedas de R$ 0,10
etc
Algo mais ou menos assim

Moderador: Moderadores
informais escreveu:R$ 45,30
2 Nota(s) de R$ 20,00
4 Nota(s) de R$ 10,00
1 Nota(s) de R$ 5,00
3 Moedas de R$ 0,10
PROCEDURE Main
LOCAL nValor := 45.30
LOCAL aItem
FOR EACH aItem IN Troco( nValor )
? Str( aItem[ 1 ], 3 ) + " " + aItem[ 2 ] + " de " + Str( aItem[ 3 ] )
NEXT
Inkey(0)
RETURN
FUNCTION Troco( nValor )
LOCAL aList := { ;
{ 50, "nota(s)" }, ;
{ 20, "nota(s)" }, ;
{ 10, "nota(s)" }, ;
{ 5, "nota(s)" }, ;
{ 2, "nota(s)" }, ;
{ 1, "moeda(s)" }, ;
{ 0.50, "moeda(s)" }, ;
{ 0.25, "moeda(s)" }, ;
{ 0.10, "moeda(s)" }, ;
{ 0.05, "moeda(s)" }, ;
{ 0.01, "moeda(s)" } }
LOCAL aTroco := {}
LOCAL aItem, nQtd
FOR EACH aItem IN aList
nQtd := Int( nValor / aItem[ 1 ] )
? nValor, aItem[ 1 ], nQtd
IF nValor >= aItem[ 1 ]
nValor := nValor - ( nQtd * aItem[ 1 ] )
AAdd( aTroco, { nQtd, aItem[ 2 ], aItem[ 1 ] } )
ENDIF
NEXT
RETURN aTroco
PROCEDURE Main
LOCAL nValor := 45.30
LOCAL nItem
FOR EACH nItem IN Troco( nValor )
? Str( nItem[ 1 ], 2 ) + " " + iif( nItem[ 1 ] < 2, "moeda(s)", "nota(s)" ) + " de " + Str( nItem[ 2 ] )
NEXT
Inkey(0)
RETURN
FUNCTION Troco( nValor )
LOCAL aList := { 50, 20, 10, 5, 2, 1, 0.50, 0.25, 0.10, 0.05, 0.01 }
LOCAL aTroco := {}
LOCAL nItem, nQtd
nValor := Int( nValor * 100 )
FOR EACH nItem IN aList
nQtd := Int( nValor / ( nItem * 100 ) )
//? nValor/100, nItem, nQtd
IF nValor >= ( nItem * 100 )
nValor := nValor - ( nQtd * nItem * 100 )
AAdd( aTroco, { nQtd, nItem } )
ENDIF
NEXT
RETURN aTroco
iif( nItem[ 2 ] < 2, "moeda(s)", "nota(s)" )
FOR EACH nItem IN a List
FOR nCont = 1 TO Len( aList )
aItem := aList[ nCont ]
FOR EACH nItem IN Troco( nValor )
aList := Troco( nValor )
FOR nCont = 1 TO Len( aList )
nItem := aList[ nCont ]
Usuários vendo este fórum: Google [Bot] e 4 visitantes