Zum Inhalt springen

[C++] Unverständniss bei Schleifen


Empfohlene Beiträge

Geschrieben (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 von Synatex
Geschrieben (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 von bigvic
Geschrieben

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 ;)

Geschrieben

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

Geschrieben

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?

Geschrieben

= 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"?

Geschrieben

"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.

Geschrieben

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

Geschrieben
"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.

Geschrieben (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 von InfoJunkie
Geschrieben
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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...