Lazarus/Schleifen: Unterschied zwischen den Versionen
main>Peterdauscher |
main>Peterdauscher Keine Bearbeitungszusammenfassung |
||
Zeile 65: | Zeile 65: | ||
Anders ist es bei Schleifen mit Abbruchsbedingung. Bei denen wird das Innere der Schleife mindestens einmal durchlaufen. Eine solche Schleife ist in Pascal die so genannte Repeat-Until-Schleife. Unser Problem mit dem Aufsummieren von Zahlen bis zur Summe 1000 könnte mit einer solchen Schleife so aussehen: | Anders ist es bei Schleifen mit Abbruchsbedingung. Bei denen wird das Innere der Schleife mindestens einmal durchlaufen. Eine solche Schleife ist in Pascal die so genannte Repeat-Until-Schleife. Unser Problem mit dem Aufsummieren von Zahlen bis zur Summe 1000 könnte mit einer solchen Schleife so aussehen: | ||
{{kasten_blau|<source line start="30" highlight="6-14" lang="pascal">procedure TForm1.Button1Click(Sender: TObject); | |||
var zaehler : integer; | |||
summe : integer; | |||
begin | |||
Clear(Memo1); | |||
zaehler:=0; | |||
summe:=0; | |||
repeat | |||
zaehler:=zaehler+1; | |||
summe:=summe+zaehler; | |||
WriteTo(Memo1,zaehler); | |||
WriteTo(Memo1,':'); | |||
WriteLnTo(Memo1,summe); | |||
until summe>1000; | |||
end; | |||
</source>}} | |||
==Aufgaben== | ==Aufgaben== |
Version vom 17. Januar 2013, 17:47 Uhr
- Einführung
- Technisches
- Komponenten, Eigenschaften, Ereignisse
- Computer-Mathematik
- Verzweigungen
- Spielen mit dem Zufall
- Schleifen
- Computer-Graphik
- Geschachtelte Verzweigungen und Verzweigungen in Schleifen
- Prozeduren, Funktionen und Bibliotheken
- Felder (Arrays)
- Zeichen (Char) und Zeichenkette (String)
- Dateien
- Graphische Komponenten
Zählschleifen
Mit Hilfe von Alternativen (if-then-else) konnten wir Programme so steuern, dass bestimmte Anweisungen nur unter ganz bestimmten Bedingungen ausgeführt wurden, andernfalls nicht. Allerdings wurde die gleiche Anweisung (bei ein und demselben Knopfdruck) immer nur ein einziges Mal ausgeführt.
Bei vielen Dingen ist es jedoch sinnvoll, wenn Dinge mehrfach ausgeführt werden. Nicht umsonst heißt es: "Ein Computer ist unglaublich dumm, aber sehr sehr fleißig". So könnte eine sehr einfache Aufgabe an den Computer lauten, er solle die Zahlen von 1 bis 10 nacheinander in das Memo-Feld Memo1 schreiben. Natürlich könnten wir den Befehl writeLnTo(Memo1,1) zehn mal untereinander kopieren und dann die Zahlen zwischen den Klammern verändern. Aber das wäre sehr sehr lästige -- und schlimmer noch -- langweilige Arbeit.
Viel bequemer ist es dagegen, wenn wir dem Computer sagen:
"Es gibt eine Variable zaehler. Setze diese Variable zunächst auf 1 und zähle sie dann schrittweise auf 10 hoch. Nach jedem Zählschritt schreibe den Wert der Variable in das Memo-Feld." Genau dies tut das folgende Programm. (Es ist nur die entscheidende Prozedur vermerkt, den Rest kennst Du mittlerweile).
Auch hier können bei jedem Zählschritt auch mehrere Anweisungen ausgeführt werden; die muss man hier wieder mit begin und end zu einem Anweisungsblock gruppieren: Vorlage:Kasten blau
Schleifen mit Eingangsbedingung (while-Schleifen)
Nehmen wir an, ein (recht phantasieloser) Lehrer gäbe seinen Schüler die Stillarbeit, so viele aufeinanderfolgende Zahlen zu addieren und die Zwischenergebnisse zu notieren, bis die Summe den Wert 1000 erreicht. Schüler Fritz hat sein Netbook im Ranzen und will das Problem mit Lazarus lösen. Das Problem: Er kann jetzt natürlich auf gut Glück ungefähr raten, bis zu welcher Zahl er die Zahlen addieren muss und dies mit einer for-Schleife tun. Aber es muss doch auch eine andere Möglichkeit geben, nämlich, dass der Computer selbst merkt, wenn das Ergebnis erreicht ist. Tatsächlich gibt es diese Möglichkeit:
Man erkennt deutliche Unterschiede: Die Schleife, so heißt es in dem Programm, wird so lange wiederholt, solange die Summe noch einen Wert kleiner als 1000 hat. Das Setzen des Zählers auf 0 am Anfang und das Hochzählen in jedem einzelnen Schritt, muss der Programmierer hier selbst übernehmen (Zeilen 35 bzw. 39).
Wichtige Anmerkung: Angenommen, man würde in Zeile 36 den anfänglichen Wert der Variable summe auf 1000 setzen, so würde der Computer sozusagen gar nicht erst mit der Schleife anfangen, sondern alles zwischen while und dem end der Schleife überspringen. Denn die Schleife soll ja nur solange ausgeführt werden, solange die Bedingung summe<1000 erfüllt ist. Und das wäre sie in diesem Fall ja von Anfang an nicht. Deshalb spricht man bei der while-Schleife auch von einer Schleife mit Eingangsbedingung.
Schleifen mit Abbruchbedingung (repeat-until-Schleifen)
Anders ist es bei Schleifen mit Abbruchsbedingung. Bei denen wird das Innere der Schleife mindestens einmal durchlaufen. Eine solche Schleife ist in Pascal die so genannte Repeat-Until-Schleife. Unser Problem mit dem Aufsummieren von Zahlen bis zur Summe 1000 könnte mit einer solchen Schleife so aussehen:
Aufgaben
- Ändere das einfache Zählprogramm mit for-Schleife so ab, dass man in einem Edit-Feld angeben kann, bis zu welcher Zahl der Computer zählen soll.
- Einführung
- Technisches
- Komponenten, Eigenschaften, Ereignisse
- Computer-Mathematik
- Verzweigungen
- Spielen mit dem Zufall
- Schleifen
- Computer-Graphik
- Geschachtelte Verzweigungen und Verzweigungen in Schleifen
- Prozeduren, Funktionen und Bibliotheken
- Felder (Arrays)
- Zeichen (Char) und Zeichenkette (String)
- Dateien
- Graphische Komponenten