\ Rekenen met breuken (oplossing)
\ AN aug 2025decimal : C>F ( C -- F ) 9 5 */ 32 + ; : F>C ( F -- C ) 32 - 5 9 */ ;
\ Opgave 1 - de code voor C>>F en F>>C
decimal \ t/n teller/noemer : C>>F ( ct cn -- ft fn ) 5 * swap 9 * over 32 * + swap ; : F>>C ( ft fn -- ct cn ) tuck 32 * - 5 * swap 9 * ;
\ Opgave 2 - de code voor .Q
\ Druk t/n (het quotient van t en n) af als decimale breuk\ #dec = aantal decimalen
\ Eerst maar eens de rekenkundige kern van de zaak:
: .Q ( t n #dec -- ) >r tuck \ n t n /mod \ n rest quotient 0 .r ch . emit \ n rest r> 0 ?do 10 * over /mod \ n rest' rest*10/n ch 0 + emit \ decimalen achter de komma loop 2drop ;\ En nu rekening houdend met:
\ een buitensporig groot aantal decimalen \ eventuele mintekens \ kans op overflow bij REST*10 \ N = 0
: .Q ( t n #dec -- ) over if 64 umin >r \ #dec begrenzen 2dup xor 0< if ch - emit then \ uitkomst negatief? abs swap abs \ n t over /mod \ n rest quotient 0 .r ch . emit \ n rest r> 0 ?do over >r 10 um* r> um/mod \ n rest' rest*10/n \ 10 um* 2 pick um/mod ch 0 + emit \ decimalen achter de komma loop 2drop space else 2drop 0 .r ." /0 " \ n was 0 then ;
\ Voorbeelden 21 c>f . 22 c>f . 21 1 c>>f 3 .q 22 1 c>>f 4 .q 215 10 c>>f 5 .q 707 10 f>>c 6 .q 355 113 32 .q 1000 998 32 .q