Synatex Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 (bearbeitet) Liebe Community, nach mehrmaligem lesen eines Tutorialabschnittes bzgl. "Schleifen" in C++ stehe ich bis jetzt noch immer vor einem Rätsel. Ich habe die Grundprinzipien verstanden, jedoch verstehe ich die Logik einer solchen Schleife nicht, bzw. wie man sie einsetzt. Es handelt sich dabei um dieses Tutorial: C++ Tutorial - Schleifen Könnte mir eventuell mal einer eine gut vorstellbare Situation geben, plus Erklärung wofür und wie man diese "Schleife" verwendet? Bearbeitet 12. Januar 2010 von Synatex Zitieren
bigvic Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 (bearbeitet) Steht ganz oben: "Schleifen sind dafür da, wenn wir etwas ziemlich oft machen wollen. zB wenn wir eine Zahl potenzieren wollen, dann müssen wir ziemlich oft multiplizieren..." Oder ein einfaches Beispiel. Geb mal alle (ganze) Zahlen zwischen 1 und 1000 aus. Mach das einmal von Hand und einmal mit einer Schleife - spätestens dann weisst warum du eine Schleife benutzt Bearbeitet 12. Januar 2010 von bigvic Zitieren
Synatex Geschrieben 12. Januar 2010 Autor Geschrieben 12. Januar 2010 Ich weiß wofür man sie einsetzt - jedoch verstehe ich denn Sinn der Programmierung nicht, mit i bla bla bla Zitieren
bigvic Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 Ich verstehe deine Frage dann nicht. Willst du diskutieren, warum sich die Entwickler für die Syntax entschieden haben?! Zitieren
Synatex Geschrieben 12. Januar 2010 Autor Geschrieben 12. Januar 2010 Nein. for(int i=0;i<b;i=i+1) for(int i=0;i<10;++i) Für diese Sachen bräuchte ich eine Erklärung. Bzw. ein Beispiel, zur Anschaulichung. Ich find mich damit nicht wirklich zurecht Zitieren
Klotzkopp Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 Der grundsätzliche Aufbau einer for-Schleife: for(INIT; CONDITION; STEP) { BODY }[/CODE] Der Ablauf sieht so aus (das solltest du auswendig lernen): 1. INIT ausführen 2. CONDITION prüfen. Wenn falsch, dann Ende 3. BODY ausführen 4. STEP ausführen 5. Gehe zu 2 Zitieren
Synatex Geschrieben 12. Januar 2010 Autor Geschrieben 12. Januar 2010 Wenn ich das richtig Verstanden habe for(i=0; i=10; ++i) { BODY } Dann würde die Schleife nach 10 Runden aufhören. Wenn ich nun aber eine Zahl suchen will, die zwischen 10 und 50 liegt? Zitieren
bigvic Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 = ist eine Zuweisung (für INIT) == ist ein Vergleichsoperator (für CONDITION) Von daher würde dein Bespiel nicht funktionieren. Hast du einen Compiler? Du solltest das wirklich mal ausprobieren um ein Gefühl dafür zu bekommen. Und was meinst du mit "suchen"? Zitieren
Synatex Geschrieben 12. Januar 2010 Autor Geschrieben 12. Januar 2010 "Suchen" Ich hab eine Schleife, die die Zahlen 10 bis 50 durchspielt. Ich will nun eine bestimmte Zahl, als Bsp. 25 durchsuchen. Wenn also dann die 25 gewählt ist, i==25 als Step, dann break? Und nein: Ich wollte mir einen Compiler holen, jedoch weiß ich nicht, welcher der beste ist/sein könnte. Zitieren
lit-web Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 Hallo, also Schleifen sind ja im Prinzip in jeder Programmiersprachen wo amn sie anwenden kann gleich von der Funktionalität her. Also mal eine Schleife dargestellt und auseinandergenommen. for(i = 0; i < 10; i++){ BODY } Nun zu den einzelnen Teilen. i = 0; Da legst im Prinzip nur den Startpunkt oder Startwert fest, (also der kann auch zum Beispiel wenn du Jahreszahlen von 2010 bis 2020 ausgeben lassen willst) bei 2010 liegen. Von daher musst du da den Zuweisungsoperator = nutzen, weil du der Variablen i einen Wert erst mal zuweisen musst. i < 10; In dem Teil legst du eine Bedingung fest, besser gesagt die Bedingung wie lange im Prinzip die Schleife sich wiederholen bzw. ausgeführt werden soll. Das heist in dem Fall musst du dann den Vergleichsoperator nutzen, weil da jageprüft wird ob die Variable i die Bedningung erreicht hat, in dem Fall ist hier bei 9 Schluss. Man kann das auch grob gesagt als Abbruchbedingung sehen. Man kann in dem Teil sogar Rechnungen machen, brauchte ich abr noch nicht. i++ In dem Teil wird solange via Inkrement die Variabe hochgezählt bis die Abbruchebedingung zuvor erreicht wurde. Mehr steckt da in Schleifen nicht dahinter. Mfg lit-web Zitieren
lit-web Geschrieben 12. Januar 2010 Geschrieben 12. Januar 2010 "Suchen" Ich hab eine Schleife, die die Zahlen 10 bis 50 durchspielt. Ich will nun eine bestimmte Zahl, als Bsp. 25 durchsuchen. Wenn also dann die 25 gewählt ist, i==25 als Step, dann break? Und nein: Ich wollte mir einen Compiler holen, jedoch weiß ich nicht, welcher der beste ist/sein könnte. Ich kann dir da den MINGW Compiler emfehlen. Zitieren
Synatex Geschrieben 12. Januar 2010 Autor Geschrieben 12. Januar 2010 Deine Erklärung war echt super! Danke dafür, der Compiler ist auch für mich nun jedenfalls ziemlich einfach zu benutzen. Zitieren
InfoJunkie Geschrieben 14. Januar 2010 Geschrieben 14. Januar 2010 (bearbeitet) Wenn also dann die 25 gewählt ist, i==25 als Step, dann break? Ganz genau. Pass aber auf, wenn Du bei 0 startest denn dann springst Du im Grunde eine Zahl zu spät raus. Falls Du noch wissen möchtest, was es mit i++ (post-increment) bzw. ++i (pre-increment) auf sich hat... Die Notation hat einen Einfluss auf die Auswertung des Ausdrucks: Bei i++ wird zunächst die Anweisung ausgeführt und i danach um 1 erhöht. Bei ++i wird zunächst die Variable i um 1 erhöht und erst dann ausgewertet. In einer for-Schleife macht es nun keinen Unterschied welche Methode Du verwendest, da es die einzige Anweisung ist. Ich habe zwar mal gehört, dass ++i etwas schneller sein soll, aber leider finde die Quelle nicht mehr. Also vergessen wir das wieder. Evtl. weiß Klotzkopp da mehr . Zur Verdeutlichung kannst Du ja mal die Ausgabe folgender Zeilen anschauen: #include <stdio.h> int main (void) { int i = 0; while(i < 10) { printf("%i\n", ++i); // bzw. i++ } return 0; } Bearbeitet 14. Januar 2010 von InfoJunkie Zitieren
Klotzkopp Geschrieben 14. Januar 2010 Geschrieben 14. Januar 2010 Bei i++ wird zunächst die Anweisung ausgeführt und i danach um 1 erhöht. Bei ++i wird zunächst die Variable i um 1 erhöht und erst dann ausgewertet.Das ist so nicht ganz richtig. Der Standard legt nicht genau fest, wann i erhöht wird, nur, dass es vor dem nächsten Sequence Point passiert. Weder ist garantiert, dass beim Ausführen von ++i i schon den neuen Wert hat, noch dass beim Ausführen von i++ i noch den alten Wert hat. Gesichert ist nur der Wert des gesamten Ausdrucks. Der Ausdruck ++i hat als Wert den neuen, bereits erhöhten Wert von i. Der Ausdruck i++ hat den alten Wert. Dieser Unterschied ist also egal, wenn der Wert des Gesamtausdrucks gar nicht verwendet wird, wie es beispielsweise der Fall ist, wenn man so einen Ausdruck als dritten Teil einer for-Schleife benutzt. Die Tatsache, dass nicht genau definiert ist, wann die Erhöhung stattfindet, ist auch der Grund dafür, dass man mit den Inkrementausdrücken so schnell im Bereich des undefinierten Verhaltens landet. Man sollte also tunlichst vermeiden, den Operanden eines Inkrementoperators im selben Ausdruck nochmal zu verwenden. Quizaufgaben der Art wie "Was ergibt ++i + i++" sind witzlos, weil das laut Standard gar nicht definiert ist, da darf jeder Compilerhersteller machen, was er will. Ich habe zwar mal gehört, dass ++i etwas schneller sein soll, aber leider finde die Quelle nicht mehr. Also vergessen wir das wieder. Evtl. weiß Klotzkopp da mehr . http://forum.fachinformatiker.de/c-c/133586-bubble-sort.html#post1189800 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.