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)