======================= PROGRAMMIEREN IN C++ P. PFAHLER SOMMERSEMESTER 1997 ======================= Uebungsblatt 4 vom 15.5.1997 Bearbeitungsdauer 3 Wochen! ----------------------------- Aufgabe 8) ---------- Implementieren Sie die Klasse "BigInt" zum Rechnen mit beliebig grossen positiven ganzen Zahlen. "BigInt" stellt intern die Zahlen als Folge von Dezimalziffern dar (BCD). Als vorerst einzige Operation auf "BigInts" sei die Addition definiert. "BigInt"-Objekte werden entweder mit ganzen Zahlen oder mit Strings aus Dezimalziffern initialisiert. Bsp.: BigInt b1 = 17; BigInt b2 = "12345675432568832204576" Die Klasse "BigInt" ist wie folgt deklariert: class BigInt { private: char *repr; // die Darstellung als char-array unsigned int numdigits; // die Anzahl der Ziffern public: BigInt(); // Default-Konstruktor BigInt(unsigned int v); // Wandelt unsigned in BigInt-Darstellung BigInt(char *s); // Wandelt Literal in BigInt-Darstellung ~BigInt() // Der Destruktor mit { delete [] repr;} // Inline-Definition BigInt(const BigInt &ori);// Der Copy-Konstruktor BigInt operator+ (const BigInt &arg); // Die Addition void operator= (const BigInt &right); // Die Wertzuweisung (folgt) void print(void); // Ausgabe auf cout }; Der Zuweisungsoperator ist wie folgt implementiert: void BigInt::operator = (const BigInt& right) { if (this == &right) return; delete [] repr; numdigits=right.numdigits; repr = new char[numdigits]; if (!repr) { cerr << " No more memory\n"; exit(77); } for (int i =0; i < numdigits; i++) repr[i] = right.repr[i]; } Tips: - In repr die Zahlen 0, .. , 9 speichern, nicht '0', ..., '9'. - Niederwertigste Ziffer in repr[0] speichern. a) Wofuer ist die Abfrage "if (this == &right)" in der Definition des Zuweisungs-Operators? b) Implementieren Sie die restlichen BigInt-Funktionen und den Additionsoperator. c) Testen Sie Ihrer Implementierung (unter anderem!) mit // bigtest.cc #include #include "BigInt.h" int main() { BigInt bi=1; for (int i = 0; i <= 222; i++) { cout << "2^" << i << " = "; bi.print(); cout << endl; bi = bi + bi; } cout << "Probe: "; bi="6739986666787659948666753771754907668409286105635143120275902562304"; bi.print(); cout << '\n'; } Aufgabe 9) ----------- Die Stadt Paderborn plant ein Parkhaus mit 12 Einstellplaetzen. Es wird ein automatisches Parkhaus: Ankommende Wagen werden auf ein Foerderband abgestellt und selbsttaetig in eine freie Parkbox plaziert. Dabei wird das Nummernschild von einer Kamera abgetastet und gespeichert. Zum Abholen seines Fahrzeugs gibt der Fahrer seine Autonummer ein, wodurch der Wagen aus der Box geholt und zum Ausgang transportiert wird. Simulieren Sie das automatische Parkhaus in C++. Sie brauchen: - die Klasse Parkhaus - die ueblichen Konstruktoren/Destruktor - Elementfunktionen rein(autonummer), raus(autonummer), wosindsie() // liste der autos in den belegten boxen. Ihre Simulation muss natuerlich Sonderfaelle behandeln: - alle Boxen sind voll - das Auto mit der angeforderten Nummer ist nicht im Parkhaus. - zwei Autos mit der gleichen Nummer (Polizei rufen). Geben sie neben dem Programmcode einen Testlauf ab, in dem auch die Behandlung obiger Sonderfaelle vorkommt. Aufgabe 10) (Entwurf und Implementierung) ----------------------------------------- (Dies ist die erste Aufgabe, die neben der Implementierung in C++ auch den Entwurf des Programms enthaelt). Es soll ein einfacher Vokabeltrainer Deutsch-Englisch entwickelt werden. Der Vokabeltrainer fragt den Benutzer nach der englischen Uebersetzung deutscher Vokabeln. Der Benutzer gibt seine Antwort ein, die daraufhin vom Vokabeltrainer bewertet wird ("richtig"/"falsch"). Der Vokabeltrainer fuehrt ausserdem eine Statistik, die bei Programmende ausgegeben wird (z.B. "9 von 12 Fragen richtig beantwortet (75%)"). Das Woerterbuch wird zu Begin von einer Textdatei eingelesen. Es besteht aus Eintraegen der Form "EnglischesWort DeutschesWort". Ein kleines Beispiel-Woerterbuch liegt diesem Uebungsblatt bei (Datei "dict"). Natuerlich kann ein englisches oder deutsches Wort in mehreren solcher Paare vorkommen. Beispiel: boyfriend Freund friend Freund girlfriend Freundin friend Freundin Alles was diese Aufgabenstellung nicht spezifiziert, ist Ihrer freien Gestaltung ueberlassen. Bitte achten Sie auf saubere Strukturierung und gute Kommentierung ihres Programms. Verfassen Sie insbesondere eine kurze Beschreibung ihres Entwurfs (10-20 Zeilen). Loesungen bitte bis zum 5.6.1997 16h.