Wiederholung mit Laufvariable: Unterschied zwischen den Versionen
Sn (Diskussion | Beiträge) (→Java: classic for) |
Sn (Diskussion | Beiträge) |
||
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Eine [[Wiederholung mit Laufvariable]] ist eine nützliche [[Kontrollstruktur]] beim Programmieren. | Eine [[Wiederholung mit Laufvariable]] ist eine nützliche [[Kontrollstruktur]] beim Programmieren. | ||
Hierbei wird eine [[Anweisung]] oder eine [[Sequenz]] von Anweisungen wiederholt ausgeführt, wobei mit jedem Durchgang eine so genannte [[Laufvariable]] verändert wird. Auf den Wert der [[Variable]]n können die Anweisungen in der Wiederholung zugreifen. | Hierbei wird eine [[Anweisung]] oder eine [[Sequenz]] von Anweisungen wiederholt ausgeführt, wobei mit jedem Durchgang eine so genannte [[Laufvariable]] verändert wird. Auf den Wert der [[Variable (Informatik)|Variable]]n können die Anweisungen in der Wiederholung zugreifen. | ||
Es gibt zwei Arten von Wiederholungen mit Laufvariablen: solche, bei denen die Variable nach einem festen Muster hochgezählt wird, und solche, die eine [[Datenstruktur]] wie eine Liste oder ein Wörterbuch Element für Element durchgehen. | Es gibt zwei Arten von Wiederholungen mit Laufvariablen: solche, bei denen die Variable nach einem festen Muster hochgezählt wird, und solche, die eine [[Datenstruktur]] wie eine Liste oder ein Wörterbuch Element für Element durchgehen. | ||
Zeile 15: | Zeile 15: | ||
endfor | endfor | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Die Variable <code>x</code> nimmt hier nacheinander die Werte 1, 3, 5 und 7 an. | Die Variable <code>x</code> nimmt hier nacheinander die Werte 1, 3, 5 und 7 an. <code>summe</code> wird ebenfalls mit jedem Durchlauf erhöht und nimmt die Werte 1, 4, 9 und schließlich 16 an. | ||
==Visuelle Programmierung== | ==Visuelle Programmierung== | ||
Zeile 23: | Zeile 22: | ||
===AppInventor=== | ===AppInventor=== | ||
[[Datei:Blockly Wiederholung mit Laufvariablen.png| | [[Datei:Blockly Wiederholung mit Laufvariablen.png|thumb|rechts|Dieser Block zählt eine Variable namens <code>Zahl</code> von <code>1</code> bis <code>5</code> hoch. ]] | ||
Im [[AppInventor]] gibt es in der Kategorie ''Steuerung'' den Block ''"Für jede <code>Zahl</code> von ... bis ... um ... mache ..."''. Die Laufvariable <code>Zahl</code> kann dabei im Rumpf der Wiederholung - und nur dort - verwendet werden. Als Start- und Endwert sowie Schrittweite können beliebige [[Ausdruck|Ausdrücke]] angehängt werden. | Im [[AppInventor]] gibt es in der Kategorie ''Steuerung'' den Block ''"Für jede <code>Zahl</code> von ... bis ... um ... mache ..."''. Die Laufvariable <code>Zahl</code> kann dabei im Rumpf der Wiederholung - und nur dort - verwendet werden. Als Start- und Endwert sowie Schrittweite können beliebige [[Ausdruck|Ausdrücke]] angehängt werden. | ||
{{Tipp|Die Laufvariable kannst (und solltest) du umbenennen, damit dein Programm leichter lesbar ist.}} | |||
===NEPO=== | ===NEPO=== | ||
[[Datei:NEPO Wiederholung mit Laufvariable.svg|thumb|rechts|Dieser Block zählt eine Variable namens <code>i</code> von <code>0</code> bis <code>5</code> hoch]] | |||
In [[NEPO]] sehen die entsprechenden Blöcke so ähnlich aus wie im AppInventor. Sie befinden sich in der Kategorie ''Kontrolle''. | In [[NEPO]] sehen die entsprechenden Blöcke so ähnlich aus wie im AppInventor. Sie befinden sich in der Kategorie ''Kontrolle''. | ||
==Textuelle Programmierung == | ==Textuelle Programmierung == | ||
Zeile 44: | Zeile 44: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===Java === | ===Java, C, JavaScript usw.=== | ||
In | In den "Curly-Bracket-Sprachen" kann eine Wiederholung mit Laufvariable auf beide Arten implementiert werden. | ||
;Option 1: Es wird eine Variable angegeben, eine Abbruchbedingung und eine Anweisung, diese Variable hochzuzählen: <syntaxhighlight lang="java" line="1"> | ;Option 1:Es wird eine Variable angegeben, eine Abbruchbedingung und eine Anweisung, diese Variable hochzuzählen. Diese drei Dinge stehen hinter dem Schlüsselwort <code>for</code> in runden Klammern, getrennt mit Semikola. In Java oder C sieht das etwa so aus: <syntaxhighlight lang="java" line="1"> | ||
for (int i = 1; i <= 10; i = i + 1) { | for (int i = 1; i <= 10; i = i + 1) { | ||
// do stuff... | |||
} | } | ||
Zeile 56: | Zeile 56: | ||
int i = 1; | int i = 1; | ||
while (i <= 10) { | while (i <= 10) { | ||
// do stuff... | |||
i = i + 1; | i = i + 1; | ||
} | } | ||
</syntaxhighlight>Im Unterschied zum AppInventor-Block hat man hier wesentlich mehr Freiheit, weil die Bedingung und die Anweisung zum Hochzählen völlig frei formuliert werden können. | </syntaxhighlight>Im Unterschied zum AppInventor-Block hat man hier wesentlich mehr Freiheit, weil die Bedingung und die Anweisung zum Hochzählen völlig frei formuliert werden können. | ||
: | |||
:Einfache [[bedingte Wiederholung]]en können sogar mit einem leeren <code>for</code> implementiert werden. Als Beispiel ist hier das [[Heron-Verfahren]] mit einer leeren <code>for</code>-Wiederholung in Java implementiert: <syntaxhighlight lang="java" line> | |||
public void root(double x, double y) { | |||
double z; | |||
for (z = x/2; z*z - x > y; z = (z + x/z) / 2); | |||
return z; | |||
}</syntaxhighlight> | |||
;Option 2:Es wird eine Datenstruktur angegeben, durch die iteriert wird. Hier steht hinter dem Schlüsselwort <code>for</code> in runden Klammern zunächst der [[Datentyp]] und Name der Laufvariablen und dann die Datenstruktur, über die iteriert werden soll. In Java und C++<ref>In C++ existiert die Syntax mit Doppelpunkt erst seit 2011</ref> steht dazwischen ein Doppelpunkt: <syntaxhighlight lang="java" line> | |||
ArrayList<String> names = new ArrayList<String>(); | |||
names.add("Jan"); | |||
names.add("Hein"); | |||
names.add("Klaas"); | |||
names.add("Pit"); | |||
for (String name : names) { | |||
System.out.print(name + ", "); | |||
} | } | ||
System.out.println("die haben Bärte, die fahren mit"); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
: In JavaScript wird das Schlüsselwort <code>of</code> bei [[Array]]s bzw. <code>in</code> bei [[Objekt (Informatik)|Objekt]]en verwendet: <syntaxhighlight lang="javascript" line> | |||
for (link of document.getElementsByTagName("a")) { | |||
link.classList = "external"; | |||
}</syntaxhighlight> | |||
: {{Achtung|In C♯ steht das Schlüsselwort <code>in</code> für die Iteration durch ein Array. Das <code>in</code> von C♯ entspricht also dem <code>of</code> von JavaScript!}} | |||
== Weblinks == | == Weblinks == | ||
* {{Hinweis Tutorial|Programmieren_mit_Python/Kontrollstrukturen#Wiederholungen_%C3%BCber_eine_Datenstruktur_(for)}} | |||
* {{W3Schools|java/java_for_loop.asp|<code>for</code>-Wiederholungen in Java}} | |||
* {{W3Schools|python/python_for_loops.asp|<code>for</code>-Wiederholungen in Python}} | |||
* [https://www.python-lernen.de/while-schleife.htm <nowiki>"While-Schleifen" [sic!] auf python-lernen.de </nowiki>{{Flagge|DE}}] | * [https://www.python-lernen.de/while-schleife.htm <nowiki>"While-Schleifen" [sic!] auf python-lernen.de </nowiki>{{Flagge|DE}}] | ||
{{Navigationsleiste Bestandteile von Algorithmen}} | {{Navigationsleiste Bestandteile von Algorithmen}} | ||
[[Kategorie:Programmierung]] | [[Kategorie:Programmierung]] | ||
[[Kategorie:Algorithmen]] | [[Kategorie:Algorithmen]] |
Aktuelle Version vom 7. Juni 2024, 22:20 Uhr
Eine Wiederholung mit Laufvariable ist eine nützliche Kontrollstruktur beim Programmieren. Hierbei wird eine Anweisung oder eine Sequenz von Anweisungen wiederholt ausgeführt, wobei mit jedem Durchgang eine so genannte Laufvariable verändert wird. Auf den Wert der Variablen können die Anweisungen in der Wiederholung zugreifen.
Es gibt zwei Arten von Wiederholungen mit Laufvariablen: solche, bei denen die Variable nach einem festen Muster hochgezählt wird, und solche, die eine Datenstruktur wie eine Liste oder ein Wörterbuch Element für Element durchgehen.
Beschreibungen von Algorithmen
In Programmablaufplänen gibt es kein explizites Syntaxelement, um Wiederholungen mit Laufvariablen darzustellen. Diese können aber mit geringem Aufwand als Bedingte Wiederholungen modelliert werden.
Im Pseudocode werden die Schlüsselwörter for
, from
, to
, step
, do
und endfor
verwendet, um die Wiederholung mit Laufvariable umzusetzen.
summe := 0
for x from 1 to 7 step 2 do
summe := summe + x
endfor
Die Variable x
nimmt hier nacheinander die Werte 1, 3, 5 und 7 an. summe
wird ebenfalls mit jedem Durchlauf erhöht und nimmt die Werte 1, 4, 9 und schließlich 16 an.
Visuelle Programmierung
In Scratch gibt es keine Wiederholung mit Laufvariable. Diese Kontrollstruktur muss hier anders umgesetzt werden, etwa mit einer Wiederholung mit fester Anzahl.
AppInventor
Im AppInventor gibt es in der Kategorie Steuerung den Block "Für jede Zahl
von ... bis ... um ... mache ...". Die Laufvariable Zahl
kann dabei im Rumpf der Wiederholung - und nur dort - verwendet werden. Als Start- und Endwert sowie Schrittweite können beliebige Ausdrücke angehängt werden.
Die Laufvariable kannst (und solltest) du umbenennen, damit dein Programm leichter lesbar ist.
NEPO
In NEPO sehen die entsprechenden Blöcke so ähnlich aus wie im AppInventor. Sie befinden sich in der Kategorie Kontrolle.
Textuelle Programmierung
Python
In Python wird das Schlüsselwort for x in y
benutzt, um bedingte Wiederholungen umzusetzen. x ist die Laufvariable und y muss eine Datenstruktur sein, durch die iteriert werden kann, z.B. eine Liste, ein String oder eine Range.
wort = "INFORMATIK"
for buchstabe in wort:
print("Gebt mir ein " + buchstabe + "!")
print(buchstabe + "!!!"
print("Was ist das?!")
print(wort + "!!!")
Java, C, JavaScript usw.
In den "Curly-Bracket-Sprachen" kann eine Wiederholung mit Laufvariable auf beide Arten implementiert werden.
- Option 1
- Es wird eine Variable angegeben, eine Abbruchbedingung und eine Anweisung, diese Variable hochzuzählen. Diese drei Dinge stehen hinter dem Schlüsselwort
for
in runden Klammern, getrennt mit Semikola. In Java oder C sieht das etwa so aus:Im Unterschied zum AppInventor-Block hat man hier wesentlich mehr Freiheit, weil die Bedingung und die Anweisung zum Hochzählen völlig frei formuliert werden können.for (int i = 1; i <= 10; i = i + 1) { // do stuff... } // Dasselbe mit einer while-Wiederholung: int i = 1; while (i <= 10) { // do stuff... i = i + 1; }
- Einfache bedingte Wiederholungen können sogar mit einem leeren
for
implementiert werden. Als Beispiel ist hier das Heron-Verfahren mit einer leerenfor
-Wiederholung in Java implementiert:public void root(double x, double y) { double z; for (z = x/2; z*z - x > y; z = (z + x/z) / 2); return z; }
- Option 2
- Es wird eine Datenstruktur angegeben, durch die iteriert wird. Hier steht hinter dem Schlüsselwort
for
in runden Klammern zunächst der Datentyp und Name der Laufvariablen und dann die Datenstruktur, über die iteriert werden soll. In Java und C++[1] steht dazwischen ein Doppelpunkt:ArrayList<String> names = new ArrayList<String>(); names.add("Jan"); names.add("Hein"); names.add("Klaas"); names.add("Pit"); for (String name : names) { System.out.print(name + ", "); } System.out.println("die haben Bärte, die fahren mit");
- In JavaScript wird das Schlüsselwort
of
bei Arrays bzw.in
bei Objekten verwendet:for (link of document.getElementsByTagName("a")) { link.classList = "external"; }
In C♯ steht das Schlüsselwort in
für die Iteration durch ein Array. Das in
von C♯ entspricht also dem of
von JavaScript!
Weblinks
- Tutorial zu diesem Thema
- "
for
-Wiederholungen in Java" auf w3schools.com 🇬🇧 - "
for
-Wiederholungen in Python" auf w3schools.com 🇬🇧 - "While-Schleifen" [sic!] auf python-lernen.de 🇩🇪
- ↑ In C++ existiert die Syntax mit Doppelpunkt erst seit 2011