Schleifen
-
Hallo,
Ich habe vor einiger Zeit angefangen mich mit dem Programmieren zu beschäfftigen. Was ich aber nicht verstehe sind die Schleifen. Bei denen hänge ich schon eine ganze weile. Bis jetzt habe ich kein Tutorial gefunden das mir die Schleifen verständlich macht.
Kann einer von euch mir das mal erklären?
Danke schon mal im voraus.
THEvisitor
-
Was genau verstehst denn nicht?
Schleifen sind dazu da, um bestimmten Code mehrfach zu durchlaufen.MfG
-
Hi
In C/C++ gibts 2 schleifen.
1. for Scheifen.
Die werden sooft man will durchlaufen.for( int i = 0; i < 10; i++ ) { cout << "For Schleife" << endl; }
Heisst soviel->
Erst wird eine Variable "i" als Integer (Zahl) im speicher erstellt mit dem Wert "0" (int i = 0;). Dann wird die Auflösbedingung festgelegt ( i < 10 ;), solang i kleiner als 10 ist führe den Code in der Schleife aus ( cout << "For Schleife" << endl; ). Und das letzte ( i++ ) erhöhe bei jedem Durchlauf i um 1 ( i = i + 1 ).2. while Schleifen
Haben eine Abbruchbedingung.while ( ende ) { ..... }
Führt die schleife solange aus bis die Variable "ende" Wahr ist.
ps: Alle angaben ohne Gewähr. Sehe mich selbst auch noch als Anfänger.
Naja hoffe hilft dir bisssel.
Such wen nicht hilft in Google nach "C++ Schleife" oder "C++ for schleife" oder "C++ Tutorial Schleife"
Also eins glaub ich nicht! Das du in Google nix gefunden hast, in jedem Tutorial stehen Schleifen.
mfg isi
-
isiprimax schrieb:
Hi
In C/C++ gibts 2 schleifen.
Fast - die do-while() Schleife hast du unterschlagen:
do { ... }while(ende);
(die funktioniert fast wie die while-Schleife, allerdings wird die Abbruchbedingung erst am Ende des Schleifendurchlaufs ausgewertet - d.h. selbst wenn die Bedingung schon vorher erfüllt war, läuft sie mindestens einmal durch)
isiprimax schrieb:
2. while Schleifen
Haben eine Abbruchbedingung.while ( ende ) { ..... }
Führt die schleife solange aus bis die Variable "ende" Wahr ist.
Genau umgekehrt - die Schleife wird fortgesetzt, wenn 'ende' wahr ist.
PS: Und die for()-Schleife ist nicht nur zum einfach Zählen (führe die Anweisungen n mal aus) geeignet - du kannst als Aktualisierungsbedingung alles eintragen, was du willst. Technisch ist
for( Init ; Bed ; Update )Rumpf;
(fast) äquivalent zuInit; while( Bed ) { Rumpf; Update; }
-
FOR-Schleife (auch Zählschleife):
for erwartet 3 (optionale, sprich nicht zwingend benötigte) Anweisungen die durch ein Semikolon (;) voneinander getrennt werden.
Beispiel:for( int x = 1; x < 10; x++ ) { // mach was }
die erste Anweisung ( int x = 1 ) wird ausgeführt, wenn das Programm an die Schleife kommt (und auch nur dann). Eignet sich ideal z.B. zur Variablendeklaration.
die zweite Anweisung ( x < 10 ) ist die Bedingung, unter der die Schleife durchlaufen wird. Solange diese Bedingung "wahr" (true) ausgibt, läuft die Schleife weiter. Ist sie von Anfang an falsch (false), wird die Schleife garnicht erst ausgeführt. Die Bedingung wird nach jedem Schleifendurchlauf erneut geprüft.
Danach wird das Programm hinter der abschließenden geschweiften Klammer ausgeführt ( } )die dritte Anweisung ( x++ )wird nach jedem Schleifendurchlauf (und vor der Überprüfung der zweiten Anweisung) ausgeführt.
Wie gesagt sind alle drei Anweisungen optional
also auch die Schleifefor( ; ; ; ) { }
ist eine gültige Anweisung... Kann aber in einer Endlosschleife enden, wenn man nicht selber dafür sorgt, dass die Schleife beendet wird
manuell unterbrechen kann man die Schleife mittels
break;
. Nach Möglichkeit sollte man die Abbruchbedingungen aber als zweite Anweisung angeben. Dadurch bleibt die Schleife und deren Bedingungen übersichtlicher.
Die FOR-Schleife eignet sich gut, wenn man Anweisungen eine bestimmte Anzahl oft ausführen will
WHILE-Schleife (Kopfgesteuerte Schleife):
erwartet lediglich eine Anweisung (die Bedingung). Die Schleife wird solange ausgeführt, wie diese Anweisung "wahr" (true) zurückliefert. Ansonsten wird das Programm wie oben nach der Schleife fortgeführt.
Beispiel:while( x == 1 ) { //mache irgenwas }
Diese Schleife wird oft dazu verwendet, wenn man einen Programmteil solange ausführen will, bis eine bestimmte Bedingung nicht mehr zutrifft, z.B. ein Datenbank-Result keine zu verarbeitenden Werte mehr enthält. In diesem Fall müsste man x nur auf != 1 setzen und die Schleife wird verlassen.
DO-WHILE-Schleife (Fussgesteuerte Schleife):
ähnlich wie die whileschleife, allerdings wird die Bedingung vor dem ersten Schleifendurchlauf nicht geprüft (sondern erst nach dem ersten Durchlauf). Ddas sorgt dafür, dass die Schleife in jedem Fall mindestens einmal durchlaufen wird.
Beispiel:do { //mache was } while ( x == 1 );
Hier wird die Schleife erst beendet, wenn x != 1 ist.
Wird z.B. verwendet, um das Programm solange auszuführen, bis der User das Programm verlassen will....
Ich hoffe, das war einigermaßen verständlich
-
Hi,
Da werde ich jetzt mal Krümel kacken
Er will es ja sicherlich richtig lernen:
Den Begriff "For-Schleife" gibt es nicht. Es heißt richtigerweise "Zählschleife".
Den Begriff "While-Schleife" gibt es auch nicht. Es heißt richtigerweise entweder "kopfgesteuerte Schleife" oder "fußgesteuerte Schleife".
In diesem Sinne: Happy Coding
-
Das ist doch eine reine Definitionsfrage wie man das nennt. Im Standard heißen die Dinger nur Statement. Also while-statement, for-statement etc. Zusammengefasst sind sie unter der Bezeichnung iteration statements
Den Begriff Zählschleife für for halte ich sogar für falsch, da for doch mehr kann als nur zählen.
-
so hab ich das nach irgendeiner DIN-Norm gelernt
-
Hi,
Danke an euch alle, ich habe das jetzt endlich verstanden.
-
Angesichts der Tatsache, dass im C++-FAQ noch nix über Schleifen steht und hier einige sehr gute Erklärungen sind, wie wärs? *zu-CStoll-rüberschiel*
-
Ehm aber auch einiges falsches ...
Kommentare zu zwutz
for erwartet 3 (optionale, sprich nicht zwingend benötigte) Anweisungen die durch ein Semikolon (;) voneinander getrennt werden.
So nicht direkt richtig. Die Anweisungen können leer sein, müssen aber doch vorhanden sein.
Danach wird das Programm hinter der abschließenden geschweiften Klammer ausgeführt ( } )
Man braucht keine "{" und "}". Mir fällt gerade der Begriff dafür nicht ein, aber bsw. folgendes ist ebenfalls korrekt:
for (std::size_t i(0); i < 10; ++i) if (i % 10) foo(); else bar();
...
for( ; ; ; ) {}
Na wenn du schon diese unschöne Schleife demonstrierst:
for(;;);
wäre korrekt. Du hast ein Semikolon zu viel eingebracht ...
manuell unterbrechen kann man die Schleife mittels
break;
Nach Möglichkeit sollte man die Abbruchbedingungen aber als zweite Anweisung angeben. Dadurch bleibt die Schleife und deren Bedingungen übersichtlicher.
Das zweite sagen wir mal so ist Geschmacksache. Allerdings ist es auch mein Empfinden.
Evtl. solltest du aber auch noch
continue;
erwähnen. Damit wird der Rest der Anweisung überprungen und wieder der Anweisungsteil der Schleife ausgeführt.
[/cpp]for (std::size_t i(0); i < 10; ++i)
{
if (i % 2 == 0) continue;
std::cout << i << std::endl;
}[/cpp] ...Dann kann man natürlich auch bei einer while-Schleife eine Endlosschleife konstruieren:
while(true);
...
Anfügung zu CStoll
Technisch ist for( Init ; Bed ; Update )Rumpf; (fast) äquivalent zu
Zu beachten ist dabei, das Variablen die in Init deklariert wurden, nur in der Schleife gelten und danach nicht mehr existieren. Ihr Scope ist da beendet. Wichtig! Microsoft Visual C++ 6 beachtet genau dies Regel nicht!
-
zwutz schrieb:
...Kopfgesteuerte Schleife...
Fussgesteuerte Schleife...Bin ich eigentlich der Einzige, dem diese Ausdrücke merkwürdig vorkommen ?
Gruß,
Simon2.
-
Simon2 schrieb:
zwutz schrieb:
...Kopfgesteuerte Schleife...
Fussgesteuerte Schleife...Bin ich eigentlich der Einzige, dem diese Ausdrücke merkwürdig vorkommen ?
Gruß,
Simon2.
Besser als Schwanzgesteuert :p - im Ernst, wenn solche Unmöglichkeiten wie 'Seiteneffekte' normaler Sprachgebrauch sind, sind diese Schleifenbezeichnungen doch recht harmlos.
-
hi (D)Evil
hast natürlich recht... hab in der Eile ein paar Fehler untergejubelt... gut aufgepasst *hust* ^^
und ja, ich weiß, dass man schleifen auch ohne geschweifte Klammern definieren kann... allerdings verschließe ich mich aus Prinzip vor dieser Möglichkeit.
-
camper schrieb:
Simon2 schrieb:
zwutz schrieb:
...Kopfgesteuerte Schleife...
Fussgesteuerte Schleife...Bin ich eigentlich der Einzige, dem diese Ausdrücke merkwürdig vorkommen ?
Gruß,
Simon2.
Besser als Schwanzgesteuert :p ...
Da hast Du allerdings Recht !
Gruß,
Simon2.
-
(D)Evil schrieb:
Danach wird das Programm hinter der abschließenden geschweiften Klammer ausgeführt ( } )
Man braucht keine "{" und "}". Mir fällt gerade der Begriff dafür nicht ein, aber bsw. folgendes ist ebenfalls korrekt:
for (std::size_t i(0); i < 10; ++i) if (i % 10) foo(); else bar();
...
Meinst du "Compund statement"? Eigentlich ist die Variante ohne Klammern die (wie drücke ich das aus?) direktere - der Schleifenrumpf besteht aus genau einer Anweisung. Wenn man mehrere Sachen in der Schleife ausführen will, fasst man diese zu einem Compound Statement zusammen, daher bekommt man dann die geschweiften Klammern.
Anfügung zu CStoll
Technisch ist for( Init ; Bed ; Update )Rumpf; (fast) äquivalent zu
Zu beachten ist dabei, das Variablen die in Init deklariert wurden, nur in der Schleife gelten und danach nicht mehr existieren. Ihr Scope ist da beendet. Wichtig! Microsoft Visual C++ 6 beachtet genau dies Regel nicht!
Ja, das ist einer der zwei Gründe, warum ich dort oben "fast" geschrieben habe. Der zweite Unterschied ist das Ziel für
continue;
.