Bitte um Änderungsvorschläge bei Schleifen



  • Hallo zusammen,

    ich soll ein Programm erstellen, dass die Zahlen von 1 bis 10 ausgibt.
    Einmal mit for, einmal mit while und einmal mit do...while

    Ich habe das so gelöst (das int i = 0 muss dort stehen, ist schon vorgegeben)

    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    int main ()
    {
    
    int i = 0;
    
    for (i = 1; i<11; i++) {
    
        cout <<"Schleif" <<i <<endl;
    }
    i = 1;
    while (i < 11) {
    
          cout << "Scheiffffee" <<i<<endl;
          i++;
          }
    
    i = 1;
    
    do {
        cout <<"Schliffeeeeeeeeeeeeeeee" <<i <<endl;
        i++;
    }
    while (i < 11);
    
    system("pause");}
    

    Gibt es da eine elegantere Möglichkeit als dass ich immer wieder bei i den Wert 1 setzen muss?

    Danke!

    Gruß


  • Mod

    MarkO122 schrieb:

    Gibt es da eine elegantere Möglichkeit als dass ich immer wieder bei i den Wert 1 setzen muss?

    Ist doch gut so. Minimal eleganter: Immer neue Variablen verwenden und den Scope der Variablen auf die Schleifen beschränken.



  • int i = 1;
    
    for(; i <= 10; ++i)
    	std::cout << i << std::endl;
    
    i = 1;
    while(i <= 10)
    	std::cout << i++ << std::endl;
    
    i = 1;
    do std::cout << i++ << std::endl;
    while(i <= 10);
    

    Naja, nicht viel besser.



  • hm - 31415
    Was soll daran besser sein? Ich seh nur Endlosschleifen 🙂
    Nachtrag: Ah - wurde korrigiert

    Nachtrag2: do-while ist falsch, da 11 auch ausgegeben wird.



  • Wo sind denn da bitte Endlosschleifen? Siehe Postfix/Prefix.



  • Peinlich 😃
    Naja, verwende do-while so gut wie nie.



  • Danggge!!

    Noch ne Frage zur Überladung:

    Ich hab folgendes gelesen:

    Wir verstehen darunter die Definition mehrerer gleichnamiger Methoden, die sich
    in ihrer Übergabe-Parameterliste und/oder ihrem Rückgabewert unterscheiden.

    wenn ich jetzt allerdings

    void werteausgeben(int)

    und

    int werteausgeben(int)

    betrachte, wie kann ich die denn dann beim Methodenaufruf unterscheiden?
    Bei der Paramterliste ist das ja klar, ich kann ja unterscheiden ob (int) oder (int,int) aber bei dem Rückgabewerten?
    Danke!

    Viele Grüße



  • Gar nicht. Beide haben die gleiche Signatur (die beinhaltet nämlich nicht den Rückgabetyp) -> Compilerfehler.



  • Überladene Methoden haben immer unterschiedliche Parameter, die Rückgabetypen sind "egal".



  • Besser gesagt: Funktionen werden nicht anhand ihres Rückgabetyps oder Namens differenziert, sondern an ihren Parametern. Wenn du die selbe Funktion mit verschiedenen Rückgabetypen hast, dann weiß der Compiler nicht, wann er welche benutzen soll (genauso wenig wie du :D) und gibt eine Fehlermeldung.

    Also ist das hier eine Funktionsüberladung

    void print(int);
    void print(int, char);

    , aber das hier nicht:

    void print(int);
    char print(int);

    letzteres ist wie beschrieben schlicht falsch.



  • Besser gesagt: Funktionen werden NICHT anhand ihres Rückgabetyps erkannt, SONDERN an ihren Parametern. Wenn du die selbe Funktion mit verschiedenen Rückgabetypen hast, dann weiß der Compiler nicht, wann er welche benutzen soll (genauso wenig wie du :D) und gibt eine Fehlermeldung.

    Also ist das hier eine Funktionsüberladung

    void print(int);
    void print(int, char);

    , aber das hier nicht:

    void print(int);
    char print(int);

    letzteres ist wie beschrieben schlicht falsch.

    ... Meintest du (Incocnito) natürlich 😉



  • Scheiße. 😃
    Sowas ist jetzt peinlich 😃
    Habs verbessert, ja meinte ich natürlich. Oh mann..



  • Incocnito schrieb:

    Scheiße. 😃
    Sowas ist jetzt peinlich 😃
    Habs verbessert, ja meinte ich natürlich. Oh mann..

    xD Jetzt hast du es aber noch immer nicht ganz korrekt.

    Also nochmal:
    - Der Compiler erkennt eine Funktion an ihrer Signatur.
    - Zur Signatur einer Funktion gehört der Name und die Parameterliste.

    Problem:
    - Wenn du nun 2 Funktionen mit gleicher Signatur hast, hast du natürlich ein Konflikt.

    Gruß



  • Danke!

    Toll, dann hab ich mich (mal wieder) falsch informiert. :-((

    Danke für die Auflärung 🙂


Anmelden zum Antworten