P.roblem s.olved :)



  • Folgendes Problem, wir kommen da nicht weiter:
    bisher haben wird das alle schon gemacht:

    /*
     * Klassen.h
     *
     *  Created on: 16.09.2009
     *      Author: c.groupe
     */
    
    #ifndef KLASSEN_H_
    #define KLASSEN_H_
    
    #include <iostream.h>
    #include <cstring>
    using namespace std;
    
    class Haus
    {
    	public:
    		double breite, tiefe, hoehe,dachkosten;
    
    		Haus();
    		void einlesen();
    		virtual double erstellungskosten()=0;
    
    };
    
    class Architektenhaus 	: public Haus		// Erben
    {
    	public:
    		double architektenhonorar;
    		double kubikmeterpreis;
    
    		void einlesen();
    		double erstellungskosten();
    };
    
    class Bautraeger_Haus	: public Haus		// Erben
    {
    	public:
    		double mauerpreis;
    
    		void einlesen();
    		double erstellungskosten();
    };
    
    class Fertighaus		: public Haus		// Erben
    {
    	public:
    		int stockwerke;
    		double quadratmeterpreis;
    
    		void einlesen();
    		double erstellungskosten();
    };
    
    #endif /* KLASSEN_H_ */
    
    /*
     * Klassen.cpp
     *
     *  Created on: 16.09.2009
     *      Author: c.groupe
     */
    #include "Klassen.h"
    #include <iostream.h>
    #include <cstring>
    using namespace std;
    
    void Haus::einlesen()
    		{
    			cout << "Haus: Breite eingeben:\n"; cin >> breite;
    			cout << "Haus: Tiefe eingeben:\n"; cin >> tiefe;
    			cout << "Haus: Höhe eingeben:\n"; cin >> hoehe;
    			cout << "Haus: Dachkosten eingeben:\n"; cin >> dachkosten;
    		}
    double Haus::erstellungskosten()
    {
    	return 0;
    }
    
    void Architektenhaus::einlesen()
    {
    	cout << "Haus: Kubikmeterpreis eingeben:\n"; cin >> kubikmeterpreis;
    	cout << "Haus: Architektenhonorar eingeben:\n"; cin >> architektenhonorar;
    }
    
    double Architektenhaus::erstellungskosten()
    {
    	return double(dachkosten + architektenhonorar +
    			(breite*tiefe*hoehe*kubikmeterpreis));
    }
    
    void Bautraeger_Haus::einlesen()
    {
    	cout << "Haus: Mauerpreis eingeben:\n"; cin >> mauerpreis;
    }
    
    double Bautraeger_Haus::erstellungskosten()
    {
    	return double(dachkosten + (breite*tiefe*hoehe*2*mauerpreis) +
    			(tiefe*hoehe*2*mauerpreis));
    }
    
    void Fertighaus::einlesen()
    {
    	cout << "Haus: Stockwerkes eingeben:"; cin >> stockwerke;
    	cout << "Haus: Quadratmeterpreis eingeben:"; cin >> quadratmeterpreis;
    }
    
    double Fertighaus::erstellungskosten()
    {
    	return double(dachkosten + (breite*tiefe*quadratmeterpreis*stockwerke));
    }
    

    Gut bei der Main haben wir zwei verschiedene sachen probiert..

    /*
     * main.cpp
     *
     *  Created on: 16.09.2009
     *      Author: c.groupe
     */
    
    #include "Klassen.h"
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int main()
    {
    
    	const int maxHaeuser=3;
    	Architektenhaus 	A;
    	Bautraeger_Haus 	B;
    	Fertighaus 			C;
    
    	// Feld mit Basisklassen, initialisiert mit NULL
    	Haus* HausZeiger[maxHaeuser] = 0;
    
    	//Zuweisung von Haeusern
    	HausZeiger[0] = &A;
    	HausZeiger[1] = &B;
    	HausZeiger[2] = &C;
    
    	//Ausgeben von Objekten
    	int i=0;
    	while (HausZeiger[i])
    		HausZeiger[i++]->erstellungskosten();
    	return 0;
    
    	/*
    	int ok;
    	int wahl;
    
    	cout << 	"\n\t## Häuserverwaltung	##\n" ;
    	cout <<		"\t##########################\n";
    	cout <<		"\t## Hauptmenue: 		##\n";
    	cout <<		"\t## Wählen Sie ein Haus  ##\n";
    	cout <<		"\t##1) Architektenhaus 	##\n";
    	cout <<		"\t##2) Bauträger-Haus 	##\n";
    	cout <<		"\t##3) Fertighaus 	##\n";
    	cout <<		"\t##4) Programm beenden 	##\n";
    	cout <<		"\t##########################\n";
    	cin >> wahl;
    
    	switch(wahl)
    	{
    		case 1:		Architektenhaus();
    			break;
    		case 2:		Bautraeger_Haus();
    			break;
    		case 3:		Fertighaus();
    			break;
    		case 4: ok = 0; cout << "Programm wird beendet!\n";
    			break;
    
    		default: cerr << "Fehler: Falsche Eingabe\n";
    	}
    	while (ok!=0);
    	return 0;*/
    }
    

    Zur Frage:
    wir sollen ja ein Feld mit Zeigern auf 3 Häusern anlegen,
    die Klasse Erstellungskosten soll ja rein virtuell sein,
    und von der Virtuellen (abstrakten) klasse kann man ja kein objekt erzeugen,
    kanns uns ja jemand helfen, und vielleicht noch tips zur schleife geben.

    wir wissen einfach nicht wie wir das umsetzen sollen..


  • Mod

    Man kann zwar keine Instanzen von abstrakten Klassen erstellen, aber Zeiger auf abstrakte Klassen sind überhaupt kein Problem. Probier' es einfach mal aus.



  • Hatte mal lust HA's zu machen, hier der lauffähige Code laut Aufgabe:

    File: haus.hpp

    #ifndef HAUS_HPP_INCLUDED
    #define HAUS_HPP_INCLUDED
    
    class Haus
    {
        protected:
          double Breite;
          double Tiefe;
          double Hoehe;
          double Dachkosten;
        public:
          virtual void einlesen();
          virtual void Erstellungskosen()=0;
    };
    
    class ArchitektenHaus : public Haus
    {
        private:
          double ArchitektenHonorar;
          double Kubikmeterpreis;
        public:
          virtual void einlesen();
          virtual void Erstellungskosen();
    };
    
    class BautraegerHaus : public Haus
    {
        private:
          double Mauerpreis;
        public:
          virtual void einlesen();
          virtual void Erstellungskosen();
    };
    
    class FertigHaus : public Haus
    {
        private:
          short Stockwerke;
          double Quadratmeterpreis;
        public:
          virtual void einlesen();
          virtual void Erstellungskosen();
    };
    
    #endif // HAUS_HPP_INCLUDED
    

    File: haus.cpp

    #include <iostream>
    #include "haus.hpp"
    
    using namespace std;
    
    /* class Haus */
    
    void Haus::einlesen()
    {
        cout << "Hoehe: ";      cin >> Hoehe;
        cout << "Breite: ";     cin >> Breite;
        cout << "Tiefe: ";      cin >> Tiefe;
        cout << "Dachkosten: "; cin >> Dachkosten;
    }
    
    /* class ArchitektenHaus */
    
    void ArchitektenHaus::einlesen()
    {
        cout << "Daten Architektenhaus: " << endl;
        Haus::einlesen();
        cout << "Architektenhonorar: "; cin >> ArchitektenHonorar;
        cout << "Kubikmeterpreis: ";    cin >> Kubikmeterpreis;
    }
    
    void ArchitektenHaus::Erstellungskosen()
    {
        cout << "Erstellungskosten ArchitektenHaus: "
             << Dachkosten + ArchitektenHonorar +
                Breite * Tiefe * Hoehe * Kubikmeterpreis
             << endl;
    }
    
    /* class BautraegerHaus */
    
    void BautraegerHaus::einlesen()
    {
        cout << "Daten Bautraegerhaus: " << endl;
        Haus::einlesen();
        cout << "Mauerpreis: "; cin >> Mauerpreis;
    }
    
    void BautraegerHaus::Erstellungskosen()
    {
        cout << "Erstellungskosten BauträgerHaus: "
             << Dachkosten +
                Breite * Hoehe * 2 * Mauerpreis +
                Tiefe  * Hoehe * 2 * Mauerpreis
             << endl;
    }
    
    /* class FertigHaus */
    
    void FertigHaus::einlesen()
    {
        cout << "Daten Fertighaus: " << endl;
        Haus::einlesen();
        cout << "Stockwerke: ";        cin >> Stockwerke;
        cout << "Quadratmeterpreis: "; cin >> Quadratmeterpreis;
    }
    
    void FertigHaus::Erstellungskosen()
    {
        cout << "Erstellungskosten BauträgerHaus: "
             << Dachkosten +
                Breite * Tiefe * Quadratmeterpreis * Stockwerke
             << endl;
    }
    

    File: main.cpp

    #include "haus.hpp"
    
    int main()
    {
        Haus* haus[3];
    
        haus[0] = new ArchitektenHaus();
        haus[1] = new BautraegerHaus();
        haus[2] = new FertigHaus();
    
        for (int i = 0; i < 3; i++)
          haus[i]->einlesen();
    
        for (int i = 0; i < 3; i++)
        {
          haus[i]->Erstellungskosen();
          delete haus[i];
        }
    
        return 0;
    }
    

    EDIT: main.cpp korregiert



  • wow danke. habes soweit verstanden, aber noch ein problem mit der "Friend class"

    Zunächst mal das Programm: Achtung, es ist eine Andere aufgabe 😉

    /*
     * artikel.hpp
     *
     *  Created on: 16.09.2009
     *      Author: c.groupe
     */
    
    #ifndef ARTIKEL_HPP_INCLUDED
    #define ARTIKEL_HPP_INCLUDED
    
    class Artikel
    {
    	protected:
    		char Name[17];
    		double Einkaufspreis;
    		int Anzahl;
    	public:
    		virtual void einlesen();
    		virtual void Verkaufspreis()=0;
    };
    
    class Felge		: public Artikel
    {
    	private:
    		char Material;;
    	public:
    		double VP_Felge;
    		virtual void einlesen();
    		virtual void Verkaufspreis();
    };
    
    class Reifen	: public Artikel
    {
    	private:
    		char Dimension[9];
    	public:
    		double VP_Reifen;
    		virtual void einlesen();
    		virtual void Verkaufspreis();
    };
    
    class Rad 		: public Artikel
    {
    	public:
    		double VP_Rad;
    		friend class Felge;
    		friend class Reifen;
    		virtual void einlesen();
    		virtual void Verkaufspreis();
    };
    
    #endif /* ARTIKEL_HPP_INCLUDED */
    
    /*
     * artikel.cpp
     *
     *  Created on: 16.09.2009
     *      Author: c.groupe
     */
    
    #include <iostream>
    #include "artikel.hpp"
    using namespace std;
    
    /* class Artikel */
    
    void Artikel::einlesen()
    {
    	cout << "Namen:\t"; 			cin >> Name;
    	cout << "Einkaufspreis:\t"; 	cin >> Einkaufspreis;
    	cout << "Anzahl:\t";			cin >> Anzahl;
    }
    
    /* class Felge */
    
    void Felge::einlesen()
    {
    	cout << "Daten Felge: " << endl;
    	Artikel::einlesen();
    	cout << "Material (Stahl oder Alu)" << endl;
    }
    
    void Felge::Verkaufspreis()
    {
    	VP_Felge = Einkaufspreis*1.5;
    	cout << "Verkaufspreis Felge: " << VP_Felge << endl;
    }
    
    /* class Reifen */
    
    void Reifen::einlesen()
    {
    	cout << "Dimension Eingeben: " << Dimension << endl;
    }
    
    void Reifen::Verkaufspreis()
    {
    	VP_Reifen = Einkaufspreis*1.3;
    	cout << "Verkaufspreis Reifen: " << VP_Reifen << endl;
    }
    
    /* class Rad */
    
    void Rad::einlesen()
    {
    	cout << "In Rad gibts nichts zum Einlesen.. ";
    }
    
    void Rad::Verkaufspreis()
    {
    	VP_Rad = (VP_Reifen + VP_Felge)*0.9;
    	cout << "Verkaufspreis Rad: " << VP_Rad << endl;
    }
    
    /*
     * main.cpp
     *
     *  Created on: 16.09.2009
     *      Author: c.groupe
     */
    
    #include "artikel.hpp"
    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    int main()
    {
    	Artikel* artikel[3];
    
    	artikel[0] = new Felge();
    	artikel[1] = new Reifen();
    	artikel[2] = new Rad();
    
    	for (int i = 0; i < 3; i++)
    		artikel[i]->einlesen();
    
    	for (int i = 0; i < 3; i++)
    	{
    		artikel[i]->Verkaufspreis();
    		delete artikel[i];
    	}
    	return 0;
    }
    

    Diese Aufgabe ist ähnlich der ersten.

    Das Problem liegt in Zeile 58 der artikel.cpp
    wieso erkennt er nicht die VP_Felge und VP_Rad ?

    Der Verkaufspreis wird bei der "class Rad" so ermittelt,
    indem der Verkaufspreis der Felge zum Verkaufspreis des Reifens addiert wird
    und von dieser Summer 10% abgezogen werden.

    Dachte eigentlich das wäre ne ganz gute lösung, jedoch wills nicht so
    wie ich mir das gedacht habe.. 😉


  • Mod

    c.groupe schrieb:

    Diese Aufgabe ist ähnlich der ersten.

    Das Problem liegt in Zeile 58 der artikel.cpp
    wieso erkennt er nicht die VP_Felge und VP_Rad ?

    Du meinst wohl eher: "wieso erkennt er nicht die VP_Felge und VP_Reifen ?"

    Antwort: Woher soll das Rad sie kennen, es hat in deiner Struktur nichts mit Felge und Reifen zu tun.

    Ein passendes Klassendesign:
    Reifen, Rad und Felge sind Artikel -> public erben von Artikel
    Ein Rad hat einen Reifen und eine Felge -> Reifen und Felge als member in Rad



  • Zeig doch mal dein Aufgabenblatt, ich denke es könnte sich um mehrfache Vererbung und friends handeln,

    Ach und noch was: Wenn du friend deklarierst, dann kann immer nur der zugreifen der als friend deklariert wurde aber nicht umgekehrt!

    Also bei dir:

    Reifen und Felge dürfen auf Rad zugreifen,
    aber du möchest das Rad auf Reifen und Felge zugreifen kann!

    du müsstest also friend in Reifen und Felge für Rad definieren damit Rad Zugriff auf private Elemente der Klassen hat.


  • Mod

    DeepCopy schrieb:

    Also bei dir:

    Reifen und Felge dürfen auf Rad zugreifen,
    aber du möchest das Rad auf Reifen und Felge zugreifen kann!

    du müsstest also friend in Reifen und Felge für Rad definieren damit Rad Zugriff auf private Elemente der Klassen hat.

    Das nützt aber nichts, da Reifen Rad und Felge in seinen Code keinerlei Beziehung haben, außer dass sie von Artikel erben. Da der Preis keine statische Objekteigenschaft von Reifen und Felge ist, ist dann gar nicht klar, welche Preise Rad überhaupt nehmen soll. Daher muss irgendwie eine Beziehung hergestellt werden.



  • Das weiß ich SeppJ 🙄 oder sieht mein Source-Code sooo.. NOOB-mässig aus, ausserdem hast du das Probem doch schon längst gut erklärt. :p



  • Hier die aufgabenstellung, aber nicht flamen wegen der schlechten quali, habe Aufgabe leider nicht auf dem pc gehabt.. 🙂

    - Aufgabe -


  • Mod

    c.groupe schrieb:

    Hier die aufgabenstellung, aber nicht flamen wegen der schlechten quali, habe Aufgabe leider nicht auf dem pc gehabt.. 🙂

    - Aufgabe -

    Da ist ja alles bereits ganz genau vorgegeben, du musst nur Schritt für Schritt durchgehen. Jedoch scheinst du einiges nicht richtig umgesetzt zu haben:

    class Artikel
    {
        protected:            // In der Aufgabe steht öffentlich -> public
            char Name[17];
            double Einkaufspreis;
            int Anzahl;
        public:
            virtual void einlesen();  // Taucht nirgends in der Aufgabe auf. Klassen modellieren Dinge. Du möchtest ein Modell für einen Artikel. Hast du jemals das Wort 'Artikel' sinnvoll mit dem Wort 'einlesen' in Verbindung gebracht?
            virtual void Verkaufspreis()=0;  // Verkaufspreis sollte wohl eher double und nicht void sein
    };
    
    class Felge        : public Artikel
    {
        private:           // Wird aus der Aufgabenstellung nicht klar, ob öffentlich oder nicht. Vermutlich soll es öffentlich sein. 
            char Material;; // Man könnte besser ein enum verwenden (falls du das schon kennst), damit wirklich nur Stahl und Alu gewählt werden können
        public:
            double VP_Felge;              // Wozu soll das gut sein? Der Preis wird doch schon geerbt!
            virtual void einlesen();      // Siehe oben zum Thema einlesen
            virtual void Verkaufspreis(); // void -> double
    };
    
    class Reifen    : public Artikel
    {
        private:
            char Dimension[9];      // soll vermutlich wieder öffentlich sein
        public:
            double VP_Reifen;              // siehe oben
            virtual void einlesen();       // siehe oben
            virtual void Verkaufspreis();  // void -> double
    };
    
    class Rad         : public Artikel
    {
        public:
            double VP_Rad;               // siehe oben
            friend class Felge;          // Hier sollen nach Aufgabenstellung eigene Datenfelder vom Typ Felge und Reifen hin, anstatt der friends
            friend class Reifen;         // Und das wäre auch sinnvoll, weil es die Quelle deiner Probleme ist
            virtual void einlesen();
            virtual void Verkaufspreis();// void -> double
    };
    

    dann musst du nur noch jeweils Verkaufspreis() für Rad, Reifen und Felge implementieren und eine passende main erstellen. Versuch das mal und wenn etwas nicht klar ist, fragst du wieder.



  • Dort steht doch explizit, daß in der Klasse Rad noch je ein privates Datenfeld (Element) der Klasse Felge sowie der Klasse Reifen angelegt werden muß. Und friend brauchst du hier nicht.

    Und die Funktion Verkaufspreis() solltest du noch abändern, so daß der Preis auch zurückgegeben wird, denn dann kanst du diese Funktion auch innerhalb von Rad.Verkaufspreis für die Elemente vom Typ Felge und Reifen aufrufen.



  • Aus Langeweile:

    #include <iostream>
    
    class Artikel {
    public:
    	char m_name[16];
    	double m_einkaufsPreis;
    	int m_anzahl;
    	virtual double verkaufspreis() = 0;
    };
    
    class Felge: public Artikel {
    public:
    	bool m_istStahl;
    	virtual double verkaufspreis() { return m_einkaufsPreis * 1.5; }
    };
    
    class Reifen: public Artikel {
    public:
    	char m_dimension[8];
    	virtual double verkaufspreis() { return m_einkaufsPreis * 1.3; }
    };
    
    class Rad: public Artikel {
    public:
    	virtual double verkaufspreis() { return (m_felge.verkaufspreis() + m_reifen.verkaufspreis()) * 0.9; }
    private:
    	Felge m_felge;
    	Reifen m_reifen;
    };
    
    int main()
    {
    	Artikel *artikel[3];
    	artikel[0] = new Felge();
    	artikel[1] = new Reifen();
    	artikel[2] = new Rad();
    	for(int i(0); i != 3; ++i) {
    		std::cout << artikel[i]->verkaufspreis() << std::endl;
    		delete artikel[i];
    	}
    
    	return 0;
    }
    

    Alle Angaben ohne Gewähr...


  • Mod

    Mizar schrieb:

    ...Lösung..

    Och schade, der Threadersteller wirkte auf mich lernwillig, jetzt guckt er es sich bloß an und versteht es dann nur oberflächlich.



  • Und weil's so schön ist, meine Lösung gleich hinterher:

    @Mizar Du hast mögl. den Materialtypen falsch interpretiert
    Auch die Eingabe von 16, 8 Zeichen benötigt noch ein zusätzliches '\0'

    File: Artikel.hpp

    #ifndef ARTIKEL_HPP_INCLUDED
    #define ARTIKEL_HPP_INCLUDED
    
    class Artikel
    {
        public:
          char Name[16+1]; // +1 Nullzeichen '\0'
          double Einkaufspreis;
          long Anzahl;
    
          virtual double Verkaufspreis() = 0;
    };
    
    enum MaterialTyp {Stahl = 1, Alu};
    
    class Felge : public Artikel
    {
        public:
          MaterialTyp Material;
          virtual double Verkaufspreis();
    };
    
    class Reifen : public Artikel
    {
        public:
          char Dimension[8+1]; // +1 Nullzeichen '\0'
          virtual double Verkaufspreis();
    };
    
    class Rad : public Artikel
    {
        private:
          Felge felge;
          Reifen reifen;
        public:
          virtual double Verkaufspreis();
    };
    
    #endif // ARTIKEL_HPP_INCLUDED
    

    File: Artikel.cpp

    #include "Artikel.hpp"
    
    /* class Felge */
    
    double Felge::Verkaufspreis()
    {
        return Einkaufspreis * 1.5;
    }
    
    /* class Reifen */
    
    double Reifen::Verkaufspreis()
    {
        return Einkaufspreis * 1.3;
    }
    
    /* class Rad */
    
    double Rad::Verkaufspreis()
    {
        return felge.Verkaufspreis() + reifen.Verkaufspreis() * 0.9;
    }
    

    File main.cpp

    #include <iostream>
    #include <string>
    #include "Artikel.hpp"
    
    using namespace std;
    
    int main()
    {
        Artikel* artikel[3];
        artikel[0] = new Felge();
        artikel[1] = new Reifen();
        artikel[2] = new Rad();
    
        const string art [ ] = {"Felge",
                                "Reifen",
                                "Rad" };
    
        for (int i = 0; i < 3 ; i++)
        {
          cout << "Verkaufspreis von " << art[i] << ": " << artikel[i]->Verkaufspreis() << endl;
          delete artikel[i];
        }   
    
        return 0;
    }
    

    Grüssle DC



  • Gut, ich werde mir aber erstmal die tipp zu meinen fehlern anschauen, damit ich es auch beim nächsten mal verstanden habe. Hab ja noch ein paar aufgaben die ich durchgehen muss, es sind keine HA's was auch immer das sein soll.. wir lernen für einen klausur und das sind einfach aufgaben die wir uns anschauen, .. vielen vielen dank jedenfalls an alle mitwirkenden, ihr seid echt eine rießen hilfe, zumal man auch im freundeskreis selten jemand findet der c/c++ perfekt programmieren kann 😉 ..



  • SeppJ schrieb:

    Och schade, der Threadersteller wirkte auf mich lernwillig, jetzt guckt er es sich bloß an und versteht es dann nur oberflächlich.

    Ich konnte einfach nicht anders 😞

    DeepCopy schrieb:

    @Mizar Du hast mögl. den Materialtypen falsch interpretiert
    Auch die Eingabe von 16, 8 Zeichen benötigt noch ein zusätzliches '\0'

    Gut deine Enumeration finde ich auch besser als meine leicht missverständliche bool'sche Variable. 16, 8, Nullterminierung... ich konnte "C-Strings" noch nie leiden 😉

    c.groupe schrieb:

    [...]es sind keine HA's was auch immer das sein soll[...]

    Hausaufgaben



  • Mizar schrieb:

    c.groupe schrieb:

    [...]es sind keine HA's was auch immer das sein soll[...]

    Hausaufgaben

    Wusste garnicht, das man soviel über HAs schreiben kann. Übrigens, ich fasse die Definition so auf, das es keine HAs sind, wenn man für eine Klausur lernt. HAs sind ja eigentlich vorgegebene Pflichtaufgaben, während lernen für eine Klausur nicht Pflicht ist.

    OT: Bist Du eigentlich der selbe Mizar wie im dt. SFML-Forum?

    SeppJ schrieb:

    Mizar schrieb:

    ...Lösung..

    Och schade, der Threadersteller wirkte auf mich lernwillig, jetzt guckt er es sich bloß an und versteht es dann nur oberflächlich.

    Irgendwie ist das aber insgesammt komisch. Diesmal machen sogar zwei Leute die HAs vor, sonst tendenziell eher niemand...



  • Mr X schrieb:

    OT: Bist Du eigentlich der selbe Mizar wie im dt. SFML-Forum

    Jup, genau der 🙂


  • Mod

    Mr X schrieb:

    Irgendwie ist das aber insgesammt komisch. Diesmal machen sogar zwei Leute die HAs vor, sonst tendenziell eher niemand...

    Liegt wahrscheinlich daran, wie solche Threads sonst aussehen. Hier war die Aufgabe klar, leserlich und mit Ansatz gegeben. Da hilft man lieber als bei den üblichen wirren Beschreibungen der Aufgabenstellung voller Rechtschreib- und Grammatikfehler.


Log in to reply