# Programmreferenz für &turtlelang;

Dies ist die Referenz für &kturtle;'s &turtlelang;. In diesem Kapitel werden zuerst alle unterschiedlichen Anweisungstypen kurz erläutert. Dann werden die Befehle nacheinander besprochen. Darauf folgen Erklärungen zu Containern, mathematischen Operatoren, Vergleichsoperatoren und Ausführungskontrolle. Zuletzt wird gezeigt, wie Sie mit lerne Ihre eigenen Befehle erstellen können.

## Die unterschiedlichen Anweisungstypen

Wie jede Sprache hat auch &turtlelang; verschiedene Typen von Worten und Symbolen. Hier werden diese Unterschiede zwischen den Typen kurz erklärt.

### Befehle

Mit Befehlen sagen Sie der Schildkröte oder &kturtle;, was sie tun soll. Einige Befehle brauchen Eingabewerte, andere geben Werte zurück.

    # vorwärts ist ein Befehl, der einen Eingabewert braucht,
    # in diesem Fall die Zahl 100:
    vorwärts 100

Eine ausführliche Übersicht aller von &kturtle; unterstützten Befehle finden Sie hier.

### Zahlen

Wahrscheinlich wissen Sie schon ziemlich viel über Zahlen. In &kturtle; werden Zahlen etwa so wie in der Sprache oder in der Mathematik verwendet.

Es gibt die so genannten natürlichen Zahlen: `0`, `1`, `2`, `3`, `4`, `5` &etc; Die negativen Zahlen: `-1`, `-2`, `-3` &etc; Und die Zahlen mit Dezimalstellen oder reelle Zahlen, zum Beispiel: `0.1`, `3.14`, `33.3333`, `-5.05`, `-1.0`.

Zahlen können in mathematischen Berechnungen und Vergleichen benutzt werden. Sie können auch in Container gepackt werden.

Zahlen werden im Quelltexteditor dunkelrot hervorgehoben.

### Zeichenketten

Zuerst ein Beispiel:

    drucke "Hallo, ich bin eine Zeichenkette."

In diesem Beispiel ist `drucke` ein Befehl und `"Hallo, ich bin eine Zeichenkette."` eine Zeichenkette. Zeichenketten haben am Anfang und am Ende das Zeichen `"`, daran erkennt sie &kturtle;.

Zeichenketten können auch in Container gepackt werden, aber nicht in mathematischen Berechnungen und Vergleichen benutzt werden.

Zeichenketten werden im Quelltexteditor rot hervorgehoben.

### Namen

In der &turtlelang;-Programmiersprache erzeugen Sie neue Objekte. Wenn Sie ein Programm schreiben, werden Sie oft Container und manchmal auch lerne für neue Befehle verwenden. Diesen neuen Befehlen mit lerne müssen Sie einen Namen geben.

Sie können jeden beliebigen Namen wählen, solange dieser Name noch nicht benutzt wird. Sie können zum Beispiel eine Funktion nicht vorwärts nennen, da dieser Name bereits für einen Befehl benutzt wird.

    # hier wird vorwärts als Name für eine Funktion benutzt, aber er
    # ist  schon der Name für einen Befehl, so dass dies einen Fehler gibt:
    lerne vorwärts {
       drucke "dies ist nicht erlaubt"
    }
    # dies funktioniert:
    lerne meinvorwärts {
      drucke "dies ist ok"
    }

Namen dürfen nur Buchstaben, Zahlen und Unterstriche (_) enthalten. Außerdem müssen sie mit einem Buchstaben anfangen. Namen für Container müssen mit dem Zeichen $ beginnen.

    # hier wird vorwärts als Container benutzt,
    # mit dem Vorzeichen $ am Anfang, so dass
    # es keinen Konflikt mit dem Befehl vorwärts gibt
    $vorwärts = 20
    drucke $vorwärts

Container werden im Quelltexteditor in violetter fettgedruckter Schrift hervorgehoben.

In der Dokumentation finden Sie unter Container und dem Befehl lerne genauere Erklärungen und Beispiele.

### Zuweisungen

Zuweisungen werden mit dem Symbol `=` ausgeführt. In Programmsprachen sollten Sie ein einzelnes `=` nicht als ‚ist gleich‘, sondern als ‚weist zu‘ lesen. Der Ausdruck ‚ist gleich‘ trifft eher auf den Vergleichsoperator `==` zu.

Zuweisungen brauchen sie im Allgemeinen aus zwei Gründen, (1) um etwas in einen Container zu packen und (2) um den Inhalt eines Containers zu bearbeiten. Zum Beispiel:

    $x = 10
    # Der Container x enthält jetzt die Zahl 10
    $W = "Mein Alter ist: "
    # Der Container W enthält jetzt die Zeichenkette "Mein Alter ist: "
    # Dies druckt den Inhalt der Container 'W' und 'x' auf die Zeichenfläche
    drucke $W + $x

Weitere Beispiele finden Sie im Abschnitt Container.

### Mathematische Symbole

&kturtle; unterstützt alle einfachen mathematischen Symbole: addieren (`+`), subtrahieren (`-`), multiplizieren (`*`), dividieren (`/`) und die Klammern `(` und `)`.

Eine ausführliche Erklärung und weitere Beispiele finden Sie im Abschnitt Mathematik.

### Vergleichsoperatoren

Wir können einfache Vergleiche anstellen, deren Ergebnis ‚wahr‘ oder ‚falsch‘ sein kann.

Vergleichsoperatoren werden ausführlich im Abschnitt Vergleichsoperatoren erklärt.

### Verknüpfungsoperatoren

Vergleiche können mit so genannten ‚Verknüpfungsoperatoren‘ verbunden werden, dies sind `und`, `oder`, und als Sonderfall `nicht`.

Eine Erklärung dieser Begriffe finden Sie im Abschnitt Verknüpfungsoperatoren.

### Kommentare

Kommentare sind Zeilen mit einem `#` am Anfang. Zum Beispiel:

    # dies ist ein Kommentar!
    drucke "dies ist kein Kommentar"
    # diese Zeile ist kein Kommentar, aber dafür die nächste:
    # drucke "dies ist kein Kommentar"

Mit Kommentaren können Sie Anmerkungen in den Quelltext einfügen, für Sie oder für andere Leser. Kommentare werden benutzt, um (1) eine kurze Beschreibung des Programms zu geben, um (2) einen etwas unverständlichen Quelltext zu erläutern, und um (3) zeitweise Zeilen des Quelltextes von der Ausführung auszuschließen (wie in der letzten Zeile des Beispiels).

Kommentarzeilen werden im Quelltexteditor hellgrau hervorgehoben.

## Befehle

Mit Befehlen sagen Sie der Schildkröte, was sie tun soll. Einige Befehle brauchen Eingabewerte, andere geben Werte zurück. In diesem Abschnitt werden alle Befehle für &kturtle; erklärt. Beachten Sie, dass alle eingebauten Befehle im Quelltexteditor blau hervorgehoben werden, dies erleichtert es Ihnen, sie zu erkennen.

### Die Schildkröte in Bewegung setzen

Es gibt verschiedene Befehle, um die Schildkröte auf dem Bildschirm zu bewegen.

vorwärts (vw)

      vorwärts X

  `vorwärts` bewegt die Schildkröte um einen Betrag von X Pixeln vorwärts. Wenn der Stift unten ist, zeichnet die Schildkröte eine Linie. `vorwärts` kann als `vw` abgekürzt werden.

rückwärts (rw)

      rückwärts X

  `rückwärts` bewegt die Schildkröte um einen Betrag von X Pixeln zurück. Wenn der Stift unten ist, zeichnet die Schildkröte eine Linie. `rückwärts` kann als `rw` abgekürzt werden.

linksdrehen (ld)

      linksdrehen X

  `linksdrehen` dreht die Schildkröte um einen Betrag von X Grad nach links. `linksdrehen` kann als `ld` abgekürzt werden.

rechtsdrehen (rd)

      rechtsdrehen X

  `rechtsdrehen` dreht die Schildkröte um einen Betrag von X Grad nach rechts. `rechtsdrehen` kann als `rd` abgekürzt werden.

richtung (rtg)

      richtung X

  `richtung` setzt die Bewegungsrichtung der Schildkröte auf X Grad gerechnet von Null, unabhängig von der vorherigen Bewegungsrichtung der Schildkröte. `richtung` kann als `rtg` abgekürzt werden.

mitte

      mitte

  `mitte` bewegt die Schildkröte in die Mitte der Zeichenfläche.

gehe

      gehe X,Y

  `gehe` bewegt die Schildkröte an eine bestimmten Stelle auf der Zeichenfläche. Dieser Ort ist X Pixel vom linken Rand und Y Pixel vom oberen Rand der Zeichenfläche entfernt.

gehex

      gehex X

  Mit dem Befehl `gehex` bewegt sich die Schildkröte auf X Pixel vom linken Rand der Zeichenfläche, bleibt dabei aber auf gleicher Höhe.

gehey

      gehey Y

  Mit dem Befehl `gehey` bewegt sich die Schildkröte auf Y Pixel vom oberen Rand der Zeichenfläche, bleibt dabei aber auf gleicher Entfernung vom linken Rand der Zeichenfläche.

Mit den Befehlen `gehe`, `gehex`, `gehey` und `mitte` zeichne die Schildkröte keine Linie, egal ob der Stift oben oder unten ist.

### Wo ist die Schildkröte?

Es gibt zwei Befehle, die die Position der Schildkröte auf dem Bildschirm zurückgeben.

holex

  `holex` gibt die Anzahl der Pixel vom linken Rand der Zeichenfläche bis zur aktuellen Position der Schildkröte zurück.

holey

  `holey` gibt die Anzahl der Pixel vom oberen Rand der Zeichenfläche bis zur aktuellen Position der Schildkröte zurück.

### Die Schildkröte kann zeichnen

Die Schildkröte kann mit einem Stift Linien zeichnen, wenn sie sich bewegt. Um diesen Stift zu kontrollieren, gibt es einige Befehle, die diesem Abschnitt beschrieben werden.

stifthoch (sh)

      stifthoch

  `stifthoch` hebt den Stift von der Zeichenfläche. Wenn der Zeichenstift hoch ist, zeichnet die Schildkröte bei ihrer Bewegung keine Linie. Siehe auch `stiftrunter`. `stifthoch` kann als `sh` abgekürzt werden.

stiftrunter (sr)

      stiftrunter

  `stiftrunter` drückt den Stift auf die Zeichenfläche. Wenn der Zeichenstift runter ist, zeichnet die Schildkröte eine Linie bei ihrer Bewegung. Siehe auch `stifthoch`. `stiftrunter` kann als `sr` abgekürzt werden.

stiftbreite (sb)

      stiftbreite X

  `stiftbreite` setzt die Stiftbreite (die Linienbreite) auf X Pixel. `stiftbreite` kann als `sb` abgekürzt werden.

stiftfarbe (sf)

      stiftfarbe R,G,B

  `stiftfarbe` setzt die Farbe für den Zeichenstift. `stiftfarbe` braucht eine RGB-Kombination als Eingabewert. `stiftfarbe` kann als `sf` abgekürzt werden.

### Befehle für die Zeichenfläche

Es gibt mehrere Befehle für die Zeichenfläche.

papiergröße (pg)

      papiergröße X,Y

  Mit dem Befehl `papiergröße` stellen Sie die Größe der Zeichenfläche ein. Als Eingabewert sind X und Y erforderlich, dabei ist X die neue Breite in Pixeln und Y die neue Höhe der Zeichenfläche in Pixeln. `papiergröße` kann als `pg` abgekürzt werden.

papierfarbe (pf)

      papierfarbe R,G,B

  `papierfarbe` setzt die Farbe der Zeichenfläche. `papierfarbe` braucht eine RGB-Kombination als Eingabewert. `papierfarbe` kann als `pf` abgekürzt werden.

### Befehle um aufzuräumen

Es gibt zwei Befehle, um die Zeichenfläche nach einem Fehler wieder aufzuräumen.

lösche (lös)

      lösche

  Mit `lösche` entfernen Sie alle Zeichnungen von der Zeichenfläche. Alle anderen Einstellungen bleiben erhalten: Die Position und die Bewegungsrichtung der Schildkröte, ob die Schildkröte sichtbar ist und Farbe und Größe der Zeichenfläche.

zurücksetzen

      zurücksetzen

  `zurücksetzen` räumt gründlicher auf als der Befehl `lösche`. Nach der Ausführung des Befehls `zurücksetzen` sind alle Einstellungen wie beim Start von &kturtle;. Die Schildkröte steht mitten auf einer weißen Zeichenfläche, zeichnet die Linien mit schwarzer Farbe und die Papiergröße beträgt 400 x 400 Pixel.

### Die Schildkröte ist ein Grafiksymbol

Viele Leute wissen nicht was Grafiksymbole sind, hier eine kurze Erklärung: Grafiksymbole sind kleine Bilder, die auf dem Bildschirm bewegt werden können. (Weitere Informationen finden Sie im Glossar unter Grafiksymbol). Die Schildkröte ist so ein Grafiksymbol.

Als nächstes finden Sie eine vollständige Übersicht aller Befehle für das Grafiksymbol.

[Diese Version von &kturtle; erlaubt noch nicht die Verwendung anderer Grafiksymbole als die Schildkröte. In späteren Versionen können Sie die Schildkröte durch selbst entworfene Symbole ersetzen]

zeigebild (zb)

      zeigebild

  `zeigebild` zeigt das Symbol der Schildkröte wieder an, wenn es ausgeblendet war. `zeigebild` kann als `zb` abgekürzt werden.

versteckebild (vb)

      versteckebild

  `versteckebild` schaltet das Symbol der Schildkröte aus, wenn sie nicht in Ihre Zeichnung passt. `versteckebild` kann als `vb` abgekürzt werden.

### Kann die Schildkröte schreiben?

Die Antwort lautet ja. Die Schildkröte kann jeden gewünschten Text schreiben.

drucke

      drucke X

  Mit dem Befehl `drucke` schreibt die Schildkröte Text auf die Zeichenfläche. `drucke` braucht Zahlen und Zeichenketten als Eingabewert. Sie können auch mehrere Zahlen und Zeichenketten mit dem Symbol `+` verbinden, wie das folgende kleine Beispiel zeigt:

      $jahr = 2003
      $autor = "Cies"
      drucke $autor + " startete das KTurtle Projekt " + $jahr + " und arbeitet immer noch gerne daran!"

schriftgröße

      schriftgröße X

  `schriftgröße` setzt die Größe der Schrift, die mit dem Befehl `drucke` benutzt wird. `schriftgröße` braucht nur eine Zahl als Eingabewert. Die Größe der Schrift wird in Pixeln angegeben.

### Ein Befehl, um zu würfeln

Es gibt einen Befehl, mit dem Sie würfeln können, er nennt sich `zufall` und ist sehr nützlich für einige unerwartete Ergebnisse.

zufall (zuf)

      zufall X,Y

  `zufall` ist ein Befehl, der Eingabewerte braucht und einen Wert zurückgibt. Als Eingabe sind zwei Zahlen nötig, die erste (X) bestimmt die Untergrenze, die zweite (Y) die Obergrenze der Ausgabe. Der Rückgabewert ist eine zufällige Zahl größer oder gleich der unteren Grenze und kleiner oder gleich der oberen Grenze. Hier ein kurzes Beispiel:

      wiederhole 500 {
        $x = zufall 1,20
        vorwärts $x
        linksdrehen 10 - $x
      }

  Mit dem Befehl `zufall` können Sie ein wenig Chaos in Ihr Programm einfügen.

### Eingaben und Nachrichten mit Dialogen

Ein Dialog ist ein kleines Fenster, das Meldungen anzeigt oder Eingaben ermöglicht. &kturtle; hat zwei Befehle für Dialoge: `nachricht` und `frage`

nachricht

      nachricht X

  Der Befehl `nachricht` braucht eine Zeichenkette als Eingabewert. Es öffnet sich ein Dialog und der Text der Zeichenkette wird angezeigt.

      nachricht "Cies startete das KTurtle Projekt 2003 und arbeitet immer noch gerne daran!"

frage

      frage X

  `frage` braucht eine Zeichenkette als Eingabewert. Es öffnet sich ein Dialog und der Text der Zeichenkette wird angezeigt, genau wie bei nachricht, aber zusätzlich erscheint noch ein Eingabefeld. In dieses Feld können Sie eine Zahl oder eine Zeichenkette eingeben, die in einem Container gespeichert werden können. Zum Beispiel

      $ein = frage "Wie alt sind Sie?"
      $aus = 2003-$ein
      drucke "Im Jahr 2003 waren Sie " + $aus + " Jahre alt."

  Wenn Sie den Eingabedialog abbrechen oder keine Zeichen eingeben, hat der Container keinen Inhalt.

## Container

Container sind Zeichen oder Worte, die vom Programmierer benutzt werden können, um Zahlen oder Text zu speichern. Container für Zahlen werden Variablen und Container für Text werden Zeichenketten genannt. Container erkennen Sie daran, dass dem Namen ein $ vorangestellt ist.

Container haben als Standard keinen Wert. Ein Beispiel:

    drucke $N

Dieser Befehl schreibt nichts, aber Sie erhalten eine Fehlermeldung.

### Variablen: Container für Zahlen

Beginnen wir mit einem Beispiel:

    $x = 3
    drucke $x

In der ersten Zeile wird der Buchstabe `x` als Variable (Container für Zahlen) eingeführt. Der Wert wird auf 3 gesetzt. In der zweiten Zeile wird dieser Wert ausgegeben.

Wenn Sie ein x ausgeben wollen, müssen Sie das auch so schreiben

    drucke "x"

Das war einfach, jetzt ein schwierigeres Beispiel:

    $A = 2004
    $B = 25
    $C = $A + $B

    # der nächste Befehl druckt "2029"
    drucke $C
    rückwärts 30
    # der nächste Befehl druckt "2004 plus 25"
    drucke $A + " plus " + $B
    rückwärts 30
    # der nächste Befehl druckt "1979"
    drucke $A - $B

In den ersten zwei Zeilen wird der Wert der Variablen `A` auf 2004 und `B` auf 25 gesetzt. In der dritten Zeile erhält die Variable `C` den Wert `A + B`, nämlich 2029. Der Rest des Beispiels besteht aus drei `drucke` Befehlen mit dem Befehl `rückwärts 30` dazwischen. `rückwärts 30` ist erforderlich, um jede Ausgabe auf einer neuen Zeile zu schreiben. Dieses Beispiele zeigt auch, dass Variablen in Berechnungen benutzt werden können.

### Container für Text (Zeichenketten)

In Programm-Quelltext wird normaler Text üblicherweise von Anführungsstrichen eingeschlossen. Wie Sie schon gesehen haben:

    drucke "Hallo Programmierer!"

Der normale Text wird mit Anführungsstrichen abgetrennt. Dieser normale Text nennt sich Zeichenkette.

Zeichenketten können ebenso wie Zahlen in Container gepackt werden, sie sind den Variablen sehr ähnlich. Der größte Unterschied liegt darin, das Zeichenketten Text anstatt Zahlen enthalten. Deshalb können sie nicht in mathematischen Berechnungen und Vergleichen benutzt werden. Ein Beispiel für Zeichenketten:

    $x = "Hallo "
    $Name = frage "Bitte geben Sie Ihren Namen ein ..."
    drucke $x + $Name + ", wie gehts?"

In der ersten Zeile erhält `x` den Wert Hallo. In der zweiten Zeile erhält die Zeichenkette `Name` den Rückgabewert des Befehls `frage`. In der dritten Zeile druckt das Programm drei Zeichenketten zusammen auf die Zeichenfläche.

Dieses Programm fragt nach Ihrem Namen. Wenn Sie zum Beispiel den Namen Paul eingeben, schreibt das Programm Hallo Paul, wie gehts. Das Pluszeichen (+) ist das einzige mathematische Symbol, dass auch auf Zeichenketten angewendet werden kann.

## Kann die Schildkröte rechnen?

Klar, &kturtle; kann für Sie rechnen. Sie können addieren (+), subtrahieren (-), multiplizieren (*) und dividieren (/). Im folgenden Beispiel werden alle Funktionen benutzt :

    $a = 20 - 5
    $b = 15 * 2
    $c = 30 / 30
    $d = 1 + 1
    drucke "a: "+$a+", b: "+$b+", c: "+$c+", d: "+$d

Wissen Sie, welchen Wert a, b, c und d haben? Beachten Sie den Gebrauch des Zuweisungszeichens `=`.

Für eine einfache Berechnung geben Sie zum Beispiel folgendes ein:

    drucke 2004-12

Nun ein Beispiel mit Klammern:

    drucke ( ( 20 - 5 ) * 2 / 30 ) + 1

Der Ausdruck in Klammern wird zuerst berechnet. In diesen Beispiel wird also 20-5 berechnet, dann mit 2 multipliziert, durch 30 dividiert und dann 1 addiert (das ergibt 2).

&kturtle; kennt noch weitere mathematische Funktionen und Konstanten, wie zum Beispiel die Zahl `pi` und trigonometrische Funktionen wie `sin`, `cos`, `tan`, `arcsin`, `arccos`, `arctan` und die Funktionen `wurzel` und `exp`.

## Fragen und Antworten ...

Im nächsten Abschnitt wird die bedingte Ausführung mit den Befehlen `wenn` und `solange` erklärt. In diesem Abschnitt werden die Vergleichsoperatoren am Beispiel von `wenn` erklärt.

### Vergleichsoperatoren

Ein einfaches Beispiel für einen Vergleich:

    $x = 6
    wenn $x > 5 {
      drucke "Hallo"
    }

In diesem Beispiel lautet der Vergleich: ist `x > 5`. Wenn das Ergebnis diese Vergleichs wahr ist, wird der Quelltext zwischen den Klammern ausgeführt. Vergleiche sind ein wichtiger Bestandteil der Programmierung und werden oft zusammen mit Befehlen zur bedingten Ausführung wie `wenn` benutzt. Alle Zahlen und Variablen (Zahlencontainer) können in Vergleichen benutzt werden.

Hier sind alle Vergleichsoperatoren, die Sie anwenden können:

#### Vergleichsoperatoren

`a == b` | ist gleich | Das Ergebnis ist wahr, wenn `a` gleich `b` ist
`a != b` | nicht gleich | Das Ergebnis ist wahr, wenn `a` nicht gleich `b` ist
`a > b` | größer als | Das Ergebnis ist wahr, wenn `a` größer als `b` ist
`a < b` | kleiner als | Das Ergebnis ist wahr, wenn `a` kleiner als `b` ist
`a >= b` | gleich oder größer als | Das Ergebnis ist wahr, wenn `a` größer oder gleich `b` ist
`a <= b` | kleiner oder gleich | Das Ergebnis ist wahr, wenn `a` kleiner oder gleich `b` ist

### Verknüpfungsoperatoren

Vergleiche können auch miteinander verbunden werden durch Verknüpfungsoperatoren, damit entsteht ein zusammengesetzter Vergleich.

    $a = 1
    $b = 5
    wenn ($a < $b) und ($b == 5) {
      drucke "Hallo"
    }

In diesem Beispiel wird der Verknüpfungsoperator `und` benutzt, um zwei Vergleiche (`a < 5`, `b == 5`) zu verbinden. Wenn eine Seite des `und` falsch ist, ist das Ergebnis des gesamten Vergleichs auch falsch, da mit der Verknüpfung `und` beide Seiten wahr sein müssen, um als Ergebnis wahr zu ergeben. Vergessen Sie nicht die Klammern um die Vergleiche.

Dies ist ein sehr schematischer Überblick, ein genauere Erklärung folgt weiter unten:

#### Verknüpfungsoperatoren

`und` | beide Seiten müssen ‚wahr‘ sein, um als Ergebnis ‚wahr‘ zurückzugeben
`oder` | wenn eine Seite ‚wahr‘ ist, dann ist auch das Ergebnis ‚wahr‘
`nicht` | Sonderfall: arbeitet nur mit einem Wert! Ändert ‚wahr‘ in ‚falsch‘ und ‚falsch‘ in ‚wahr‘.

#### und

Wenn zwei Vergleiche mit `und` verknüpft werden, müssen beide Seiten des `und` ‚wahr‘ sein, damit das Ergebnis auch ‚wahr‘ ist. Ein Beispiel:

    $a = 1
    $b = 5
    wenn (($a < 10) und ($b == 5)) und ($a < $b) {
      drucke "Hallo"
    }

In diesem Beispiel sehen Sie eine verknüpften Vergleich, der wieder mit einem anderen Vergleich verknüpft wird.

#### oder

Wenn einer von zwei Vergleiche mit `oder` verknüpft werden, muss eine Seite des `oder` ‚wahr‘ sein, damit das Ergebnis auch ‚wahr‘ ist. Ein Beispiel:

    $a = 1
    $b = 5
    wenn (($a < 10) oder ($b == 10)) oder ($a ==0) {
      drucke "Hallo"
    }

In diesem Beispiel sehen Sie einen verknüpften Vergleich, der wieder mit einem anderen Vergleich verknüpft wird.

#### nicht

`nicht` ist ein besonderer Verknüpfungsoperator, weil er nur mit einem Wert benutzt werden kann. `nicht` ändert ‚wahr‘ in ‚falsch‘ und ‚falsch‘ in ‚wahr‘. Ein Beispiel:

    $a = 1
    $b = 5
    wenn nicht (($a < 10) und ($b == 5)) {
      drucke "Hallo"
    }
    sonst
    {
      drucke "nicht Hallo ;-)"
    }

In diesem Beispiel ist der verknüpfte Vergleich ‚wahr‘, aber das `nicht` ändert das zu ‚falsch‘. So wird dann `"nicht Hallo ;-)"` auf die Zeichenfläche geschrieben.

## Kontrolle der Programmausführung

Mit den Befehlen zur Ausführungskontrolle können Sie — wie der Name schon sagt — den Ablauf der Ausführung kontrollieren.

Befehle zur Ausführungskontrolle werden durch eine dunkelgrüne, fettgedruckte Schrift hervorgehoben. Die meistens zusammen mit der Ausführungskontrolle verwendeten Klammern werden durch hellgrüne Farbe hervorgehoben.

### Lass die Schildkröte warten

Wenn Sie schon in &kturtle; programmiert haben, ist Ihnen bestimmt aufgefallen, dass sich die Schildkröte beim Zeichnen sehr schnell bewegt. Dieser Befehl lässt die Schildkröte eine bestimmte Zeit warten.

warte

      warte X

  Mit `warte` wartet die Schildkröte X Sekunden.

      wiederhole 36 {
        vorwärts 5
        rechtsdrehen 10
        warte 0,5
      }

  Dieser Quelltext zeichnet einen Kreis, aber die Schildkröte wartet eine halbe Sekunde nach jedem Schritt. Dies vermittelt den Eindruck einer Schildkröte, die sich langsam bewegt.

### Ausführungskontrolle mit wenn

wenn

      wenn Vergleich {...}

  Der Quelltext zwischen den Klammern wird nur dann ausgeführt, `wenn` das Ergebnis des Vergleichs wahr ist. Weitere Informationen finden Sie unter Vergleichsoperatoren in diesem Abschnitt.

      $x = 6
      wenn $x > 5 {
        drucke "x ist größer als fünf!"
      }

  In der ersten Zeilen weisen Sie `x` den Wert 6 zu. In der zweiten Zeile wird der Vergleich `x > 5` ausgeführt. Da das Ergebnis wahr ist, lässt die Ausführungskontrolle `wenn` den Quelltext zwischen den Klammern ausführen.

### Ausführungskontrolle mit sonst

sonst

      wenn Vergleich {...} sonst {...}

  `sonst` kann zusammen mit der Ausführungskontrolle `wenn` benutzt werden. Der Quelltext zwischen den Klammern nach `sonst` wird nur dann ausgeführt, wenn der Vergleich falsch ergibt:

      zurücksetzen
      $x = 4
      wenn $x > 5 {
        drucke "x ist größer als fünf!"
      }
      sonst
      {
        drucke "x ist kleiner als sechs!"
      }

  Der Vergleich überprüft, ob `x` größer als 5 ist. Da in der ersten Zeile `x` der Wert 4 zugewiesen wird, ist das Ergebnis falsch. Das führt dazu, dass der Quelltext zwischen den Klammern nach `sonst` ausgeführt wird.

### Die solange-Schleife

solange

      solange Vergleich {...}

  Die Ausführungskontrolle mit `solange` ist dem `wenn` sehr ähnlich. Der Unterschied liegt darin, dass `solange` die Ausführung des Quelltext zwischen den Klammern (in einer Schleife) solange wiederholt, bis das Ergebnis des Vergleichs falsch ist:

      $x = 1
      solange $x < 5 {
        vorwärts 10
        warte 1
        $x = $x + 1
      }

  In der ersten Zeile wird `x` der Wert 1 zugewiesen. In der zweiten Zeile wird der Vergleich `x < 5` durchgeführt. Da die Antwort darauf wahr ist, lässt die Ausführungskontrolle mit `solange` den Quelltext zwischen den Klammern ausführen, bis der Vergleich falsch ist. In diesem Beispiel wird der Quelltext viermal ausgeführt, da bei jeder Ausführung der fünften Zeile `x` um 1 vergrößert wird.

### Die wiederhole-Schleife

wiederhole

      wiederhole Zahl { ... }

  Die Ausführungskontrolle mit `wiederhole` funktioniert ähnlich wie `solange`, nur dass mit `wiederhole` der Quelltext innerhalb der Klammern mit der angegebenen Anzahl von Wiederholungen ausgeführt wird.

### Die von-Schleife, eine zählende Schleife

von

      von Anfang bis Ende { ... }

  Die `von`-Schleife ist eine zählende Schleife, d. h. zählt sie für Sie:

      von $x = 1 bis 10 {
        drucke $x * 7
        vorwärts 15
      }

  Jedes Mal, wenn der Quelltext zwischen den Klammern ausgeführt wird, vergrößert sich der Wert von `x` um eins, bis `x` den Wert 10 erreicht. Der Quelltext zwischen den Klammern druckt den Wert von `x` multipliziert mit 7. Nach dem Ende dieses Programms sehen Sie das 1x7 auf der Zeichenfläche.

  Als Standard ist die Schrittweite einer Schleife auf 1 eingestellt, für einen anderen Wert benutzen Sie:

      von Anfang bis Ende schritt schrittweite { ... }

### Die Schildkröte stoppen

ende

      ende

  Beendet die Ausführung des Skripts.

## Schreiben Sie Ihre eigenen Befehle mit lerne

`lerne`
ist ein besonderer Befehl, weil Sie damit Ihre eigenen Befehle erzeugen können. Ihre eigenen Befehle können einen Eingabewert erfordern und einen Wert zurückgeben. Dieses Beipiel zeigt, wie Sie einen neuen Befehl schreiben:

    lerne kreis $x {
      wiederhole 36 {
        vorwärts $x
        linksdrehen 10
      }
    }

Der neue Befehl hat den Namen `kreis`. `kreis` braucht einen Eingabewert, eine Zahl, um die Größe des Kreises festzulegen. `kreis` gibt keinen Wert zurück. `kreis` kann jetzt wie ein normaler Befehl benutzt werden, wie das folgende Beispiel zeigt:

    lerne kreis $X {
      wiederhole 36 {
        vorwärts $X
        linksdrehen 10
      }
    }

    gehe 200,200
    kreis 20

    gehe 300,200
    kreis 40

Im nächsten Beispiel wird ein Befehl mit Rückgabewert gezeigt.

    zurücksetzen

    lerne quadrieren $n {
      $r = $n * $n
      zurück $r
    }
    $i = frage "Geben Sie eine Zahl ein und drücken Sie dann OK"
    drucke $i + " zum Quadrat ist: " + quadrieren $i

In diesem Beispiel wird ein neuer Befehl mit dem Namen `quadrieren` erstellt. Der Eingabewert des Befehls wird mit sich selbst multipliziert und mit dem Befehl `zurück` zurückgegeben. Der Befehl `zurück` ermöglicht die Rückgabe des Wertes einer selbst erzeugten Funktion.

Befehle können auch mehr als zwei Eingaben haben. Im nächsten Beispiel sehen Sie einen Befehl zum Zeichnen eines Rechtecks.

    lerne rechteck $X, $Y {
      vorwärts $Y
      rechtsdrehen 90
      vorwärts $X
      rechtsdrehen 90
      vorwärts $Y
      rechtsdrehen 90
      vorwärts $X
      rechtsdrehen 90
    }

Dann können Sie `rechteck 50, 100` benutzen und die Schildkröte zeichnet ein Rechteck auf die Zeichenfläche.