Funktionen


  • Mod

    SC2 schrieb:

    und wie ruf ich die funktion dann in main auf?????? 😕 😕

    Indem du ihren Namen dahin schreibst gefolgt von den Parametern (hier keine) in Klammern.

    Aber dein Programm ist sowas von wirr, du solltest es erstmal mit dem Lernen etwas langsamer angehen und nicht zu viel auf einmal versuchen.

    Außerdem solltest du dein Lehrmaterial wegschmeißen und dir etwas zulegen, dass von jemandem geschrieben wurde, dessen C++ Kenntnisse nicht 12 Jahre veraltet sind.



  • SC2 schrieb:

    ja so ruft er dann die funktion auf aber als ergebniss kommt 0 raus
    hab ich dann nen denkfehler in meiner rechnung oder hab ich wo nen falschen datentyp gewählt und ich sehs nur net?

    mfg

    Die Funktionen übergeben mit Hilfe von "return" Variablen bzw. Werte.

    return 0; bewirkt also, dass als Wert die Null übergeben wird.
    return Variable; übergibt eine Variable



  • SC2 schrieb:

    ja so ruft er dann die funktion auf aber als ergebniss kommt 0 raus
    hab ich dann nen denkfehler in meiner rechnung oder hab ich wo nen falschen datentyp gewählt und ich sehs nur net?

    mfg

    Stichwort Integer-Division.

    flaeche = durchmesser * (pow(M_PI , 2 ));
    Jetzt ist fläche eine Ganzzahl mit Inhalt 9. (weil abgerundet)

    mal = quadratmeter/flaeche;
    Wenn du 1 durch 9 teilst und wieder abrundest, kommt 0 raus.

    wasser=mal * ml;
    Und hier entsprechend auch.

    Wähle float oder double als Datentyp für diese Zahlen, dann wirst du dieses Problem nicht mehr haben.



  • schon klar aber hab ich da irgendwo return 0 :

    #include <iostream.h>
    #include <math.h>
    
    int berechnung ( int flaeche,   int quadratmeter , int mal, int wasser, int ml, int durchmesser);
    
    int berechnung()
    
    {
    int flaeche;
    int mal;
    int wasser;
    int ml;
    int durchmesser;
    int quadratmeter = 1;
    
     cout<< "Bitte geben Sie den Stand im Roehrchen in ml an:";
     cin>> ml;
     cout<< "Bitte geben Sie den Durchmesser der Roehrchens an:";
     cin>> durchmesser;
    
      flaeche = durchmesser * (pow(M_PI , 2 ));
      mal = quadratmeter/flaeche;
      wasser=mal * ml;
    
       cout<<" Es hat "<<wasser <<" l auf den Quadratmeter geregnet.";
       return wasser;
       }
    
    int main()
    {
    int wasser = berechnung ();
    cout<<wasser;
    getchar();
    
    }
    

    mfg



  • lol epic fail ich bin so doof...

    ja danke an alle dass ihr mir so subba geholfen habt
    echt ein klasse forum hier 😉 👍

    dann wünsch ich allen mal ne gute nacht

    mfg



  • SC2 schrieb:

    #include <iostream.h>
    #include <math.h>
    

    Dies ist schonmal kein gültiges C++. Die Header der C++ Standardbibliothek werden ohne die Endung .h inkludiert, und bei den C-Kompatibilitätsheadern wird zudem noch ein c an den Namen vorangestellt. Gleichzeitig liegen diese Header im Namensraum std.

    Und zudem ist dein Programm noch immer bescheiden eingerückt:

    #include <iostream>
    #include <cmath>
    
    using namespace std; // Bitte niemals im Header, und immer nach allen Includes.
    
    // Variablen sollte man erst vor der ersten Benutzung deklarieren. Zudem wären
    // aussahgekräftigere Variablennamen besser. Was soll man bitte unter "int wasser",
    // "int mal" verstehen?
    int berechnung()
    {
        cout << "Bitte geben Sie den Stand im Roehrchen in ml an:";
        int ml,
        cin >> ml;
        cout << "Bitte geben Sie den Durchmesser der Roehrchens an:";
        int durchmesser;
        cin >> durchmesser;
    
        int flaeche = durchmesser * (pow(M_PI, 2));
        int liter = (quadratmeter / flaeche) * ml;
    
        cout << " Es hat " << liter << " l auf den Quadratmeter geregnet.";
        return liter;
    }
    
    int main()
    {
        int liter = berechnung();
        cout << liter;
        getchar();
    }
    


  • In dem Programm wird übrigens die Wassermenge 2 mal ausgegeben: Einmal in der Funktion, und einmal in der main().



  • hi @ all ich bins nochmal :p

    folgendes ich hab jezt aus der einen funktion zwei funktionen gemacht, dass sieht dann so aus:

    #include <iostream.h>
    #include <math.h>
    
    int frage ( int ml, int durchmesser){
    
        cout<< "Bitte geben Sie den Stand im Roehrchen in ml an:";
        cin>> ml;
        cout<< "Bitte geben Sie den Durchmesser der Roehrchens an:";
        cin>> durchmesser;
        return 0;
    }
    
    float berechnung ( float flaeche, float quadratmeter,float mal,
                       int wasser, float ml, float durchmesser){
    
        quadratmeter=1;
        flaeche = durchmesser * (pow(M_PI , 2 ));
        mal = quadratmeter/flaeche;
        wasser=mal * ml;
        cout<<" Es hat "<<wasser <<" l auf den Quadratmeter geregnet.";
        return wasser;
       }
    
    int main()
    {
    int frage = frage ();
    float wasser = berechnung (float);
    
    getchar();
    
    }
    

    Der Compiler sagt dazu:
    1. [C++ Fehler] Neu.cpp(28): E2314 Aufruf einer Nicht-Funktion
    2. [C++ Fehler] Neu.cpp(29): E2188 Ausdruckssyntax
    3. [C++ Fehler] Neu.cpp(29): E2193 Zu wenige Parameter im Aufruf von 'berechnung(float,float,float,int,float,float)'
    4. [C++ Warnung] Neu.cpp(33): W8004 'wasser' wurde ein Wert zugewiesen, der nie verwendet wird.
    5. [C++ Warnung] Neu.cpp(33): W8004 'frage' wurde ein Wert zugewiesen, der nie verwendet wird.

    kann mir mal einer auf die sprünge helfen ich komm einfach nicht weiter 😞

    mfg



  • SC2 schrieb:

    hi @ all ich bins nochmal :p

    folgendes ich hab jezt aus der einen funktion zwei funktionen gemacht, dass sieht dann so aus:

    #include <iostream.h>
    #include <math.h>
    
    int frage ( int ml, int durchmesser){
    
        cout<< "Bitte geben Sie den Stand im Roehrchen in ml an:";
        cin>> ml;
        cout<< "Bitte geben Sie den Durchmesser der Roehrchens an:";
        cin>> durchmesser;
        //ml und durchmesser werden nie verwendet
        return 0;  //du kannst genausogut void frage() schreiben und nichts zurückgeben
    }
    
    float berechnung ( float flaeche, float quadratmeter,float mal,
                       int wasser, float ml, float durchmesser){
    
        quadratmeter=1;  //was bringt das?? Du überschreibst den alten Wert!
        flaeche = durchmesser * (pow(M_PI , 2 ));
        mal = quadratmeter/flaeche;
        wasser=mal * ml; //vorsicht, Rundung! (Beabsichtigt?)
        cout<<" Es hat "<<wasser <<" l auf den Quadratmeter geregnet.";
        return wasser; //Du gibst einen int zurück, aber die Funktion hat den Return-Typ float
       }
    
    int main()
    {
    int frage = frage ();  //Nenne nie zwei Sachen gleich!! UND zu wenige parameter
    float wasser = berechnung (float);  
    /*1. du musst variablen übergeben, keine typen
      2. du muss 5 variablen an deine funktion übergeben
      3. Das Speichern bringt dir nichts (auch nicht bei int frage*/
    
    getchar();
    
    }
    

    Der Compiler sagt dazu:
    1. [C++ Fehler] Neu.cpp(28): E2314 Aufruf einer Nicht-Funktion
    2. [C++ Fehler] Neu.cpp(29): E2188 Ausdruckssyntax
    3. [C++ Fehler] Neu.cpp(29): E2193 Zu wenige Parameter im Aufruf von 'berechnung(float,float,float,int,float,float)'
    4. [C++ Warnung] Neu.cpp(33): W8004 'wasser' wurde ein Wert zugewiesen, der nie verwendet wird.
    5. [C++ Warnung] Neu.cpp(33): W8004 'frage' wurde ein Wert zugewiesen, der nie verwendet wird.

    kann mir mal einer auf die sprünge helfen ich komm einfach nicht weiter 😞

    mfg

    Kommentare im Code.
    Vorschlag: klein anfangen und erstmal Buch lesen, dann größere Programme schreiben.



  • habs geschaft

    #include <iostream.h>
    #include <math.h>
    
    float ml;
    float durchmesser;
    
    int frage (){
    
        cout<< "Bitte geben Sie den Stand im Roehrchen in ml an:";
        cin>> ml;
        cout<< "Bitte geben Sie den Durchmesser der Roehrchens an:";
        cin>> durchmesser;
        return 0;
    }
    
    void berechnung (){
    
            float mal;
            float flaeche;
            float wasser;
            int   quadratmeter;
    
        quadratmeter=1;
        flaeche = durchmesser * (pow(M_PI , 2 ));
        mal = quadratmeter/flaeche;
        wasser=mal * ml;
        cout<<" Es hat "<<wasser <<" l auf den Quadratmeter geregnet.";
    
       }
    
    int main()
    {
    int antwort = frage ();
    berechnung ();
    
    getchar();
    
    }
    

    gn8


  • Mod

    Die Art und Weise wie du hier globale Variablen benutzt ist ganz genau die weise vor der uns die Altvorderen immer gewarnt haben. Gewöhn dir das lieber schnell wieder ab.

    Alternativen die hier gut passen wäre die Übergabe von Werten an Funktionen oder eine bessere Aufteilung der Aufgabenbereiche der Funktionen.



  • und schau dir mal asc`s post noch mal an....



  • unskilled schrieb:

    und schau dir mal asc`s post noch mal an....

    fehlt da nicht in z.15 ein ;



  • und eine saubere trennung von eingabe, verarbeitung und ausgabe vermiss ich auch iwie... aber das passiert uns doch allen im eifer des gefechts 😉



  • no_c0de schrieb:

    unskilled schrieb:

    und schau dir mal asc`s post noch mal an....

    fehlt da nicht in z.15 ein ;

    Ja, Korrigiert, aber dennoch sollte man sich mal den Post zu Herzen nehmen.



  • SC2 schrieb:

    habs geschaft

    Nicht wirklich. Der Code ist immer noch kein gültiges C++, auch wenn er vielleicht durch deinen Compiler geht. Und Eingerückt ist er immernoch nicht sauber (und sehr inkonsistent - Egal wie sei konsistent).

    #include <iostream> // Kein .h am Ende [Nach C++ Standard von 1998/2003]
    #include <cmath>    // Kein .h am Ende, Und C-Kompatibilitätsheader beginnen mit "c"
    
    using namespace std; // Alle Header der Standardbibliothek liegen im Namensraum std.
                         // Sollte NIEMALS in Headern, und wenn nach allen Includes
                         // geschrieben werden, falls man nicht std:: direkt ausschreibt
                         // (In Headern sollte man dies ohnehin).
    
    // float ml;          \ Globale Variablen sollte man wenn überhaupt nur in
    // float durchmesser; / Sonderfällen verwenden, dafür gibt es Parameter
    
    // Deine Benennung von Funktionen und Variablen lässt nach wie vor zu
    // wünschen übrig. Versuch mal ein Programm nach einen halben Jahr noch
    // schnell zu verstehen.
    float frageNachML()
    {
        cout << "Bitte geben Sie den Stand im Roehrchen in ml an:";
        float ml;
        cin >> ml;
        return ml;
    }
    
    float frageNachDurchmesser()
    {
        cout << "Bitte geben Sie den Durchmesser der Roehrchens an:";
        float durchmesser;
        cin >> durchmesser;
        return durchmesser;
    }
    
    float berechneNiederschlagInLitern(
        float ml,
        float durchmesser)
    {
        // int quadratmeter = 1; Da quadratmeter scheinbar fix ist, weglassen
        float flaeche = durchmesser * (pow(M_PI, 2));
        return (1 / flaeche) * ml;
    }
    
    int main()
    {
        float niederschlagInLitern = berechneNiederschlagInLitern(
          frageNachML(),
          frageNachDruchmesser());
    
        cout << " Es hat "
          << niederschlagInLitern
          << " l auf den Quadratmeter geregnet.";
    
        getchar();
    }
    

Anmelden zum Antworten