ergebnisse bleiben bei versch. variablen gleich



  • Hallo, ich habe folgendes Problem.
    Ich versuche das Volumen, die Mantelfläche und die Oberfläche zu berechnen.
    Nach beliebiger Eingabe der Variablen wird "Volumen betraegt: 0"
    "Mantelflaeche betraegt: 1.07506e+125" und "Oberfläche beträgt:1.07506e+125" ausgegeben.
    Wo liegt mein Fehler?
    Quellcode:
    [code="cpp"]
    #include <iostream>
    using namespace std;

    class zylinder
    {
    public:
    double h, R, r, b, V, M, O;
    double pi = 3.14;

    void volumen()
    {
    V = pi*R*R*h - pi*r*r*h;
    cout << "volumen betraegt: " << V << endl;
    }
    void mantelfläche()
    {
    M = 2 * pi*(R + r)h;
    cout << "mantelflaeche betraegt: " << M << endl;
    }
    void oberfläche()
    {
    O = 2 * pi
    (R + r)*(R - r + h);
    cout << "oberflaeche betraegt: " << O << endl;
    }
    };
    float main()
    {
    double h, R, r;
    cout << "hoehe eingeben: ";
    cin >> h;
    cout << endl;
    cout << "aussenradius eingeben: ";
    cin >> R;
    cout << endl;
    cout << "innenradius eingeben: ";
    cin >> r;
    cout << endl;
    double b = R - r; // wanddicke berechnen
    cout << "wanddicke betraegt: " << b << endl;
    cout << endl;

    zylinder myzylinder;
    myzylinder.volumen();
    zylinder myzylinder2;
    myzylinder2.mantelfläche();
    zylinder myzylinder3;
    myzylinder3.oberfläche();

    system("pause");
    }



  • hier noch einmal ein link für den Quellcode:
    http://ideone.com/XYSG8W



  • Deine Membervariablen in der Zylinderklasse sind alle nicht initialisiert. Versuch es mal mit nem Konstruktor.

    PS: int main



  • #include <iostream> 
    
    using namespace std; 
    
    class zylinder 
    { 
        public: 
            double h, R, r, b, V, M, O; // nicht gerade aussagekraeftige variablennamen
            double pi = 3.14; // pi als membervariable?
    
            void volumen() 
            { 
                V = pi*R*R*h - pi*r*r*h; // V kann hier auch lokal sein
                cout << "volumen betraegt: " << V << endl; // endl == '\n' + flush. du brauchst nur '\n'
            } 
            void mantelfläche() // ne man, keine umlaute im Quellcode.
            { 
                M = 2 * pi*(R + r)*h; // M kann hier auch lokal sein
                cout << "mantelflaeche betraegt: " << M << endl; // Umlaute im Quellcode, aber nicht in der Ausgabe?!
            } 
            void oberfläche() // Umlaute ...
            { 
                O = 2 * pi*(R + r)*(R - r + h); // O kann hier auch lokal sein
                cout << "oberflaeche betraegt: " << O << endl; 
            } 
    }; 
    
    float main() // wow. float. niemals.
    { 
        double h, R, r; 
        cout << "hoehe eingeben: "; 
        cin >> h; 
        cout << endl; 
        cout << "aussenradius eingeben: "; 
        cin >> R; 
        cout << endl; 
        cout << "innenradius eingeben: "; 
        cin >> r; 
        cout << endl; 
        double b = R - r; // wanddicke berechnen 
        cout << "wanddicke betraegt: " << b << endl; 
        cout << endl; 
    
        zylinder myzylinder; 
        myzylinder.volumen(); 
        zylinder myzylinder2; 
        myzylinder2.mantelfläche(); 
        zylinder myzylinder3; 
        myzylinder3.oberfläche(); 
    
        system("pause"); // unnoetig und platformabhaengig. schlechte loesung. Such mal im Forum, da gibts bessere loesungen.
    }
    

    Siehe Kommentare und wie man Codetags verwendet.

    Dein Problem ist, dass du zu glauben scheinst, wenn du für Variablen den selben Namen benutzt, sind sie identisch. Das ist nicht so. Dein h, R und r aus der main-funktion sind nicht dieselben wie die in Zylinder.
    Ohnehin kannst du hierfür auch einfache Funktionen nehmen. Wozu die Klasse?

    Dein Problem wäre hier einfach zu lösen, du könntest direkt die entsprechenden Variablen deines Zylinders setzen. Besser wäre aber, das gleich richtig zu lösen. Neben freien Funktionen wäre das Verwenden eines Konstruktors für Zylinder auch denkbar.

    main sollte int zurück geben.

    Das sieht alles ziemlich rumgeraten aus. Welche Ressourcen verwendest du zum lernen?



  • so? http://ideone.com/vwrFbv Zeile 25
    Das Programm will nicht starten.
    Fehlermeldung:
    Fehler 1 error LNK2019: Verweis auf nicht aufgel÷stes externes Symbol ""public: __thiscall zylinder::zylinder(void)" (??0zylinder@@QAE@XZ)" in Funktion "_main".



  • danke für die Antwort.
    Ich soll die Berechnung des Volumens, Mantelfläche und Oberfläche in einer Klasse auslagern und über die main nur noch aufrufen.
    Ich verwende das Skript meines Lehrers als Ressource 😞 😞



  • Ich hab jetzt mal zunächst die Variablen aus der class und main ausgeschnitten und als globale Variablen festgelegt.Die Ergebnisse werden richtig berechnet.
    Ist das ein gültiger Weg oder kann man das besser lösen?Bin noch blutiger Anfänger.
    (wie gesagt, meine Aufgabe war es diese 3 Methoden über eine Klasse auszulagern)



  • Ich hab jetzt mal zunächst die Variablen aus der class und main ausgeschnitten und als globale Variablen festgelegt.Die Ergebnisse werden richtig berechnet.
    Ist das ein gültiger Weg oder kann man das besser lösen?Bin,wie man unschwer erkennt, noch blutiger Anfänger.
    (wie gesagt, meine Aufgabe war es diese 3 Methoden über eine Klasse auszulagern)



  • Übergib den Funktionen die Werte als Parameter:

    void volumen(double h, double R, double r)
    

    Als nächstes solltest du den Konstruktor mit Parametern erzeugen (weiteres Stichwort dazu: Initialisierungsliste).



  • hat geklappt.Danke für die Hilfe!


Anmelden zum Antworten