vd-archiv:listings:4d2008-02-listings
Inhaltsverzeichnis
4d2008-02 Listings
Berichtgenerator.zip
Berichtgenerator - Berichte generieren mit Hilfe von Gforth — ein Kinderspiel; 3 Listings: in.fs m.dep bio.txt
GTK-Listings.zip
GTK-Listings - Widgets zum Anfassen - GUI-Skripting mit Forth und GTK+; Listing 1+2.
Quellcode_Bibliothek.zip
Quellcode Bibliothek - Ein einfaches Quellcode–Bibiliothekssystem; 3 Listings: SAMPLE.LIB APPL.F LIBRARY.ANS
euler9.fs
\ Euler 9 .solution ( mka)
decimal
vocabulary euler
euler definitions
\ Satz des Pythagoras: a^2 + b^2 = c^2
: pyt ( a b -- c^2 )
dup * swap dup * + ;
\ Quadratwurzel ziehen: Heron-Verfahren (Heron von Alexandria)
\ Die Iterationsvorschrift lautet: xn+1 = ( xn + a/xn ) / 2
\ In RPN: a xn / xn + 2 / --> xn+1
\ Weil nur die natürlichen Werte der Wurzel aus c^2 gebraucht werden,
\ wird ganzzahlig kalkuliert.
\ Quelle: forth-ev wiki
\ http://www.forth-ev.de/wiki/doku.php
: sqrt ( a -- s )
DUP 0= ?EXIT
DUP >R
BEGIN
R@ OVER / OVER + 2/
DUP ROT - ABS 1 <=
UNTIL R> DROP ;
\ Wir brauchen nur die Werte von c, für die c eine natürliche Zahl ist.
: nsqrt? ( a b -- f )
pyt
dup sqrt ( -- n s )
dup * ( -- n s*s )
- 0= ; ( -- f ) \ if zero, s is natural number.
\ Ist a+b+c=1000?
: 1000? ( a b -- f )
2dup pyt sqrt
+ + 1000 = ;
\ Huebsche Ausgabe der gefundenen Loesungen (!)
: .solution ( a b -- )
cr ." -------------------"
cr 2dup swap ." a=" . ." b=" .
2dup pyt sqrt ." c=" .
cr 2dup 2dup pyt sqrt + + ." a+b+c=" .
cr 2dup pyt sqrt * * ." abc=" . ;
\ Teste a,b bis zum Wert a=b=xx
variable xx 1000 xx !
: p9 ( -- )
xx @ 0 DO
xx @ 0 DO
i j nsqrt? IF
i j 1000? IF i j .solution THEN
THEN
LOOP
LOOP
cr ." -------------------" ;
words cr cr
( finis)
vd-archiv/listings/4d2008-02-listings.txt · Zuletzt geändert: 2017-05-21 21:07 von mka