Schleife



  • Hallo erst mal
    Kann mir jemand erklären warum die Schleife bis 32 zählt und nicht bei 31 abbricht?
    C/C++ Code
    Double cent, euro;
    Int32 felder;

    euro=0;
    cent=1;
    felder=0;
    for (felder=0; felder<=31; felder++) {
    cent = cent + cent;
    euro = cent / 100;
    Console::WriteLine("Die summe lautet in Euro = {0}",euro);
    }

    return 0;

    Vielen Dank im Voraus



  • Die Schleife hat 32 iterationen weil das interval [0;31] ist.



  • Heinerich schrieb:

    Hallo erst mal
    Kann mir jemand erklären warum die Schleife bis 32 zählt und nicht bei 31 abbricht?
    C/C++ Code
    Double cent, euro;
    Int32 felder;

    euro=0;
    cent=1;
    felder=0;
    for (felder=0; felder<=31; felder++) {
    cent = cent + cent;
    euro = cent / 100;
    Console::WriteLine("Die summe lautet in Euro = {0}",euro);
    }

    return 0;
    Soweit mir bekannt ist fängt eine Schleife bei 0 an zu zählen, sie soll 31 mal zusammen zählen und bei 31 abbrechen. von 0 bis 30 ist 31 mal. Was ist falsch?

    Vielen Dank im Voraus



  • Heinerich schrieb:

    Heinerich schrieb:

    Hallo erst mal
    Kann mir jemand erklären warum die Schleife bis 32 zählt und nicht bei 31 abbricht?
    C/C++ Code
    Double cent, euro;
    Int32 felder;

    euro=0;
    cent=1;
    felder=0;
    for (felder=0; felder<=31; felder++) {
    cent = cent + cent;
    euro = cent / 100;
    Console::WriteLine("Die summe lautet in Euro = {0}",euro);
    }

    return 0;
    Soweit mir bekannt ist fängt eine Schleife bei 0 an zu zählen, sie soll 31 mal zusammen zählen und bei 31 abbrechen. von 0 bis 30 ist 31 mal. Was ist falsch?

    Vielen Dank im Voraus

    Weil du <=31 hast. Wie gesagt, das bedeutet inklusive 31.



  • Im Code Beispiel von mir, zählt die Schleife jetzt von 1 - 31.
    Da die 0 im Zähler der erste Durchlauf ist.
    Entweder lass die Schleife von 0 bis 30 laufen (Guter Programmierstil).
    Oder lass sie von 1 bis 31 laufen (Schlechter Programmierstil).
    Die Variante von 1 bis 31 ist aus folgendem Grund nicht schön…
    Wenn jemand den Quelltext lesen sollte, denkt man automatisch, dass die Schleife bei 0 Anfängt und bei 31 Aufhört, also 32 Durchläufe.
    Man beachtet aber vielleicht nicht, dass der Zähler aber bei 1 Anfängt.
    Hoffe ich konnte das so rüberbringen, dass Du das verstehen konntest.
    Mein Dozent hat es besser drauf mit erzählen.

    Double cent, euro; 
    Int32 felder; 
    
    euro=0; 
    cent=1; 
    felder=0; 
    for (felder=1; felder<=31; felder++) 
    { 
       cent = cent + cent; 
       euro = cent / 100; 
       Console::WriteLine("Die {1}. Summe lautet in Euro = {0}",euro,felder); 
    	}
    

    Gruß Doug_HH



  • Über Stiel lässt sich ja bekanntlich streiten. Dennoch möchte ich angemerkt haben, das es nicht ungewöhnlich ist, das schleifen nicht von 0 bis x laufen. Den Wertebereich im Schleifenheader zu definieren kann durchaus deutlich lesbarer sein als Berechnungen im Schleifenrumpf vorzunehmen um den Wertebereich anzupassen.



  • Knuddlbaer schrieb:

    Über Stiel lässt sich ja bekanntlich streiten. Dennoch möchte ich angemerkt haben, das es nicht ungewöhnlich ist, das schleifen nicht von 0 bis x laufen. Den Wertebereich im Schleifenheader zu definieren kann durchaus deutlich lesbarer sein als Berechnungen im Schleifenrumpf vorzunehmen um den Wertebereich anzupassen.

    Stimme zu.

    Die Frage ist immer auch eine der Abhängigkeit. Wenn aus meiner Schleife mehrere Werte aus dem einen Wert meines Schleifenheaders entstehen, dann wäre das zum Beispiel ein Situation in der ich alles in den Rumpf tun würde nur um keinen zu "bevorzugen".
    Ist vielleicht nicht so effizient, aber meiner Meinung nach übersichtlicher.


Anmelden zum Antworten