Programm zur Wohnflächenerfassung



  • Hallo, vielleicht kann mir jemand mal auf die Sprünge helfen. 😕

    Ich möchte ein Programm schreiben bei dem ich nacheinander die qm-Fläche beliebig vieler Zimmer eingeben kann. Die Eingabe soll mit 0 abgeschlossen werden. Dann soll die Gesamtgröße, die Zimmeranzahl und die Durchschnittsgröße je Zimmer angezeigt werden.

    Ich denke das ich für das einlesen eine while schleife brauche, oder gab es da nicht auch etwas mit break?
    Wie lese ich denn dann die Zahl der eingegeben Zimmer ein um die weiteren Berechnungen durchführen zu können?

    Grüße

    Alex



  • Nimm am besten eine fußgesteuerte Schleife und Prüfe nach jeder eingabe ob 0 eingegeben wurde. jede Zahl größer Null sammelst du auf und am ende berechnest du den durchschnitt.

    double zg,durchschnitt;
    WORD zimmeranzahl = 0;
    double gesamtflaeche = 0;
    
    do {
    
    zimmeranzahl++;
    std::cout << "Zimmer " << zimmeranzahl << ": ";
    std::cin >> zg;
    gesamtflaeche += zg;
    
    }while(zg != 0);
    
    zimmeranzahl--;
    durchschnitt = gesamtflaeche/zimmeranzahl;
    
    std::cout << "Zimmeranzahl: " << zimmeranzahl << std::endl;
    std::cout << "Gesamtgröße:  " << gesamtflaeche << std::endl;
    std::cout << "Durchschnitt: " << durchscnitt;
    
    getchar();
    

    Gruß Ramastuh



  • ich wuerde es ein kleines bisschen anders machen, m.e. etwas eleganter, aber im endeffekt kommt wohl dasselbe dabei raus:

    #include <iostream>
    #include <vector>
    using std::cin;
    using std::cout;
    using std::endl;
    using std::vector;
    
    typedef unsigned int uint;
    int main()
    {
    	vector< uint > roomSizes;
    	uint input;	
    	while( true ) // oder do{}while();, ist hier egal
    	{
    		cout << "Groesse von Raum #" << roomSizes.size() + 1 << ": ";
    		cin >> input;
    		if( input != 0 )
    			roomSizes.push_back( input );
    		else
    			break;
    	}
    
    	if( roomSizes.empty() )
    		return 0;
    
    	uint overallSize = 0;
    	for( uint i = 0; i < roomSizes.size(); i++ )
    		overallSize += roomSizes.at( i );
    
    	uint averageRoomSize = overallSize / roomSizes.size();
    
    	cout << endl << roomSizes.size() << " Raeume" << endl
    		<< "mit einer Gesamtgroesse von " << overallSize << "qm" << endl
    		<< "und einer durchschnittlichen Raumgroesse von " << averageRoomSize << "qm" << endl;
    	return 0;
    }
    

    schoenen abend noch,
    mfg,
    julian



  • #include <iostream>
    #include <vector>
    
    class Vec
    {
    public:
    	Vec();
    	unsigned int x, y, qm;
    };
    
    Vec::Vec()
    {
    	x, y, qm = 0;
    }
    
    int main()
    {
    	std::vector<Vec> room;
    	Vec rooms;
    	unsigned int input = 0xfffffffff;
    
    	while( input != 0 )
    	{
    		Vec vec;
    		std::cout<<"Neuer Raum \0";
    		std::cout<<"0 eingeben um zu beenden \0";
    		std::cout<<"Raum-Breite:";
    		std::cin>> input;
    		std::cout<<"\0";
    
    		vec.x = input;
    
    		std::cout<<"Raum-Hoehe:";
    		std::cin>> input;
    
    		vec.y = input;
    		vec.qm = vec.x * vec.y;
    	};
    
    	std::cout<<"=============================\0";
    	std::cout<<"Anzahl der eingetragenen Raeume: "<< room.size() <<"\0";
    	std::cout<<"Gesamtgroeße:";
    
    	for( std::vector<Vec>::iterator i = room.begin(); i < room.end(); ++i)
    	{
    		rooms.x += i->x;
    		rooms.y += i->y;
    		rooms.qm += i->x * i->y;
    	}
    
    	std::cout<<"Breite: "<< rooms.x << "Hoehe: "<< rooms.y << "Flaecheninhalt: "<< rooms.qm;
    
    	std::cin.get();
    }
    

    Ungetestet...



  • Wow, so viele Möglichkeiten. Das werde ich mir doch heute Abend mal in Ruhe zu Gemüte führen. Vielleicht kann ich ja nachvollziehen, was ihr da so gemacht habt!

    Auf jeden Fall mal vielen Dank!

    Gruß

    Alex



  • Ich sehe, ihr habt da wohl mit Vectoren gearbeitet. Soweit bin ich noch nicht. Ich bin erst bis zu den Funktionen gekommen. Vielleicht hat noch jemand eine Idee wie ich das Programm dann schreiben könnte?

    Grüße und Danke

    Alex



  • Funktionen haben herzlich wenig mit Vectoren zu tun. Vectoren sind die optimalen Äquivalenzen zu Arrays. Um Speicher bei einer neuen Eingabe zu allokieren, solltest du dich mal mit new und delete[] beschäftigen.



  • Soweit geht unser Schulstoff garnicht. Im Moment habe ich soviel mit der Schule zu tun, dass ich mit den geforderten und behandelten Inhalten schon gut eingedeckt bin. Passiert ja alles neben der Arbeit.
    Lässt sich das mit einer Funktion nicht lösen?

    Gruß

    Alex



  • Natürlich. Wenn du etwas nicht verstehst, dann frage deinen Lehrer, dafür ist er da.



  • alex h schrieb:

    Soweit geht unser Schulstoff garnicht. Im Moment habe ich soviel mit der Schule zu tun, dass ich mit den geforderten und behandelten Inhalten schon gut eingedeckt bin. Passiert ja alles neben der Arbeit.
    Lässt sich das mit einer Funktion nicht lösen?

    Gruß

    Alex

    es gibt prinzipiell 3 moeglichkeiten, wenn du eine unbekannte anzahl von werte (flaechen) lesen willst:

    - 1. du allokierst (reservierst) speicher fuer meinetwegen 1000 elemente oder wieviele auch immer benutzt dann aber nur soviel davon, wie du brauchst, meinetwegen den speicher fuer 5 elemente, wenn 5 eigegeben werden, oder so.
    das ist relativ einfach, weil du dich nicht besonders mit dynamischer speicherverwaltung beschaeftigen musst.

    - 2. du laesst den user zuerst eingeben, wieviele flaechen er denn eingeben will (z.b. 5), reservierst speicher fuer soviele (hier 5) elemente und hast keinen ueberfluessigen speicher reserviert.

    - 3. bei jedem neuen element reservierst du etwas mehr speicher.
    d.h. auch, dass du, wenn du alles in einem array haben willst, das ganze zeug nochmal in ein neues, groesseres array kopieren musst, und zwar jedes mal, wenn ein element dazukommt.
    diesen ansatz kannst du auch viel einfacher haben, naemlich, indem du z.b. eine der container-klasse aus der stl benutzt.
    wenn du das allerdings nicht moechtest, was verstaendlich ist, wenn du soweit noch gar nicht gelernt hast, muesstest du dir einen der oberen ansaetze aussuchen.

    mfg,
    julian


Anmelden zum Antworten