Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

4 Schleifen

4 Schleifen

Ein weiteres wichtiges Werkzeug für die Programmierung sind die Schleifen. C++ stellt hierfür drei verschiedene zur Verfügung, die nachstehend erklärt werden. Prinzipiell würde man in C++ nur mit der for Schleife auskommen, aber aus Gründen der Übersichtlichkeit und des Verständnisses, werden von Fall zu Fall andere benutzt.

Zum Seitenanfang
Zum Inhaltsverzeichnis

4.2 Die Kopf gesteuerte abweisende while Schleife

4.2 Die Kopf gesteuerte abweisende while Schleife

Bei dieser Schleife wird, noch bevor die Schleife betreten, wird geprüft, ob die Bedingung zutrifft. Ist dem nicht so, wird die Schleife übersprungen. Diese Schleife wird oft benutzt, wenn noch nicht absehbar ist, wie viele Durchläufe benötigt werden.

Das Schema lautet: while ([<Bedingungen>]} [<Anweisung>]

Strukturgramm einer while Schleife

Den PAP spare ich mir an dieser Stelle, weil er genauso aussieht, wie bei der for Schleife, aber ein kleines Beispiel wird wieder folgen, in welchem ich durch den Anwender eine Zahl einlesen lasse und dann so lange zurück zähle, bis 0 erreicht wird. Da hier also zur Entwurfszeit nicht fest steht, wie oft die Schleife durchlaufen werden muss, nimmt man besser eine while Schleife. Aber wie gesagt, man bekommt das auch mit einer for Schleife hin.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
					
int iAnzahl;

printf("Bitte eine Zahl eingeben: ");
scanf("%i", &iAnzahl);

// Solange, bis die Zahl 0 ist
while (iAnzahl >= 0) {
	printf("%i\n", iAnzahl--);
} // end of while

printf("ENDE");
					

Ausgabe:

Bitte eine Zahl eingeben: 0
ENDE
		

oder

Bitte eine Zahl eingeben: 5
5
4
3
2
1
0
ENDE
		
Zum Seitenanfang
Zum Inhaltsverzeichnis

4.4 Übungen III

4.4 Übungen III

  1. Lassen Sie alle Zahlen zwischen 1 und 100 mit einer for Schleife ausgeben.
  2. Lassen Sie vom Benutzer zwei positive Ganzzahlen eingeben und berechnen Sie die eine hoch die andere. Benutzen Sie wieder die for Schleife.
  3. Geben Sie das kleine ein mal eins aus. Benutzen Sie dazu zwei ineinander geschachtelte for Schleifen. Achten Sie zudem darauf, dass nach Jeder Reihe ein Zeilenumbruch gemacht wird (zehn Zeilen entstehen mit je zehn Werten).
  4. Ändern Sie Aufgabe 3 so ab, dass die Berechnungen deren Ergebnis kleiner 10 ist, um jeweils ein Zeichen eingerückt werden, so dass es keine Verschiebung in der Tabelle gibt und die Einerstellen unter den Einerstellen stehen. Versuchen Sie dies in zwei verschiedenen Varianten zu lösen.
  5. Lassen Sie vom Benutzer eine positive Ganzzahl eingeben und geben Sie dann von dieser Zahl aus, alle Zahlen bis zur 1 aus. Benutzen Sie eine kopfgesteuerte While-Schleife.
  6. Lassen Sie so lange vom Benutzer ein Zeichen eingeben, bis er "j" oder "J" gedrückt hat. Fordern Sie den Benutzer immer wieder zu dieser Eingabe auf und benutzen Sie die fußgesteuerte do while Schleife.
  7. Berechnen Sie π mit der Formel Formel für die Berechnung von PI Testen Sie selbst aus, wie große der Bereich gewählt werden muss, damit das Annäherungsverfahren auf sechs Stellen genau ist. Kommen Sie aber nicht auf die Idee, -1 hoch irgendwas zu rechnen. Das geht auch anders, wenn man sich überlegt, was passieren soll. Zur Kontrolle, π lautet 3,141592.
Zum Seitenanfang
Zum Inhaltsverzeichnis

4.3 Die fußgesteuerte nicht abweisende do while Schleife

4.3 Die fußgesteuerte nicht abweisende do while Schleife

Sie funktioniert so ähnlich wie die einfache while-Schleife, nur dass sie auf jeden Fall einmal durchlaufen wird, weil die Prüfung am Ende steht. Dies wird oftmals benutzt, um etwas so lange zu machen, wie etwas nicht stimmt (z.B. eine Eingabe).

Das Schema lautet: do [<Anweisung>] while ([<Bedingungen>]);

Strukturgramm einer do while Schleife

PAP einer do while Schleife

Im Strukturgramm sieht man wieder schön, dass erst etwas gemacht wird, und dann erst eine Prüfung statt findet. Auch hier gibt es wieder eine vereinfachte grafische Darstellung.

Im nachfolgenden Beispiel wird der Anwender so lange aufgefordert ein j einzugeben, bis er dies tut. Dieses Beispiel lässt sich gut für Hauptmenüs verwenden.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
					
char cZeichen;

do {	// Solange bis "j" eingegeben wurde
	printf("Geben Sie j ein um das Programm zu beenden: ");

	fflush(stdin);
	scanf("%c", &cZeichen);
} while (cZeichen != 'j');

printf("Auf Wiedersehen!");
					

Ausgabe:

Geben Sie j ein um das Programm zu beenden: k
Geben Sie j ein um das Programm zu beenden: 15
Geben Sie j ein um das Programm zu beenden: ja
Geben Sie j ein um das Programm zu beenden: j
Auf Wiedersehen!
		
Zum Seitenanfang
Zum Inhaltsverzeichnis

4.1 Die kopfgesteuerte Zählschleife for

4.1 Die kopfgesteuerte Zählschleife for

Wie bereits erwähnt, kann man mit dieser Schleife jeden Anwendungsfall abdecken, bei dem man eine Schleife benötigt, aber wie der Name schon sagt, benutzt man diese Hauptsächlich zum Ab - / Durchzählen von abzählbaren Mengen.

Das Schema lautet: for ([<Anweisung>]; [<Bedingungen>]; [<Anweisung>]) [<Anweisung>]

Strukturgramm einer for Schleife

Vollständiger und gekürzter PAP einer for Schleife

Gerade im PAP sieht man sehr schön, dass hier ein ganzer Block von Befehlen immer und immer wieder ausgeführt wird, bis eine bestimmte Bedingung nicht mehr gültig ist (weil z.B. der ab zuzählende Bereich durchlaufen ist). Rechts daneben sehen Sie eine andere gekürzte Form, wie man solche Schleifen grafisch darstellen kann.

Nachfolgend nun noch ein kleines Beispiel für eine for Schleife.

 1
 2
 3
 4
					
// Gebe alle geraden Zahlen zwischen 1 bis 10 aus
for (int iCounter = 2; iCounter <= 10; iCounter = iCounter + 2) {
	printf("%i ", iCounter);
} // end of for
					

Ausgabe:

2 4 6 8 10
		

Als erstes wird nachgesehen, ob im ersten Teil des Schleifenkopfes etwas steht und wenn dem so ist, wird diese Anweisung ausgeführt. Üblicherweise definiert man sich hier eine Zählvariable und initialisiert sie. Als nächstes wird die Schleifenbedingung geprüft und nur wenn diese Bedingung wahr ist, wird der Schleifenkörper ausgeführt. Wenn die Bedingung von vornherein nicht gültig ist, wird die Schleife komplett übersprungen. Nachdem der Schleifenkörper ausgeführt wurde, wird der dritte Teil des Schleifenkopfes ausgeführt. In dieser Anweisung zählt man üblicherweise die Zählvariable hoch bzw. herunter. Anschließend wird erneut die Schleifenbedingung geprüft und falls sie immer noch einen wahren Ausdruck liefert, wird erneut der Schleifenkörper ausgeführt usw.

Mit dem Befehl "continue" kann man den Rest des Schleifenkörpers überspringen und somit gleich den ggf. nächsten Durchlauf anstoßen. Dies macht z.B. dann Sinn, wenn der Schleifenkörper nur ausgeführt werden soll, wenn eine Randbedingung zutrifft. Sicher kann man auch um den entsprechenden Quelltext eine if Anweisung herum bauen, aber somit würde der Inhalt weiter eingerückt, was die Lesbarkeit evtl. beeinträchtigen könnte. Somit ist "continue" also ein rein stilistisches Mittel.

Außerdem gibt es noch den Befehl "break". Wie Sie sich vielleicht denken können, kann man mit ihm, vorzeitig die Schleife verlassen. Normalerweise kann man auch auf das "break" verzichten, da man nur seine Schleifenbedienung entsprechen anpassen kann, aber es gibt trotzdem Fälle, in welchen man auf diese Anweisung nicht verzichten kann. Angenommen es sollen in einer Schleife mehrere Personenangaben in eine Datei geschrieben werden und mitten drin steigt die Festplatte aus, was zur Folge hat, dass die Datei nicht länger beschrieben werden kann (ist nicht ganz richtig, da hier der Cache und der RAM eine Rolle spielen, aber es geht auch mehr ums Prinzip). Somit ist es nicht weiter sinnvoll, auch noch die restlichen Angaben einer Person schreiben zu wollen und die anderen noch anstehenden Schleifendurchläufe wären auch hinfällig. Hier macht ein vorzeitiges Beenden Sinn.

Sie merken, dass ich auch hier ein wenig ins rudern gerate, weil sowohl "continue" und "break" innerhalb von schleifen selten benutzt werden und somit ist es schwierig, ein passendes Beispiel zur Veranschaulichung zu finden.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012