BASIC nach Forth - 13. Oktober 2006


BASIC nach Forth - 13. Oktober 2006

von cas » Fr 13. Okt 2006, 22:58
Diesmal behandeln wir Schleifen. Dieses kleine Programme habe ich Buch "Spielend Programmierer Lernen" von Karl-Heinz Koch gefunden:

Code: Alles auswählen
10 PRINT CHR$(125)
15 POKE 82,0
20 FOR ZE=0 TO 20
30 FOR SP=0 TO 39
40 POSITION SP,ZE
50 X=INT(RND(0)*26)+65
60 ? CHR$(X)
70 NEXT SP
80 NEXT ZE


Das Programm schreibt den Bildschirm mit zufälligen Buchstaben voll. Hierzu werden zwei verschachtelte Schleifen benutzt.

In Forth sieht das Programm so aus:

Code: Alles auswählen
: RND ( -- n ) \ Random Number 0-$FF
  $D20A C@ ;

\ Random Numner 0..n-1
: RANDOM ( n -- 0..n-1 )
  RND $100 * RND + UM* NIP ;

: POS ( x y -- ) \ Position Cursor
  $54 C! $55 ! ;

: CLS ( -- )  \ Clear Screen
  &125 EMIT ;

: LMARGN ( n -- ) \ Set left margin
  &82 C! ;

: LOOP-DEMO
  CLS
  0 LMARGN
  21 0 DO
    40 0 DO
      I J POS
      26 RANDOM 65 + EMIT
    LOOP
  LOOP ;


LOOP-DEMO ist das eigendliche Programm. Befehle zum Positionieren des Cursors und Erzeugen einer Zufallszahl, welche in Atari-Basic eingebaut sind, befinden sich nicht im volksForth Kern und werden daher im Programm definiert (d.h. auch, bei Programmen, welche diese Befehle nicht benötigen, wird kein Speicherplatz verbraucht)

Die Forth Wörter I und J liefern die Schleifen-Indizes. I liefert den Index der innersten Schleife, J den Index der äußeren Schleife. Das Forth-Programm kommt ganz ohne Variablen aus, da alle Werte über den Stapelspeicher (Stack) übergeben werden.

Viel Spass

Carsten