Kegel berechnen mit C???



  • Langsam wundert mich die Pisa-Studie nicht mehr...



  • Kunden gibt es. 🙄
    Aber danke für die Idee zum Programm.
    Schreibe ich mir eins.



  • float kegelvolumen(float radius, float hoehe)
    {
        float volumen = 0.0;
        float pi = 3.14;
    
        volumen = (((radius * radius) * pi) * hoehe) / 3;
    
        return volumen;
    }
    

    Frage an die Meister:
    Kann ich die Formel für das Kegelvolumen so benutzen?



  • ..



  • Ich bedanke mich bei Erhard Henkes für die Hilfe. 🙂
    Über den Fehler "/ 3" statt "/ 3.0" ärgere ich mich.
    War wohl schon zu spät.



  • return (radius * radius * PI * hoehe / 3.0);

    Bei sowas bekomm ich immer Angst, dass die Prioritäten der Operatoren nicht passen.

    1.) 1 / 2 * 3 == (1 / 2) * 3
    2.) 1 / 2 * 3 == 1 / (2 * 3)

    Was davon wird berechnet? Ich hab keine Ahnung! Aus Sicherheitsgründen schreib ich bei sowas immer die Klammern ausdrücklich hin.
    __
    Grüße, DennisB



  • Das erste.
    1/23 != 1/(23)



  • Ja, aber trotzdem lieber eine Klammer mehr als ein wirres Ergebnis, bei dem man auf den ersten Blick nicht einmal merkt, dass es falsch ist.
    Da liegt auch IMO ein großes Problem. Kennt eigentlich C/C++ die Prioritätenregel? Ich dachte bisher immer nicht.

    MFG, the flyingCoder.



  • flyingCoder schrieb:

    Ja, aber trotzdem lieber eine Klammer mehr als ein wirres Ergebnis, bei dem man auf den ersten Blick nicht einmal merkt, dass es falsch ist.
    Da liegt auch IMO ein großes Problem. Kennt eigentlich C/C++ die Prioritätenregel? Ich dachte bisher immer nicht.

    MFG, the flyingCoder.

    Natürlich kennt es die Prioritätenregel! Und natürlich wird Punkt vor Strich gerechnet. Leider gibt es mehr Operatoren, die weitere Prioritäten haben.



  • 😕 Bin etwas verwirrt.
    Ist denn nun meine Klammersetzung am Ende doch richtig?
    Oder zumindest nicht falsch?
    Ich habe gelernt, daß von der innersten
    Klammer nach außen berechnet wird.
    Bei ((a < b) && (c > b)) wird doch auch erst die innere
    Bedingung abgefragt.
    Die Reihenfolge spielt bei den Multiplikatoren hier keine Rolle.
    Ich habe die Formel auch schon PI * r * r * h / 3 gesehen.
    Aber ich wollte nur Klarheit schaffen.
    In obigen Fall wurde erst r * r dann * PI dann * h und dann / 3 gerechnet.
    Im Programm habe ich es jetzt wie folgt.

    float kegelvolumen(float radius, float hoehe)
    {
        const float PI = 3.1415926535;
        return (PI * (radius * radius) * hoehe / 3.0);
    }
    

    Das solte doch ok sein. Oder?
    Das Ergebnis ist es jedenfalls.



  • Die Formel ist natürlich OK.

    Es geht da oben nur darum, dass man nicht zuviele Klammern setzen sollte. Bei zuvielen Klammern kann auch die Übersichtlichkeit verloren gehen, genauso wie bei zu wenig 😉 Gebraucht wird in der Formel keine Klammer, weil der Compiler die Berechnung richtig abläuft, so wie wir es alle in der Schule gelernt haben (Punkt vor Strich und von links nach rechts).



  • float kegelvolumen(float radius, float hoehe) 
    { 
        const float PI = 3.1415926535; 
        return (PI * (radius * radius) * hoehe / 3.0); 
    }
    

    Leute, bei float gehört hinter die Zahl ein f und die Klammern könnt ihr euch auch völlig sparen, außerdem ist PI nur einmal verwendet, muss es nicht als Konstante verwendet werden, also:

    inline float kegelvolumen(float radius, float hoehe) 
    { 
        return 3.1415926535f * radius * radius * hoehe / 3.0f; 
    }
    


  • Hi Mis2com,
    Diese Funktion ist nur ein Teil eines Programmes, welches viele
    geometrische Figuren berechnet.
    Und da PI in diesem Proggi schon nicht mehr ganz lokal liegt,
    kann "const" für PI ja nicht schaden.
    Selbst lokal leuchtet mir "const" bei PI ein.
    Die Setzung der Klammern ist, wie AJ, tobidope, _DennisB_ und andere
    geschrieben haben, "in diesem Fall" zwar nicht so wichtig,
    der eigenen Übersichtlichkeit aber durchaus dienlich.
    Ich zwinge den Compiler nur, den radius * radius, als erstes zu berechnen.
    Na und?

    Bei der Berechnung der Oberfläche des Kegels wird es interessanter:
    PI * r * r + PI * r * seite;
    Da setze ich dann doch lieber ein paar Klammern.
    ⚠ Hinweis: Ich bin noch Anfänger und daher ist mir eine
    (sinnvolle) Klammersetzung lieber.
    Danke für den Hinweis mit 3.0f. 🙂



  • Ist PI nicht schon in einer Headerdatei definiert?? (fällt mir grad so ein)



  • @Erhard:
    Wenn du dich schon über sinnlose Klammern beschwerst, dann kannst du die eine, die du gesetzt hast auch wegmachen, die ist nämlich 100% sinnlos.


Anmelden zum Antworten