You are not logged in.

  • Login

1

Monday, June 13th 2011, 10:20am

Wann welche Schleife

Hi Leute

In C++ gibt es ja verschiedene Schleifen.
Jetzt würde ich gerne wissen, wann man am besten welche Schleife benutzen soll.



mfg
sky-guy

2

Monday, June 13th 2011, 10:52am

Grundsätzlich kann man es so erklären:

While <- Wenn die Schleife nicht UNBEDINGT durchlaufen werden muss

Do - While <- Wenn die Schleife MINDESTENS 1 mal durchlaufen werden muss

For <- Wenn die Schleife eine bestimmte anzahl durchlaufen soll

3

Monday, June 13th 2011, 1:51pm

OK danke

4

Monday, June 13th 2011, 3:21pm

Ich kenne es noch so, dass man while wählt, wenn man nicht genau weiß, wie oft die Schleife durchlaufen wird und for, wenn eben diese Anzahl bekannt ist.

5

Monday, June 13th 2011, 3:53pm

AM besten einfach ausprobieren, mit der erfahrung denkt man gar nicht mehr darüber nach was man braucht, das weiß man dann einfach

6

Monday, June 13th 2011, 5:50pm

Ja eigentlich muss man es sich nur einmal verinnerlichen und da ist pocky's Übersicht genau richtig. So habe ich es damals auch gelernt :)

Mlade

Unregistered

7

Wednesday, June 22nd 2011, 8:24pm

Hmm mal eine Frage dazu, woher weiß man denn, wann welche schleife benötigt wird?
Ich bin auch noch ziemlich am Anfang und habe dort for und while gehabt.
Allerdings könnte ich jetzt nicht sagen, wann man welche benötigt.

Was füe in programm gibt es den wo man eine
for benötigt und bei welchen programm eine while?

So mal als vergleich für mich.

8

Wednesday, June 22nd 2011, 8:35pm

Das wurde hier doch schon gesagt.

Aber mal als Beispiel: Wenn du eine Karte machst, weißt du wie oft die Schleife durchlaufen muss, wenn du ein Spiel hast wo etwas solange wiederholt werden soll bis eine gewisse Bedingung nicht mehr eintritt, dann brauchst du while.

Wozu man do und while brauch, keine Ahnung was an do-while besser sein soll, im Grunde für mich das Gleiche nur das da noch ein do am Anfang steht. O.o

While ist ungefähr wie eine Mischung aus for und if.

MfG
Check

9

Wednesday, June 22nd 2011, 9:01pm

Wie Pocky schon geschrieben hat.

Wer es lieber am Quelltext erklärt haben will =>
Baut doch mal einen einfachen Taschenrechner. Wenn ihr den nicht jedes mal neu starten wollt, ist da ein Schleifchen angebracht :D
Wenn ihr da eh schon eine Schleife einbaut, lassen sich gleich noch ein paar andere unschöne Sachen, die man auf Konsole sieht mit erledigen.

Also einen einfachen C++ Taschenrechner in etwa 50 Zeilen, haut in die Tasten und wir können das dann am Beispiel erklären.

MfG bcc-fan

10

Wednesday, June 22nd 2011, 9:12pm

Übrigens ist es vielleicht auch interessant zu wissen, dass die verschiedenen Schleifenarten völlig gleichwertig sind. Alles was man mit einer for-Schleife machen kann, kann man auch mit while und do-while Schleifen machen (und umgekehrt). Die verschiedenen Schleifenarten existieren nur um einem das Leben leichter zu machen. So ist es einfach kürzer und angenehmer zu schreiben:

C/C++ Quellcode

1
2
3
4
for(int i=1; i < 10; i++)
	{
		// Schleifenrumpf
	}

als:

C/C++ Quellcode

1
2
3
4
5
6
int i = 1;
while(i < 10)
	{
		// Schleifenrumpf
                i++;
	}

Aber es funktioniert beides genau* gleich

Daher ist es auch nicht soo wichtig immer die "richtige" Schleife zu verwenden. Da bekommt man mit der Zeit sehr schnell ein Gefühl für, wann welche Schleife am praktischsten ist.

@Checkmating der Unteschied von while und do-while ist, dass bei do-while der Schleifenrumpf immer mindestens einmal ausgeführt wird, völlig undabhängig von der Bedingungn.

Beispiel:

C/C++ Quellcode

1
2
3
4
do 
{
    cout << "Schleifenrumpf";
} while (false);


Hier wird "Schleifenrumpf" einmal ausgegeben obwohl die while-Bedingungen (false) niemals wahr ist.


* ok nicht wirklich genau gleich, bei zweiter Variante ist i nach der Schleife noch definiert, aber das spielt nicht wirklich ne Rolle ;)

11

Wednesday, June 22nd 2011, 9:16pm

Achso. Stimmt. xD
Ganz vergessen. *lach*
Dankööö.

MfG
Check

12

Wednesday, June 22nd 2011, 9:34pm

Was für ein Zufall, ich bin auch gerade bei den schleifen und hänge dort fest :D
Mein Problem ist folgendes bei so einer schleife..

C/C++ Quellcode

1
for(int i=1; i < 10; i++)


Es verwirrt ein wenig das z.B in der Schleife ein int kommt und nicht oben unter

C/C++ Quellcode

1
int main()
wo es sonst immer ist (zumindest am Anfang des lernens) .
Genauso dann mit dem

C/C++ Quellcode

1
i < 10; i++
warum dieses +1 am ende? Also warum soll/ wird da 1 zugezählt?

Mein Stern Code als Beispiel:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**************************************
* for Schleife
* Sterne!!!!!!!!!!!!
*
*/
 
#include <iostream>
using namespace std;
 
int main()
{
	int anzahl;
 
	cout << "Wieviele Sterne sollen erzeugt werden?" << endl;
	cin >> anzahl;
 
	for(int i = 0; i < anzahl; i++)
	{
 
	cout << "*" << endl;
	}
 
	cin.ignore();
	cin.get();
}


Bei mir ist es mit:

C/C++ Quellcode

1
for(int i = 0; i < anzahl; i++)


Ich glaube es ist einfach auswendig lernen, was man bei so einer for schleife schreiben muss. Hat jemand eine Eselsbrücke? :P

13

Wednesday, June 22nd 2011, 10:19pm

for(nötige Variable; Bedingung damit die Schleife ausgeführt wird; Variable vergrößern)

Also:
+1 am Ende ist dazu da, um die Schleife nicht zu einer Endlosschleife zu machen! Zählst du nicht +1 trifft die "Bedingung" ja immer zu. (In dem Fall i<10) i wäre bei dir immer kleiner als 10, aber wenn du nach jedem Durchgang +1 addierst dann tritt diese Bedingung ja irgendwann nicht mehr ein, oder?

Ich verstehe nicht was du mit der Zeile "ich verstehe nicht warum in der Schleife ein int kommt und oben runter" meinst. int ist lediglich der Variablenwert. int=integer
main() ist auch vom Typ integer. Aber dazu wirst du später bestimmt mehr erfahren.

Zeile 32 und 34 ist auch nur da, damit sich das Programm nicht schließt, was?
Verwende mal "system("PAUSE");", das ist einer meiner Favoriten. Wirst sehen was passiert. :D

MfG
Check

14

Thursday, June 23rd 2011, 7:54am

Kommentare im Quelltext

wcf.bbcode.cpp .title

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main()
{
	int anzahl;   //  int bezieht sich auf anzahl
 
	cout << "Wieviele Sterne sollen erzeugt werden?" << endl;
	cin >> anzahl;
 
	for(int i = 0; i < anzahl; i++)   // int bezieht sich auf i; i++ ist nur eine Möglichkeit - ersetze das durch i = i +2 und vergleiche die Ergebnisse
	{
 
	cout << "*" << endl;
	}
 
	cin.ignore();
	cin.get();
}


hier noch mal etwas zum lesen:
http://www.cplusplus.com/doc/tutorial/control/

bitte durchlesen und verstehen ;)

MfG bcc-fan

15

Thursday, June 23rd 2011, 8:34am

Zeile 32 und 34 ist auch nur da, damit sich das Programm nicht schließt, was?
Verwende mal "system("PAUSE");", das ist einer meiner Favoriten. Wirst sehen was passiert. :D


uhm jaja ich kenne system("pause");
Ich habe es zu anfangs auch benutzt. Dann wurde mir gesagt, das es bei enigen Systemen? oder ähnlich zu problemen führen kann. Deshalb bin ich zu cin.ignore... gewechselt :)

@bcc-fan
danke:)

16

Thursday, June 23rd 2011, 8:56am

PIOx, ich hoffe das ich das richtig lese:

C/C++ Quellcode

1
2
cin.ignore();
cin.get();

ist eine richtige C++ Lösung

C/C++ Quellcode

1
system("Pause");

ist ein betriebssystemabhängige Lösung -> d.h. Die funktioniert nicht auf allen Betriebssystemen.

Natürlich kann man Konsolenprogramme auch auf Konsole ausführen. Dann kann man sich die Zeilen sparen ;)
Wenn man das jedoch nicht will, ist die erste Lösung der 2. vorzuziehen.

MfG bcc-fan

17

Thursday, June 23rd 2011, 11:31am

Hmm.... Stand nicht dabei als ich die gefunden habe. Aber eigentlich klar, system("PAUSE") :D
Werde dann auch mal umsteigen. :thumbup:

Aber: Bei der for-Schleife mit dem Ende "i=i+2", wäre es da nicht leichter einfach i+=2 zu schreiben? :!:

MfG
Check

Social bookmarks