Unterfunktionproblem



  • Der Code ist derart, dass ich vorschlage:
    Du setzt Dich nochmal hin, schaust in das Buch, mit dem Du C++ lernen willst und schreibst einfachere Programme.

    Es muss IMHO deutlich mehr Substanz an C++-Wissen auf Deiner Seite vorhanden sein, damit das hier erquickend für beide Seiten ist.

    Nix für ungut...



  • [code="cli"]

    #include <iostream>
    #include <stdlib.h>
    using namespace std;

    void beginn();
    void ausgabe();

    int main()
    {
    float anzahl=0, max=0, min=1000, note,b,d,e; //Definition der verschiedenen Zahlenwerte (float)
    cout << "Geben Sie ein, wie viele Tests Sie bewerten wollen: "; //Textausgabe
    cin >> anzahl; //Werteingabe

    do //Beginn der do-while Schleife
    {
    void beginn(float b, float d, float note);

    if (note>max) //Wenn note>max, Gleichsetzung
    {
    max=note;
    }

    if (note<min) //Wenn note<min, Gleichsetzung
    {
    min=note;
    }

    }

    while (b<anzahl); //Bedingung und Aktionen von "while"

    e=d/anzahl; //Definition von e

    void ausgabe(float e);

    return 0;
    }

    void beginn(float b, float d, float note)
    {
    cout << "Bitte Note eingeben: ";
    b++;
    cin >> note; //Noteneingabe
    d=d+note;
    }

    void ausgabe(float e, float max, float min)
    {
    cout << "Durchschnittsnote: "<< e; //Ausgabe der errechneten Werte
    cout << "Max.: " << max;
    cout << "Min.: " << min;
    }

    [code="cpp"]

    Hab die Fehlercodes jetzt alle ausgemärzt, das einzige Problem was ich noch habe ist, dass die Werte nicht in die Hauptschleife zurückgegeben werden, sprich ich geb die Anzahl der zu bewertenden Teste ein und dann ist tote Hose da die Werte der Nebenfunktion "beginn" nicht zurückgegeben werden, woran liegt das?



  • Sorry, hier gleich nochmal:

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    void beginn();
    void ausgabe();
    
    int main()
    {
       float anzahl=0, max=0, min=1000, note,b,d,e; //Definition der verschiedenen Zahlenwerte (float)
       cout << "Geben Sie ein, wie viele Tests Sie bewerten wollen: "; //Textausgabe
       cin >> anzahl; //Werteingabe
    
       do //Beginn der do-while Schleife
       {
         void beginn(float b, float d, float note);
    
         if (note>max) //Wenn note>max, Gleichsetzung
         {
         max=note;
         }
    
           if (note<min) //Wenn note<min, Gleichsetzung
           {
           min=note;
           }
    
       }
    
       while (b<anzahl); //Bedingung und Aktionen von "while"
    
       e=d/anzahl; //Definition von e
    
       void ausgabe(float e);
    
    return 0;
    }
    
    void beginn(float b, float d, float note)
          {
          cout << "Bitte Note eingeben: ";
          b++;
          cin >> note; //Noteneingabe
          d=d+note;
          }
    
    void ausgabe(float e, float max, float min)
            {
            cout << "Durchschnittsnote: "<< e; //Ausgabe der errechneten Werte
            cout << "Max.: " << max;
            cout << "Min.: " << min;
            }
    


  • Furble Wurble schrieb:

    void ausgabe(const float&, const float&, const float&);
    

    Wieso const-ref Furble? 🙂



  • Hallohallo schrieb:

    Hallo!

    hab ein kleines C++ Problem, ich will diesen einfache Programm:

    #include <iostream>
    using namespace std;
    
    int main()
    {
     float note,b=0,anzahl,d=0,e=0, max=0, min=1000; //Definition der verschiedenen Zahlenwerte (float)
     cout << "Geben Sie ein, wie viele Tests Sie bewerten wollen: "; //Textausgabe
     cin >> anzahl; //Werteingabe
    
       do //Beginn der do-while Schleife
       {cout << "Bitte Note eingeben: ";
        b++;
        cin >> note; //Noteneingabe
        d=d+note;
    
     if (note>max) //Wenn note>max, Gleichsetzung
     {
        max=note;
     }
    
      if (note<min) //Wenn note<min, Gleichsetzung
      {
       min=note;
      }
    
       }
    
       while (b<anzahl); //Bedingung und Aktionen von "while"
    
       e=d/anzahl; //Definition von e
    
       cout << "Durchschnittsnote: "<< e << endl; //Ausgabe der errechneten Werte
       cout << "Max.: " << max << endl;
       cout << "Min.: " << min << endl;
    
    return 0;
    }
    

    in Unterfunktionen aufteilen lassen

    Das Vorhaben erscheint mir nicht sinnvoll.
    Ich bin ein Freund kleiner, sehr kleiner und extrem kleiner Funktionen, baue bei 200 Dateien im Durchschnitt 6 Zeilen pro Funktion (außer GUI), und würde hier dennoch alles in der main() lassen.



  • Hallohallo schrieb:

    Fehlermeldungen: Fehlermeldungen sind nicht kopierbar, steckt es mal in euren Compiler und seht selbst (...)

    *FACE...

    ...wait for it...

    ...PALM*



  • ...



  • Hallohallo schrieb:

    Fehlermeldungen: Fehlermeldungen sind nicht kopierbar, steckt es mal in euren Compiler und seht selbst, bei mir sind's noch immer 14 errors, die meisten davon: Nicht deklarierte Zahlen in den ersten Programmzeilen.

    Vielleicht sind sie in Deiner IDE nicht markierbar. Also nicht kopierbar per Markieren und Kopieren.
    Probier es anders. Zum Beispiel rechte Maustaste und im erscheinenden Kontextment "Kopieren" wählen.
    Oder sag, welche IDE es ist und jemand findet es heraus, wie es geht.
    Zur höchsten Not den Compiler aus der Konsole aufrufen und die Fehler in eine Datei schicken. Oder ideone benutzen.



  • out schrieb:

    Furble Wurble schrieb:

    void ausgabe(const float&, const float&, const float&);
    

    Wieso const-ref Furble? 🙂

    My bad... 😞
    Zu lange hin und her editiert. Denk Dir einfach eine Übergabe per Wert.

    @Hallohallo:
    Hmm: hast ja innerhalb von 25 Minuten gestern noch die übelsten Syntaxfehler rausgebügelt. 🙂

    Schau Dir nochmal an, wie in C++ Funktionen aufgerufen werden, und wie Du Argumente übergibst (per Wert, bzw. per Referenz).
    Z.B. werden in swordfishs eingabe_2() beide Konventionen genutzt.
    Allgemein solltest Du aus den Beispielen hier im Thread sehen, wie Funktionen nicht aufgerufen werden (Dein Code), bzw. wie sie aufgerufen werden (alle anderen Beispiele).

    Glückauf!



  • Hallo!

    hab's nun endlich geschafft, nochmal hingesetzt und angesehen, siehe da: Der mir vorher völlig unbekannte Knackpunkt waren die "&"-Zeichen!!!

    Programm funktioniert nun hervorragend!

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    void beginn(float &b, float &d, float &note);
    void ausgabe(float &e, float &min, float &max);
    
    int main()
    {
       float anzahl=0, max=0, min=1000, note,b,d,e; //Definition der verschiedenen Zahlenwerte (float)
       cout << "Geben Sie ein, wie viele Tests Sie bewerten wollen: "; //Textausgabe
       cin >> anzahl; //Werteingabe
    
       do //Beginn der do-while Schleife
       {
         beginn(b,d,note);
    
         if (note>max) //Wenn note>max, Gleichsetzung
         {
         max=note;
         }
    
           if (note<min) //Wenn note<min, Gleichsetzung
           {
           min=note;
           }
    
       }
    
       while (b<anzahl); //Bedingung und Aktionen von "while"
    
       e=d/anzahl; //Definition von e
    
       ausgabe(e,min,max);
    
    return 0;
    }
    
    void beginn(float &b, float &d, float &note)
          {
          cout << "Bitte Note eingeben: ";
          b++;
          cin >> note; //Noteneingabe
          d=d+note;
          }
    
    void ausgabe(float &e, float &min, float &max)
            {
            cout << "Durchschnittsnote: "<< e; //Ausgabe der errechneten Werte
            cout << "\nMax.: " << max;
            cout << "\nMin.: " << min;
            }
    

    Danke für die Hilfe!

    Hallohallo



  • Da ist ein Fehler drinnen, und ein krasser Schönheitsfehler.

    Fehler: deine ganzen float Variablen sind nicht initialisiert. Wieso das trotzdem geht ist mir schleierhaft -- im Debug-Mode sollte dabei auf jeden Fall nur Unsinn rauskommen.

    Krasser Schönheitsfehler: du verwendest floats als Zähler!?! Einmal der Schleifenzähler "b". Dann "anzahl", das zwar nicht selbst zählt, aber eben eine vom Benutzer eingegebene "Anzahl" darstellt.
    Das funktioniert zwar, aber man macht es einfach nicht.
    (Und bei der Eingabe kann der Benutzer dann als Anzahl 2,5 oder so eingeben -- was dann auch für die Division am Schluss übernommen wird -- vermutlich auch nicht in deinem Sinn)


Anmelden zum Antworten