# Programmreferenz für &kturtle;s Logo-Sprache

Dies ist die Referenz für &kturtle;'s &logo;. 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 LOGO 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`, usw. Die negativen Zahlen: `-1`, `-2`, `-3`, usw. 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 blau 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 dunkelrot hervorgehoben.

### Namen

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

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

    # hier wird vorwärts als Name für einen Container benutzt, aber er
    # hat schon eine Bedeutung, so dass dies einen Fehler gibt:
    vorwärts = 20

    # dies funktioniert:
    vorwärts 20

Namen dürfen nur Buchstaben, Zahlen und Unterstriche (_) enthalten. Außerdem müssen sie mit einem Buchstaben anfangen.

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, der 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 dunkelgelb 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 dunkelgrün 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

      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

      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.

#### nachlinks (nl)

nachlinks

      nachlinks X

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

#### nachrechts (nr)

nachrechts

      nachrechts X

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

#### richtung (rtg)

richtung

      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.

#### indiemitte

indiemitte

      indiemitte

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

#### gehe

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. Mit dem Befehl `gehe` zeichnet die Schildkröte keine Linie.

#### gehex

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

      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.

### 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 (sth)

stifthoch

      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 `sth` abgekürzt werden.

#### stiftrunter (str)

stiftrunter

      stiftrunter

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

#### stiftbreite (stbr)

stiftbreite

      stiftbreite X

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

#### stiftfarbe (stf)

stiftfarbe

      stiftfarbe R,G,B

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

### Befehle für die Zeichenfläche

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

#### papiergröße (pg)

papiergröße

      papiergröße X,Y

  Mit dem Befehl `papiergröße` stellen Sie die Größe der Zeichenfläche ein. Als Parameter 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

      papierfarbe R,G,B

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

#### umbruchan

umbruchan

      umbruchan

  Mit dem Befehl `umbruchan` schalten Sie für die Zeichenfläche den Umbruch an. Im Glossar finden Sie mehr über die Bedeutung von Umbruch.

#### umbruchaus

umbruchaus

      umbruchaus

  Mit dem Befehl `umbruchaus` schalten Sie für die Zeichenfläche den Umbruch aus. Das kann dazu führen, dass sich die Schildkröte über den Rand der Zeichenfläche hinausbewegt und verloren geht.Im Glossar finden Sie mehr über die Bedeutung von Umbruch.

### Befehle um aufzuräumen

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

#### lösche (ls)

lösche

      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. `lösche` kann als `ls` abgekürzt werden.

#### zurücksetzen

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 und zeichnet die Linien mit schwarzer Farbe.

### 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]

#### zeige

zeige (zg)

      zeige

  `zeige` zeigt das Symbol der Schildkröte wieder an, wenn es verborgen war. `zeige` kann als `zg` abgekürzt werden.

#### verberge (vg)

verberge

      verberge

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

### Kann die Schildkröte schreiben?

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

#### drucke

drucke

      drucke X

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

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

#### schriftgröße

schriftgröße

      schriftgröße X

  `schriftgröße` setzt die Größe der Schrift, die mit dem Befehl `drucke` benutzt wird. `fontsize` braucht nur eine Zahl als Parameter. 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

      zufall X,Y

  `zufall` ist ein Befehl, der als Parameter 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 400 [
        x = zufall 1,20
        vorwärts x
        nachlinks 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 `eingabefenster`

#### nachricht

nachricht

      nachricht X

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

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

#### eingabefenster

eingabefenster

      eingabefenster X

  `eingabefenster` 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 = eingabefenster "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 haben als Standard keinen Wert. Ein Beispiel:

    drucke N

Dieser Befehl schreibt nichts. Verwenden Sie in mathematischen Berechnungen leere Container, dann erhalten Sie Fehler.

### 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` und `B` auf 2004 und 5 gesetzt. In der dritten Zeile erhält die Variable `C` den Wert `A + B`, nämlich 2029. Der Rest des Beispiels besteht aus 3 `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 = eingabefenster "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 `eingabefenster`. In der dritten Zeile druckt das Programm drei Zeichenketten zusammen auf der 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).

## 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

Vergleichsoperatoren werden im Quelltexteditor hellblau hervorgehoben.

### Verknüpfungsoperatoren

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

    a = 1
    b = 5
    wenn a < 5 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'.

Verknüpfungsoperatoren werden im Quelltexteditor violett hervorgehoben.

#### 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 eine 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 zu kontrollieren.

Befehle zur Ausführungskontrolle werden hervorgehoben durch eine dunkelgrüne, fettgedruckte Schrift. Die meistens zusammen mit der Ausführungskontrolle verwendeten eckigen 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
        nachrechts 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.

### 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.

### 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 "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.

## 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
        nachlinks 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
        nachlinks 10
      ]
    ]

    gehe 30,30
    kreis 20

    gehe 40,40
    kreis 50

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

    lerne quadriere n [
      r = n * 1
      r = n * n
      zurück r
    ]
    i = eingabefenster "Geben Sie eine Zahl ein und drücken Sie dann OK"
    drucke i + " zum Quadrat ist: " + quadriere i

In diesem Beispiel wird ein neuer Befehl mit dem Namen `quadriere` 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.