Lösungen der Aufgaben

    Lösungen zu Kapitel 3

  1. Die Definition ist eigentlich ganz einfach:

          : PLUSZ 43 EMIT 1 SPACES ;
        

    Es gibt allerdings noch eine Alternative mit einem anderen Wort: SPACE. SPACE ist eigentlich nur eine Abkürzung für 1 SPACES, da diese Variante, dass man nur ein Leerzeichen ausgeben will, recht oft vorkommt, haben viele Forth-Varianten dieses Wort in ihrem 'Grundwortschatz'.

  2. Vermutlich dachten sie nun, die Lösung wäre wieder ganz einfach, zum Beispiel:

          : PLUSWELT PLUSZ PLUSZ PLUSZ ." Hallo Welt" PLUSZ PLUSZ PLUSZ ;
        

    Damit sieht die Ausgabe allerdings nicht ganz so aus, wie gefordert:

          PLUSWELT
          + + + Hallo Welt+ + +  ok
        

    Tatsächlich muss da noch ein weiteres SPACE mit hinein, damit die Sache stimmt:

          : PLUSWELT PLUSZ PLUSZ PLUSZ ." Hallo Welt" SPACE PLUSZ PLUSZ PLUSZ ;
        
  3. Lösungen zu Kapitel 6

  4. Beide Ausdrücke ergeben den Wert 25. Im mathematischen Sinne sind die identisch.
    1. 	  5 3 - 2 *
      	  oder
      	  2 5 3 - *
      	
    2. 	  7 2 + 13 2 - *
      	
    3. 	  4 2 + 3 * 2 /
      	
    4. 	3 2 + 5 * 6 2 - 4 * /
      	
  5. : 3SWAP SWAP ROT ;
  6. : OVER SWAP DUP ROT ROT ;
  7. : -ROT ROT ROT ;
  8. : TERM1 DUP 1 + * ;
  9. : TERM2 DUP 7 * 5 + * ;
  10. : 4UMGEKEHRT SWAP 2SWAP SWAP ;
  11. : 3DUP DUP 2OVER ROT ;
  12. Lösungen zu Kapitel 7

  13. Eine Möglichkeit wäre:
          : ZIGARETTEN ( n -- )
            18 < IF ." Zu jung!" CR
    	     ELSE ." Bitte sehr!" CR
    	     THEN ;
        
  14. Auch hier gibt es mehrere Möglichkeiten. Eine davon wäre:
          : VORZEICHEN ( n -- )
            DUP 0= IF ." Null " ELSE
    	DUP 0< IF ." negativ " ELSE
    	          ." positiv " THEN THEN
            DROP ;
        
    das DROP am Ende ist dazu da den Stack leer zu hinterlassen. Es ist nötig, da das erste DUP gebraucht wird, falls die Zahl nicht Null ist.
  15. Hier bietet sich an zwei Tests zu einem zu kombinieren. Da beide Einzeltests gleichzeitig erfüllt sein sollen, empfiehlt sich eine Und-Verknüpfung.
          : GRENZE ( n u o -- f )
            ROT DUP ROT <
    	ROT ROT <
    	AND
        
  16. Lösungen zu Kapitel 8

  17. Die beiden ersten Fibonacci-Zahlen, also die beiden Einsen werden nicht ausgegeben!
        : FIBONACCI
          1 SWAP 1 SWAP 0
          DO
            OVER + DUP .
    	SWAP
          LOOP
          DROP DROP ;
        
  18. Dieses Problem heißt Collatz-Problem, weil es von Collatz eingeführt wurde und tatsächlich bis heute nicht gelöst wurde. Die Frage, die dahinter steckt ist, ob die Folge von Zahlen, die durch diese einfach Anweisung durchlaufen wird, immer zu einer Eins führt.
    Als Wort ist es recht einfach, bietet aber Gelegenheit die Inhalte dieses und des letzten Kapitels in einem Wort zu vereinen:
        : COLLATZ ( n -- )
          BEGIN
            DUP .
    	DUP 1 AND
    	IF
    	  3 * 1 +
    	ELSE
    	  2/
    	THEN
    	DUP
    	1 =
          UNTIL DROP ;
        
    Das letzte DROP dient wieder dazu den Stack 'leer' zu hinterlassen.