=======================
PROGRAMMIEREN IN C++
P. PFAHLER
SOMMERSEMESTER 1997
=======================

Uebungsblatt 2 vom 17.4.1997
-----------------------------

Aufgabe 2)
----------

Implementieren Sie die Klasse "preis", die wie folgt deklariert ist:

class preis
{
private:
    int dm;     // DMark-Anteil (>= 0)
    int pf;     // Pfennig-Anteil (>=0, < 100)
public:
    preis();                         // Default-Konstruktor
    preis(int d, int p);             // 2-stelliger Konstruktor
    preis(float f);                  // 1-stelliger
    preis add(preis p);              // Addition zweier Preise
    void print();                    // Ausgabe
private:
    void convert();                  // Konvertiert pf > 100
                                     // zur internen Benutzung
};

// Die Konstruktoren und die Additions-Methode sorgen dafuer, dass
// die oben formulierten Anforderungen an die Attribute "dm" und "pf"
// gelten (durch Fehlermeldungen und Konvertierungen)


Geben Sie ihre Implementierung ab und ein Protokoll der Ausgabe,
die von folgendem Programm erzeugt wird:

int main()
{
    const int preis_anz = 7;
    preis liste[preis_anz] = 
    { 
	preis(),
	preis(23,30),
	preis(1,9),
	preis(32,100),
	preis(3.23),
	preis(40.4232),
        preis(0,1007),
    };
    int index;
    preis summe;
    for (index=0; index < preis_anz; index++)    
    {    
	liste[index].print();
	cout << endl;
	summe = summe.add(liste[index]);
    }
    cout << "========\n";
    summe.print();
    cout << endl;
}

Aufgabe 3)
----------

Implementieren Sie die Klasse "display".
Es handelt sich um einen einfachen Textbildschirm, bestehend aus
Bildschirmspeicher und Cursor (gegeben durch X- und Y-Position).
Die Klasse ist wie folgt deklariert:

// display.h

const int height = 20;
const int width  = 64;

class display
{ private:
  char screen[height][width];    // Textspeicher
  int cursorx;                   // X-Position
  int cursory;                   // Y-Position
  public:
  display(void);        // Default-Konstruktor
  void advance(void);   // Eine Position weiter. Falls am Zeilenende,
                        // naechste Zeile. Falls Bildschirm voll,
                        // Fehlermeldung.
  void newline(void);   // Cursor an den Anfang der naechsten Zeile.
                        // Falls Bildschirm voll, Fehlermeldung.
  void write(char *);   // Ein Wort ab der Cursorposition schreiben.
                        // Falls es nicht in die Zeile passt, naechste
                        // Zeile. Falls Bildschirm voll, Fehlermeldung.
  void show(void);      // Ausgabe des Bildschirminhaltes.
};

Das folgende Programm benutzt die Klasse "display" fuer einen einfachen
Textformatierer:

// main.cc

#include <iostream.h>
#include <string.h>
#include "display.h"

int main(void)
{ display schirm;
  char inp[80];
  while (cin >> inp)            // as long as not EOF
  { schirm.write(inp);
    schirm.advance();           // one blank
  }
  schirm.show();               // show result
}

Testen Sie Ihre Klasse "display" u.a. mit folgender Eingabe
und geben Sie das Ergebnis zusammen mit Ihrer Klassenimplementierung ab.

Mustereingabe:

A class-name is inserted into the scope in which it is declared 
immediately after the class-name is seen. The class-name is also inserted
into  the scope of the class itself. For purposes of access checking,
the inserted class name is treated as if it were a public member name.
A  class-specifier is commonly referred to as a class definition. A
class is considered defined after the closing brace of its class-specifier
has  been  seen even though its member functions are in general
not yet defined.


Loesungen bitte bis zum 24.4.1997 16h.
