• Keine Ergebnisse gefunden

1. Programmieraufgabe zur Informatik I

N/A
N/A
Protected

Academic year: 2021

Aktie "1. Programmieraufgabe zur Informatik I"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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. */

(2)

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

(3)

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 ...).

Referenzen

ÄHNLICHE DOKUMENTE

Rum und drei mittelgroße geschälte und zerteilte Äpfel; fülle den Teig in Muffinförmchen; backe bei 175-200 Grad für etwa 30 min; bestäube die Muffins mit etwas

Die Eingabe soll ¨uber eine Datei mit dem Namen input.txt gelesen werden?. Diese enth¨alt pro Zeile die {0, 1, ?} –Darstellung der L¨ange 8

a) Das Programm soll einen Text aus einer Datei input.txt einlesen. Der Text kann alle Zeichen des ASCII–Codes enthalten, also z.B. alle Buchstaben, Ziffern und

Geben Sie ein Verfahren an, das zur Auswertung des Polynoms an der Stelle x 0 mit n/2 + 1 Multiplikationen und n/2

Abschließend werden die Zahlen dann mit der Standardausgabe (cout) zeilenweise (also pro Zeile genau eine Zahl und sonst keine weiteren Zeichen) aufsteigend sortiert

Wir untersuchen die Eigenschaften von stark perfekten Gittern im Allgemeinen und klassifizieren im Anschluß daran die stark perfekten Wurzelgitter, sowie exempla- risch die

[r]

Der Beginn einer Folge Um eine geometrische Folge.. Weil der Quotient aufeinanderfolgender Glieder konstant