Prof. Dr. R. Schrader SS 2002 Ch. Hagemeier
1. Programmieraufgabe zur Informatik I
Abgabe: 13.–15.05.2002 im Internet (siehe unten)
In der Vorlesung wurden einfach verkettete Listen als Datentyp behandelt. Das Ziel die- ser Programmieraufgabe besteht darin, typische Operationen auf verketteten Listen pro- grammtechnisch umzusetzen. Abweichend vom Konzept der Vorlesung wollen wir in dieser Aufgabe Listen benutzen, die durch einen Zeiger ’Head’ auf ein Dummyelement am Listen- anfang gegeben sind. Eine leere Liste besteht dann nur aus dem Dummyelement mit dem Headzeiger. Die Nextkomponente des letzten Listenelementes zeigt auf ’NULL’.
Wir wollen Polynome als verkettete lineare Listen darstellen, indem wir die nichtverschwin- denden Terme, geordnet nach absteigenden Exponenten, in den Knoten der Liste abspei- chern. Jeder Knoten enth¨alt als Information den Exponenten und den zugeh¨origen (Nicht- Null)-Koeffizienten und hat einen Zeiger auf den Knoten mit dem n¨achsten Term des Polynoms.
Beispiel:
Head→ Dummy → 3x7 → −5x2 → NULL
Aufgabe 1:
Implementieren Sie Prozeduren zum Initialisieren einer leeren Liste, zum Einf¨ugen eines neuen Listenelementes, zum L¨oschen eines Listenelementes, zum Einlesen und zum Ausge- ben von Listenelementen.
typedef struct Knoten { int koeffizient;
int exponent;
struct Knoten *naechster;
} Knotentyp;
void Einfuegen (Knotentyp *p, Knotentyp *q)
/* Der Knoten, auf den q zeigt, wird nach dem Knoten, auf den p zeigt, eingef¨ugt. */
void Loeschen (Knotentyp *p)
/* Der Knoten, der in der Liste nach dem Knoten, auf den p zeigt, steht, wird aus der Liste entfernt. */
Knotentyp *Einlesen (string dateiname, int position)
/* Erzeugt eine Liste mit dem Polynom, das in Zeile ’position’ der angegebenen Datei steht. In der Datei ist dabei zeilenweise
angegeben, wie das Polynom aussieht: Als erste Zahl ist der h¨ochste Exponent h angegeben, danach absteigend f¨ur jedes Monom der
entsprechende Koeffizient (also beginnend mit dem von x^h l¨uckenlos hinunter bis zu x^0). */
void Ausgeben (Knotentyp *p)
/* Die Liste wird ab dem Knoten p durchlaufen, dabei werden
die Listenelemente wie folgt ausgegeben: Als erste Zahl ist der h¨ochste Exponent h angegeben, danach absteigend f¨ur jedes Monom der entsprechende Koeffizient, abgetrennt durch ein Leerzeichen.
Lediglich diese h+2 Zahlen sind in einer Zeile ohne weitere Kommentare oder Satzzeichen auszugeben. */
Beispielsweise steht die Zeile 9 1 11 0 0 7 0 -4 2 0 9
f¨ur das Polynom x9 + 11x8+ 7x5−4x3+ 2x2 + 9.
Achten Sie darauf, daß nicht auf Daten von NULL-Zeigern zugegriffen wird, und geben Sie nicht mehr ben¨otigten Speicherplatz, z.B. beim L¨oschen eines Listenelements frei.
Aufgabe 2:
Implementieren Sie Funktionen, die folgende Operationen realisieren, und benutzen Sie dazu die Prozeduren aus Aufgabe 1.
a) Differentiation eines Polynoms b) Addition zweier Polynome
c) Multiplikation eines Polynoms mit einem Monom (dies ist ein Ausdruck der Form 3x2)
d) Multiplikation zweier Polynome (mit Hilfe von (b) und (c))
Das Programm soll von der Komandozeile einen Dateinamen ¨ubergeben bekommen. In dieser Datei sind zeilenweise zwei Polynome, gefolgt von einem Monom in der dritten Zeile, angegeben. Folgende Operationen sollen mit diesen Polynomen durchgef¨uhrt werden:
a) Differentiation des ersten Polynoms b) Addition der ersten beiden Polynome
c) Multiplikation des ersten Polynoms mit dem Monom aus Zeile drei d) Multiplikation der Polynome der ersten beiden Zeilen
Die Ausgabe dieser vier Schritte hat in dieser Reihenfolge und in dem oben angegebenen Format auf dem Bildschirm zeilenweise zu erfolgen. Keine anderen Ausgaben (Erkl¨arungen, Satzzeichen etc.) sind gestattet.
Abgabemodalit¨aten:
Vom 13.05.2002 bis zum 15.05.2002 k¨onnen die von Ihnen erstellten Programme im Quell- text ¨uber das Internet unter der folgenden Adresse abgegeben werden:
http://www.zpr.uni-koeln.de/AFS/teachings/ss02/InfoI/progaufg1.html .
Dort haben Sie auch die M¨oglichkeit die Lauff¨ahigkeit Ihres Programms auf unseren Sy- stemen zu testen.
Anmerkungen:
Auch durch die Bearbeitung der Programmieraufgabe k¨onnen Bonuspunkte f¨ur die Klau- sur erarbeitet werden. Das Kriterium zum Erlangen der Bonuspunkte ist die korrekte Lauff¨ahigkeit des Programmes. Bei dieser Aufgabe wird Einzelabgabe erwartet. Kopien und sonstige Cover-Versionen werden nicht akzeptiert und nicht bewertet. Falls trotzdem solche L¨osungen abgegeben werden, so bekommen beide Teilnehmer keine Punkte!
Achten Sie bei Ihren Programmen (in C++; die Standard Template Library (STL) ist nichtzu benutzen) auf gute Lesbarkeit des Programmtextes (ausf¨uhrliche Kommentierung, Verwendung suggestiver Variablennamen, Einr¨ucken ...).