For-Schleife

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springenZur Suche springen
Struktogramm einer For-Schleife

VieleProgrammiersprachen definieren eineFor-Schleife als eineKontrollstruktur, mit der man eine Gruppe vonAnweisungen (Block) mit einer bestimmten Anzahl von Wiederholungen bzw. Argumenten ausführen kann.

Die Definition, wie eine For-Schleife auszusehen hat (Syntax), ist von Programmiersprache zu Programmiersprache unterschiedlich. Auch die Bedeutung einer For-Schleife (Semantik), also die Art, wie sie ausgeführt wird, ist von Sprache zu Sprache verschieden. Die Elemente, aus denen eine For-Schleife besteht, sind aber fast immer dieselben.

Inhaltsverzeichnis

Numerische Schleife

[Bearbeiten |Quelltext bearbeiten]
Monitor einesCBM 3016 mitCommodore-BASIC-Programm, das in Zeile 100PEEK und POKE in einer FOR-Schleife verwendet.

Die Anzahl der Wiederholungen steht schon beim Eintritt in dieSchleife fest. Es gibt eine Schleifenvariable, die am Anfang auf den Startwert gesetzt wird und dann jeweils um die Schrittweite verändert wird, bis der Zielwert erreicht ist. Die Schleifenvariable, der Startwert, die Schrittweite und der Endwert müssen numerisch sein. Diese Form der Schleife ist daher auch unter dem BegriffZählschleife bekannt.

In den meistenProgrammiersprachen sind Start-, Endwert und Schrittweite auf ganze Zahlen beschränkt. Bei manchen Sprachen ist die Schrittweite auf 1 (bzw. −1 mitdownto stattto) beschränkt.

Die Grundstruktur dieser For-Schleifen ist folgende (hier am BeispielBASIC):

ForZähler=StartToEndeStepn' zu' wiederholende' AnweisungenNext

Ausdrucksorientierte Schleife

[Bearbeiten |Quelltext bearbeiten]

DieausdrucksorientierteSchleife erlaubt es auch mit nicht numerischen Schleifenvariablen zu arbeiten. So können zum Beispiel auchverkettete Listen bearbeitet werden.

In C-artigenProgrammiersprachen hat eine For-Schleife die Form:

for(Initialisierung;Test;Fortsetzung)Anweisung

Und so wird sie ausgeführt (nachISO/IEC 9899:1999):

  1. Der AusdruckInitialisierung wird ausgewertet. Falls es sich dabei um eineDeklaration handelt, sind die darin definiertenVariablen nur innerhalb der For-Schleife gültig.
  2. Der AusdruckTest wird alsboolescher Ausdruck ausgewertet. Falls der Wertfalse ist, wird die For-Schleife beendet.
  3. Die AnweisungAnweisung wird ausgeführt.
  4. Der AusdruckFortsetzung (meistens eineAnweisung) wird ausgewertet.
  5. Es geht mit 2. weiter.

Beispiel für Verwendung als nichtnumerische Schleife:

structListe{structListe*next;intelement;};for(p=liste;p!=NULL;p=p->next){}

Beispiel für Verwendung als numerische Schleife:

for(i=0;i<length;i++){}

Verschachtelte For-Schleifen

[Bearbeiten |Quelltext bearbeiten]

Innerhalb einer For-Schleife können sich eine oder mehrere weitere For-Schleifen befinden. Das sind verschachtelte For-Schleifen.

Beispiele

[Bearbeiten |Quelltext bearbeiten]

DasSortierverfahrenBubblesort verwendet zwei verschachtelte For-Schleifen. In der innerenSchleife werden benachbarte Elemente vertauscht.

publicvoidBubblesort(object[]elements){for(inti=elements.Length-1;i>0;i--){for(intj=0;j<i;j++){objectelement1=elements[j];objectelement2=elements[j+1];if(element1>element2){elements[j]=element2;elements[j+1]=element1;}}}}

Die folgendeMethode berechnet dieBinomialkoeffizienten imPascalschen Dreieck und gibt einzweidimensionalesArray zurück:

publicint[][]Binomial(intn){int[][]binomials=newint[n][];binomials[0]=newint[1];binomials[0][0]=1;for(inti=1;i<n;i++){binomials[i]=newint[i+1];for(intj=0;j<=i;j++){intleft=0;if(j>0){left=binomials[i-1][j-1];}intright=0;if(j<i){right=binomials[i-1][j];}binomials[i][j]=left+right;}}returnbinomials;}

Foreach-Schleife

[Bearbeiten |Quelltext bearbeiten]

EinigeProgrammiersprachen (zum BeispielC++,C#,Java,Perl,Python,PHP,Ruby) bieten ein Konstrukt an, um einerVariable nacheinander alle Elemente einerListe zuzuweisen. Dieses Konstrukt wird entsprechend seinem üblichenSchlüsselwort meist Foreach-Schleife genannt. Je nach Programmiersprache unterscheiden sich Notation und Schlüsselwort jedoch. So wird die Foreach-Schleife inObject Pascal undJavaScript als For-In-Schleife bezeichnet. In JavaScript wird der Variable entgegen der oben genannten Beschreibung nur der Index bzw. Schlüssel zugewiesen und nicht das Element selbst, denn für letzteres gibt es die For-Of-Schleife.

C++

[Bearbeiten |Quelltext bearbeiten]

Ab der Version C++11 gibt es inC++ diebereichsbasierte For-Schleife (engl.range-based for).[1] Diese vereinfacht das Iterieren über beliebige Container und andere Objekte, für die dieFunktionenstd::begin undstd::endüberladen worden sind, z. B. alle Container derStandardbibliothek, aber auch über eingebauteArrays (C-style arrays) oder benutzerdefinierte Containerdatentypen:

#include<iostream>#include<vector>intmain(){std::vector<int>vec(5);// Initialisiere vec mit 5 Zellen// range-basierte for-Schleife über Initialisiererliste (std::initializer_list) und Zuweisung an die Vektorelementefor(autoi:{1,2,3,4,5}){vec[i-1]=i;}// range-basierte for-Schleife über Vektorfor(autoi:vec){std::cout<<i<<" ";}}

[2]

Das hierbei benutzteSchlüsselwortauto bringt denCompiler dazu, automatisch den benötigten Typ zu nutzen (wäre bei beidenSchleifenint).

C#

[Bearbeiten |Quelltext bearbeiten]

InC# hat die foreach-Schleife folgende Form:

foreach(datatypeelementinenumerable){}

Im folgenden Beispiel durchläuft die foreach-Schleife alle Länder dergenerischen Liste und gibt alle Länder aus, deren Name auf "land" endet:

// Generische Liste der LänderList<string>countries=newList<string>();// Liste füllencountries.Add("Germany");countries.Add("Austria");countries.Add("Switzerland");countries.Add("France");countries.Add("Poland");countries.Add("United States");// Die foreach-Schleife durchläuft der Reihe nach alle Elemente der Listeforeach(stringcountryincountries){if(country.EndsWith("land")){Console.WriteLine(country);}}

Ada

[Bearbeiten |Quelltext bearbeiten]

Eine Foreach-Schleife inAda hat die Form:

forVariable_1inVariable_2'RangeloopAnweisungenendloop;

Beispiel:

A:array(3..5)ofInteger:=(5,9,10);forIinA'RangeloopPut(A(I));endloop;

Perl

[Bearbeiten |Quelltext bearbeiten]

Eine For oder Foreach-Schleife (beide Schlüsselworte sind synonym inPerl) hat die Form:

foreachVariable(Werte){Anweisungen}

Beispiel:

foreach$name("Anna","Heinz","Sebastian"){print("Hallo, $name.\n");}

$name ist dieVariable, die nacheinander die Werte in den Klammern zugewiesen bekommt.

Enthält der Schleifenblock nur einen Befehl, kann auch die nachgestellte Form eingesetzt werden, welche allerdings keine selbstbenannte Laufvariable erlaubt:

say"Hallo, $_."forqw/Anna Heinz Sebastian/;

Eine Verwendung wie in C ist ebenfalls möglich:

for($i=0;$i<$length;$i++){}

PHP

[Bearbeiten |Quelltext bearbeiten]

Eine Foreach-Schleife inPHP hat die Form:

foreach(ArrayasSchluessel=>Wert){}

Schluessel undWert wird in jedem Schleifendurchlauf ein Schlüssel-Wert-Paar aus demArray zugewiesen. PHP-Arrays unterscheiden sich zu vielen anderenProgrammiersprachen dadurch, dass jeder Eintrag ein Schlüssel-Wert-Paar sein kann, nicht nur ein einfacher Wert.

Im Gegensatz zuPerl ist die Syntax nicht an der mathematischen Lesart angelehnt, so dass es komisch klingt, wenn man den Code vorliest. Das kann insbesondere bei Programmieranfängern oder Umsteigern zu Problemen führen. In den meisten anderen Programmiersprachen folgt nämlich auf das Schlüsselwortforeach der Name der Variablen, die nacheinander die verschiedenen Werte annimmt.

Beispiel:

<?php$namen=array("Albert"=>"Einstein","Rasmus"=>"Lerdorf","Stephen William"=>"Hawking");foreach($namenas$vorname=>$nachname){print("Hallo,$vorname$nachname\n");}?>

Historisches: Die Für-Schleife von „Superplan“

[Bearbeiten |Quelltext bearbeiten]

Heinz Rutishauser entwickelte von 1949 bis 1951 die einfache algebraische Programmiersprache „Superplan“. Rutishauser kannteKonrad Zuses Arbeit über Programmiersprachen, d. h. ZusesPlankalkül und wählte den Namen in Anlehnung an Zuses Bezeichnung „Rechenplan“ für ein einzelnes Programm.
Rutishausers einfache Sprache hatte nur eine Kontrollstruktur: dieFür-Anweisung bzw.Für-Schleife.

Für i=2(1)n:ai{\displaystyle a_{i}} + 3 =ai{\displaystyle a_{i}}

bedeutet z. B., dass in einem Array a zu allen (d. h. es wird mit derSchrittweite 1 weitergezählt) Elementen von IndexStartwert 2 ausgehend bis zu IndexZielwert n eine 3 hinzuaddiert wird.

Siehe auch

[Bearbeiten |Quelltext bearbeiten]

Weblinks

[Bearbeiten |Quelltext bearbeiten]

Einzelnachweise

[Bearbeiten |Quelltext bearbeiten]
  1. research.att.com (Memento vom 11. Mai 2011 imInternet Archive)
  2. cppreference.com Initialisiererlisten
Abgerufen von „https://de.wikipedia.org/w/index.php?title=For-Schleife&oldid=242146825
Kategorie: