Frage zu while und for



  • Hallo liebe Forenmitglieder,

    ich hätte da eine kleine dringende Frage, also ich bin grad dabei mir das programmieren beizubringen, und es geht auch relativ gut voran, nur hänge ich gerade bei der while bzw. for-Schleife.

    Also was ich weiß das die beiden Schleifen eig. dasselbe sind, also z.B

    statt:

    for(z=0;z<=10;z++);

    könnte man ja auch:

    z=0;
    while(z<=10)
    {
    z++;
    }

    machen, denke ich mal, also wenn es falsch ist bitte korrigieren

    aber bei einem Bsp, z.B

    printf(" Geben sie a ein ");
    scanf("%d" ,&a);
    printf(" Geben sie b ein ");
    scanf("%d" ,&b);

    while(a>b)
    {
    a=a-b;
    }

    Wie könnte man da eig for machen, weil a=0 will ich ja nicht machen und a++ auch nicht, wie eben bei jeder for Schleife die ich kenne das so ist.
    Deswegen verstehe ich den unterschied von den beiden leider nicht, könnte mir den mal wer bitte erklären.

    lg Dominik

    ps. hab die Frage vorher unabsichtlich ins falsche Themengebiet gegeben, deswegen habe ich es einfach hier rüberkopiert



  • for (; a > b;)
    {
        a = a - b;
    }
    

    Meinst du so in etwa? 😕



  • for(;a > b; a -= b){}
    


  • ja wenn es funktioniert schon^^ ich kenn mich leider noch zu wenig aus..

    for(a; a>b; a=a+b)

    würd nicht gehn oder?



  • und was ist eig der unterschied zwischen den zwein? weil in diesem buch steht,

    : wenn ich voraus bekannt ist, wie oft die Anweisung zu wiederholen ist, aber was meinen die damit konkret?



  • Vom generierten Maschinencode dürften sich die unterschiedlichen Varianten nicht nennenswert unterscheiden, vorausgesetzt sind sind auch wirklich äquivalent. Es geht nur darum, dir Werkzeuge zur Hand zu geben, um deinen Code so zu schreiben, wie er am besten verständlich ist.

    Dominik1993 schrieb:

    : wenn ich voraus bekannt ist, wie oft die Anweisung zu wiederholen ist, aber was meinen die damit konkret?

    Nun, wenn du einen Block genau N mal ausführen willst, schreibst du bspw.:

    for (int i = 0; i < N; i++) { dein Block; }
    

    Sofern du im Schleifenkörper jetzt weder den Schleifenzähler manipulierst, noch sonstige den Kontrollfluss verändernde Sprachmittel (break z.B.) verwendest, kannst du auf einer Zeile sehen, wie oft deine Schleife ausgeführt wird. Bei while kannst du meist davon ausgehen, dass es sich nicht um eine einfache Zählschleife handelt. Du musst also Ausschau danach halten, welche Anweisungen deines Blocks zum Erfüllen der Abbruchbedingung führen.

    For wird auch oft verwendet, wenn ein Block Code für alle Elemente eines Containers ausgeführt werden soll. Hier gibt es neuerdings dann auch eine vereinfachte Syntax für, die range-based for-Schleife.

    Letztendlich lässt sich aber praktisch jede Form der Schleife auch in einer jeweils anderen Form ausdrücken. Das ganze dient hauptsächlich dir zur Strukturierung. Benutze also die Form, die für dein Problem am logischsten erscheint.


Anmelden zum Antworten