Was bedeutet intern darstellung?



  • Hallo! Ich muss einen Programm schreiben, den die Basis und den Exponent ausgeben sollte. Hier hab ich einen Konstruktor erstellt:

    Exponential(int b = 1, int e = 1): basis{b}, exp{e} {
    		if(b==0 && e==0) {
    			throw runtime_error("");
    		}
    		if(b==0 && e>=0) {
    			cout << "0^1" << endl;
    		}
    		if(b==0 && e<0) {
    			cout << "0^-1" << endl;
    		}
    		if(b==1) {
    			cout << "1^0";		
    		}
    		if(b!=0 && e==0) {
    			ausgabe = 1;
    		}
    
    	}
    

    Und jetzt wenn ich in main z.B. Exponential k1{1,1}; cout << k1; habe sollte das als 1^0 dargestellt werden, aber ich schaffe es nicht 😞 Ich wäre froh wenn jemand von euch mir helfen könnte. Danke im Voraus!


  • Mod

    Bitte vollständiges Programm und Fehlerbeschreibung. Denn wenn man dein Programm zu etwas ausführbarem ergänzt, dann kommt das raus, was du wünscht:
    http://ideone.com/bLeq5E



  • Ich verstehe die Aufgabe ehrlich gesagt nicht ganz.

    ich in main z.B. Exponential k1{1,1}; cout << k1; habe sollte das als 1^0 dargestellt werden

    und

    Ich muss einen Programm schreiben, den die Basis und den Exponent ausgeben sollte

    erklären sich nicht für mich? warum 1^0 ausgeben?

    class Exponential
    {
    public:
        Exponential(int b = 1, int e = 1)
            : basis{b}
            , exp{e}
        {
            if(b==0 && e==0) {
                throw runtime_error(""); // hier bitte eine sinnvolle Fehlermeldung eintragen. Falls überhaupt nötig, weil 0^0 ist well defined = 1
            }
        }
    
        // Das ist was dir fehlt um es auf cout auszugeben.
        // Das ist eine Überladung des << operators, wie in "std::cout << bla"
        // Hiermit kann der Compiler dein Beispiel unten im Post übersetzen
        // Notiz: operator als friend wär etwas schöner.
        std::ostream& operator<<(std::ostream& stream)
        {
           stream << basis << "^" << exp; // so habe ich den ersten Satz deines Posts verstanden. Passt aber nicht zu der Ausgabe in deinem Konstruktor.
           return stream;
        }
    
    private:
        int basis;
        int exp;
    };
    

    Vielleicht sehe ich die unterliegende Logik nicht.



  • Die Frage ist nur, wie kann ich das retournieren? Das es anstatt 1^1 ergibt 1^0 weil 4er if statement sollte dargestellt werden. Ganzes Programm hat drei files,



  • Captain_Levi schrieb:

    Die Frage ist nur, wie kann ich das retournieren? Das es anstatt 1^1 ergibt 1^0 weil 4er if statement sollte dargestellt werden. Ganzes Programm hat drei files,

    Das versteh ich auch nicht *hände vor gesicht halt affen emoticon*.

    "4er if statement sollte dargestellt werden" ist das eine Aufgabenanforderung?
    Kannst du das nochmal etwas weniger stückhaft beschreiben?



  • Hier ganzen Programm:

    https://www.dropbox.com/sh/60y7z7euru211m5/AAAt2MfO-7iF-iNdAiQafjA5a?dl=0

    Link von oben ist nur zu sehen, musst ihr nicht herunterladen!

    Das heißt, 1^n (für alle n) sollte intern immer als 1^0 dargestellt werden.



  • 5cript schrieb:

    if(b==0 && e==0) {
        throw runtime_error(""); // hier bitte eine sinnvolle Fehlermeldung eintragen. Falls überhaupt nötig, weil 0^0 ist well defined = 1
    }
    

    In meiner Welt ist 0^0 ähnlich gut wie 0/0 definiert. Wie kommst du darauf, dass es well-defined und 1 sein soll? Nur weil es in manchen Fällen hilfreich ist, wenn hier der Wert 1 rauskommt?


  • Mod

    Diese "manchen Fälle" sind aber in guter Näherung alle Fälle¹, weshalb es die übliche Lehre ist, 0^0 als 1 zu definieren.

    ¹: Ich glaube, der einzige Fall, wo 0^0 = 0 Sinn machen würde ist die Betrachtung der Serie 0^N. Und da ist es bloß Ästhetik.



  • Aufgabenanforderung ist das die 0^0 nicht erlaubt ist. Und falls es das passiert, sollte das Programm eine Exception werfen. Ich hoffe dass ihr verstanden könntet, was ich brauche. Mein Deutsch ist nicht perfekt, deshalb bin ich vielleicht schwierig zu verstehen.


  • Mod

    Es ist durchaus ok, Englisch zu benutzen, wenn du das besser kannst. Es gibt zumindest meinerseits nämlich tatsächlich Probleme, dich zu verstehen. Du kannst natürlich auch andere Sprachen probieren, vielleicht spricht sie ja jemand hier im Forum.

    Ganz allgemein bist du derzeit völlig auf dem Holzweg, wenn ich die Aufgabe richtig verstanden habe. Du bist viel zu sehr darauf fokussiert, die gewünschte Ausgabe zu erzeugen und gar nicht auf die gewünschte Logik. Die richtige Ausgabe kommt aber von alleine, wenn die Logik richtig ist. Grundvoraussetzung zur Verbesserung wäre erst einmal, dass man Logik und Ausgabe trennt.


Anmelden zum Antworten