Kegel berechnen mit C???



  • Hi
    ich schreib am Donnerstag ne Klausur in der wir wahrscheinlich ein C Programm schreiben sollen in dem ein Kegel berechnet werden soll!
    Das ganze soll mit einem DOS C Editor geschrieben werden, ich glaub mit Turbo C oder C++!
    Könnte mir jemand den Quelltext hier posten oder ne gute Seite oder so sagen?
    THX
    jarule2001



  • Hallo,

    was soll den an dem Kegel berechnet werden?
    Oberflaeche?
    EDIT Volumen? = (Grundflaeche * Hoehe) * (1/3) \\hier war natuerlich mal gemeint

    Aber dafuer willst du nicht wirklich das dir einer ein Program schreibt?



  • Wo liegt dein Problem? Keine Mathematik- oder keine C-Kenntnisse? Meinst du man wird den Rest deine Lebens deine Aufgaben für dich erledigen.

    Das Volumen eines Kegels wird berechnet durch

    r^2*pi*h
    V = ----------
            3
    


  • Man, man, man... Da findet ihr durch Beschiss schon raus was in der Klausur vorkommt und dann klappt das nicht mal so was super-simples (was ihr normal in der Klausur können sollt!) zu Hause selber herauszubekommen ? Boah ist das schlecht ! 👎



  • 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