Funktionsaufruf



  • Hallo,
    bin Anfänger und wollte ein Programm schreiben, welches mir die Oberfläche eines Zylinders ausgibt. Hier der Code

    #include <iostream>
    #include <conio.h>

    using namespace std;

    int main (void)
    {
    float c =2;
    float d=3;

    float oberflaeche (c,d);

    getch();
    return 0;
    }

    float oberflaeche (float r, float h)
    {
    float a;
    a=2*3.14*r*h;
    cout << a;
    }

    Der Debugger sagt mir dann:,,Zu viele Initialisierungen'' (bezieht sich auf float oberflaeche (c,d) )
    Ich verstehe allerdings nicht, wo der Fehler ist!


  • Mod

    float oberflaeche (c,d); ist kein Funktionaufruf, sondern die Deklaration einer Funktion. Nochmal Grundlagen zu Funktionen und wie man sie aufruft studieren. Und dein Lehrwerk hat übrigens einen merkwürdigen Stil mit int main(void) und return 0 aus der main (eher typisch für C) und einem total unnötigen und unportablem conio.h . Woher ist das?



  • Hallo,

    Lies bitte mal was über Funktionen bei C++.
    z.Bsp. das hier
    http://www.cpp-tutor.de/cpp/le07/funktion.html



  • Und die Funktion oberflaeche gibt keinen Wert (mit return) zurück. Das musst du auch noch ergänzen, also

    float oberflaeche (float r, float h)
    {
    float a;
    a=2*3.14*r*h;
    return a;
    }
    

    oder verkürzt:

    float oberflaeche (float r, float h)
    {
    return 2*3.14*r*h;
    }
    


  • SeppJ schrieb:

    float oberflaeche (c,d); ist kein Funktionaufruf, sondern die Deklaration einer Funktion. Nochmal Grundlagen zu Funktionen und wie man sie aufruft studieren. Und dein Lehrwerk hat übrigens einen merkwürdigen Stil mit int main(void) und return 0 aus der main (eher typisch für C) und einem total unnötigen und unportablem conio.h . Woher ist das?

    Das würde doch eher eine Variable oberflaeche vom Typ float deklarieren, die 2 Konstruktorparameter bekommt?! So sieht das der Compiler anscheinend auch.



  • Zusammengefasst: Du willst

    #include <iostream>
    
    using namespace std;
    
    float oberflaeche(float r, float h)
    {
        return 2 * 3.14f * r * h;
    }
    
    int main()
    {
        cout << oberflaeche(2.f, 3.f) << endl;
        cin.get();
    }
    


  • Ich hätte mal noch ne Off-Topic-Frage. Gibt es eigentlich eine Regel die besagt, für welche Berechnungen man eher double und für welche man eher float benutzen sollte? Oder sollte man einfach, wenn man die Genauigkeit nicht benötigt, float benutzen? Andererseits spart man sich mit double die Promotion...


  • Mod

    Welchen Vorteil hätte denn float?

    (Die beiden Antworten die du nun wahrscheinlich gibst, gelten praktisch nur auf Grafikkarten und bei Netzwerkkommunikation. Und das sind auch die Zwecke wo man float nutzen muss (Grafikkarten) oder sich zumindest mal Gedanken darüber machen sollte (Kommunikation))



  • Danke für die Hilfe!
    Habs jetzt geändert:

    #include <iostream>
    #include <conio.h>

    using namespace std;

    float oberflaeche (float r, float h);

    int main (void)
    {
    float c =2;
    float d=3;
    float e;

    e= oberflaeche (c,d);
    cout << e;

    getch();
    return 0;
    }

    float oberflaeche (float r, float h)
    {
    float a;
    a=2*3.14*r*h;
    return a;
    }

    Funktioniert sogar 😉
    Und nochwas an SeppJ: Ich kenn das mit dem ,,int main (void)'' nur so. Weiß war, dass man da das void in der Klammer auch weglassen kann, aber ich machs trotzdem immer rein. Und den Header conio.h und getch ist nur dazu damit das dos fenster nach dem Debugging nicht direkt verschwindet



  • Besser wäre es, wenn du

    system("PAUSE")
    

    verwendest.


Anmelden zum Antworten