Studiengang Maschinenbau und Verfahrenstechnik 1. Vordiplom, Informatik I

Ähnliche Dokumente
Studiengang Maschinenbau und Verfahrenstechnik 1. Vordiplom, Informatik I

Studiengang Maschinenbau und Verfahrenstechnik. 1. Vordiplom, Informatik I

Klausur Informatik WS 2012/13

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Klausur zur Lehrveranstaltung. Technische Informatik für Ingenieure WS 2008/09

Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: E Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Klausur zur Lehrveranstaltung. Technische Informatik für Ingenieure WS 2009/10

Klausur Kompaktkurs Einführung in die Programmierung Dr. T. Weinzierl & M. Sedlacek 25. März 2011

Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: F Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

hue06 December 2, 2016

Prüfung Informatik D-MATH/D-PHYS :00 11:00

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

Prüfung Informatik D-MATH/D-PHYS :00 11:00

Prüfung Informatik D-MATH/D-PHYS :00 17:00

Klausur Programmiertechnik (Probeklausur 1)

Einführung in die Programmierung. (K-)II/Wb17

Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester 2004/2005

Programmierung und Angewandte Mathematik

Klausur "ADP" SS 2015

Klausur: Informatik, am 13. August 2015 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Prüfung Informatik D-MATH/D-PHYS

Viel Erfolg bei der Bearbeitung der Aufgaben!

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung EidP (WS 2018/19) Blatt 4

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

pue13 January 28, 2017

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Wissenschaftliches Rechnen

Programmierstarthilfe SS 2009 Fakultät für Ingenieurwissenschaften und Informatik 4. Blatt Für die Woche vom bis zum 22.5.

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Programmierung mit C Zeiger

Klausur. 2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

Studiengang Maschinenbau und Verfahrenstechnik 1. Vordiplom, Informatik I Musterlösung

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Programmierstarthilfe SS 2010 Fakultät für Ingenieurwissenschaften und Informatik 6. Blatt Für die Woche vom bis zum 4.6.

Algorithmen und Datenstrukturen (für ET/IT)

Zeiger, Arrays und Strings in C und C++

Probeklausur Name: (c)

Übungsblatt 1. Java Vorkurs (WS 2017)

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Ausdrücke (1) Grundlegende Eigenschaften

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Vorlesung Objektorientierte Programmierung Klausur

Grundlagen der Informatik

ÜBUNGS-BLOCK 7 LÖSUNGEN

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Grundlagen der Informatik

Klausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Wiederholungsklausur "C#" SS 2013

Klausur Grundlagen der Programmierung

1. Teilklausur. Name:... Vorname:... Matrikel-Nummer:...

2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

5. Übung - Kanalkodierung/Programmierung

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Klausur zu Grundlagen der Programmierung in C

Prüfung A Informatik D-MATH/D-PHYS :15 14:55

Klausur: Informatik, am 11. Juli 2013 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Programmierkurs Java

HS Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Klausur Programmiersprachen SS 2005

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

9. Vektoren. (auch Felder/array)

Prüfung Algorithmen und Datenstrukturen I

Vorname: Nachname: Matrikelnummer: Studiengang (bitte ankreuzen): Informatik Bachelor Informatik Lehramt Mathematik Bachelor Sonstige:

Hauptklausur zur Vorlesung Bildverarbeitung WS 2002/2003

Basispruefung Herbst 2016/ Einführung in die Programmierung

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:

Allgemeine Hinweise:

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Klausur in Programmieren

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

8. Referenzen und Zeiger

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 10. Blatt Für den und

Informatik 1 ( ) D-MAVT F2011. Pointer, Structs. Yves Brise Übungsstunde 6

Tag 4 Repetitorium Informatik (Java)

Prüfung Informatik D-MATH/D-PHYS :00 11:00

Klausur: Informatik, am 11. Juli 2013 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Informatik 1 ( ) D-MAVT F2010. Pointer, Structs, Sortieren. Yves Brise Übungsstunde 6

Übungen zur Vorlesung EINI (WS 2010) Blatt 11

Intensivübung zu Algorithmen und Datenstrukturen

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Pseudo-Programmiersprache

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Variablen, Konstanten und Datentypen

Transkript:

Dr. K. Simon Studiengang Maschinenbau und Verfahrenstechnik 1. Vordiplom, Informatik I Frühling 2002 Freitag, 8. März 2002 Name: Vorname: Legi-Nummer: Unterschrift: Aufgabe Maximale Punktzahl Erreichte Punktzahl Visum 1. Syntax, Typen, Datenstrukturen 30 2. Logik 26 3. Funktionen und Prozeduren 27 4. Rekursion 30 5. Listen 29 Total 142 Note Allgemeine Hinweise Zugelassene Hilfsmittel: keine. Legen Sie zu Anfang der Prüfung Ihre Legi neben sich auf den Tisch. Die Prüfung besteht aus 5 Aufgaben. Kontrollieren Sie, ob Sie alle Aufgaben erhalten haben. Benutzen Sie keine rote Farbe! Verwenden Sie für jede Aufgabe ein separates Blatt. Schreiben Sie auf jedes Blatt Ihre Legi-Nummer (und nur diese!). Schreiben Sie deutlich, und benützen Sie keinen Bleistift. Pro Aufgabe darf höchstens ein gültiger Lösungsversuch abgegeben werden. müssen klar durchgestrichen sein. Ungültige Lösungsversuche In jeder Aufgabenstellung ist eine Lösungsstruktur angegeben. Nichtbeachten der Lösungsstruktur führt zu Punktabzug. Es empfiehlt sich unbedingt, zuerst alle Fragen durchzulesen. Abzugeben sind das vollständig ausgefüllte Deckblatt, die Aufgabenblätter und Ihre Lösungen.

2

Aufgabe 1: Syntax, Typen, Prozeduren und Funktionen (30 Punkte) a) In der folgenden Aufgabe testen wir anhand einer typischen Situation beim Programmieren (wie Sie sie oft genug bei der Lösung Ihrer Übungen erlebt haben) Ihr Vermögen, Fehler zu finden, zu identifizieren und zu korrigieren. Unterstützt werden Sie dabei durch Informationen, die Ihnen der Computer gibt. Worum geht s? Jedes der folgenden Programmstücke sollte eigentlich 3 7 = 2187 berechen. In jedem Programmstück ist aber genau ein Fehler enthalten. Dieser Fehler tritt entweder beim Kompilieren oder bei der Ausführung auf. Wir geben Ihnen die Fehlermeldung des Compilers oder die Fehlermeldung bei der Ausführung an. Aufgabe Kennzeichnen Sie in den folgenden Programmen, wo der Fehler genau auftritt. Beschreiben Sie, was der Fehler ist, und geben Sie einen Verbesserungsvorschlag an, der das Programm auf irgendeine Weise fehlerlos macht. Lösungsstruktur Ihre Lösung enthält (1) die tatsächliche Zeilenangabe des Fehlers, (2) eine Beschreibung des Fehlers in Ihren eigenen Worten, (3) den Verbesserungsvorschlag. Massstab Bewertet werden je Unteraufgabe die korrekte Angabe der Zeile (0.5 Punkte), die korrekte Beschreibung des Fehlers (0.5 Punkte), ein korrekter Verbesserungsvorschlag (1 Punkt). Jede Unteraufgabe gibt 2 Punkte. Die gesamte Teilaufgabe ist 8 Punkte wert. i) 1 #include <iostream.h> ii) 1 #include <iostream.h> 2 3 int main() 2 3 int main() 4 { 4 { 5 int a,b,c; 5 int a,b,c[8]; 6 7 a= 3; b= 7; c= 1; 6 7 a= 3; b= 7; c[b]= 1; 8 while (b>0) { 8 while (b>0) { 9 c= c*a; b-- 9 c[b-1= c[b]*a; b--; 10 } 10 } 11 cout << c << endl; 11 cout << c[0] << endl; 12 } 12 } Fehler beim Kompilieren syntax1.c: In function int main() : syntax1.c:10: parse error before } Fehler beim Kompilieren syntax2.c: In function int main() : syntax2.c:9: non-lvalue in assignment syntax2.c:9: parse error before ; iii) 1 #include <iostream.h> iv) 1 #include <iostream.h> 2 3 int main() 2 3 int main() 4 { 4 { 5 int *a,*b,*c; 5 int a,b,c; 6 7 a= new(int); b= new(int); c= new(int); 6 7 a= 3; b= 7; c= 1; 8 9 *a= 3; *b= 7; *c= 1; 8 9 while (b>0) { c= c*a; 10 while ((*b)>0) { 10 a--; 11 *c= (*c)*(*a); 11 } 12 b--; 12 cout << c << endl; 13 } 13 } 14 cout << *c << endl; 15 16 delete(a); delete(b); delete(c); Endlosschleife Das Programm wird nicht beendet. 17 } Es wird nichts ausgegeben. Semantischer Fehler Ausgegeben wird 3, eigentlich sollte aber 2187 ausgegeben werden. = 3

b) In der Vorlesung haben Sie gelernt, wie man Variablen, deklariert. In dieser Aufgabe sollen Sie diese Fähigkeit demonstrieren. Aufgabe Wir präsentieren Ihnen zwei korrekt codierte C++-Programmstücke (i-ii), aus denen hervorgeht, welchen Typ die Namen a, b und c haben. Sie sollen für jedes Programmstück diese Programmelemente deklarieren. Lösungsstruktur Wir erwarten uns pro Programmteil je eine Deklaration für alle a, b und c in korrekter C++- Syntax. Für Feldgrössen setzen sie irgendeine Zahl ein. Beispiel 1 a= 3; 2 b= 2 ; 3 c= (char(a)== 2 ); Dieser Programmteil verlangt folgende Deklaration der Objekte a, b, und c: 1 int a; 2 char b; 3 bool c; Massstab Bewertet werden nur notwendige Deklarationen. Korrekte einfache Datentypen erhalten 1 Punkt. Korrekte erweiterte Datentypen werden mit bis zu 3 Punkten bewertet. Die Teilaufgabe ist 10 Punkte wert. Die Programmstücke i) 1 a= &b; 2 b= c[12] (2>=1); ii) 1 a= b.c*3.1415; 2 b.a= char(b.c%2) == c; c) Die folgende Aufgabe behandelt Ihr Wissen im Bereich Prozeduren und Funktionen. Aufgabe Ergänzen Sie auf sinnvolle Art die Kopfzeile der folgenden C++-Routinen und geben Sie einen sinnvollen Beispielaufruf an. Nehmen Sie dabei an, dass keine globalen Variablen definiert sind. Die Übergabe von Parametern erfolgt allein über den Aufruf. Wo eine Rückgabe sinnvoll erscheint (weil sonst Werte verloren gehen), muss eine Rückgabe erfolgen. Der gegebene Anweisungsteil der Routine darf dabei aber nicht abgeändert werden. Falls für eine verwendete Variable kein eindeutiger Typ bestimmbar ist, wählen Sie einen der Kandidaten aus. Achten Sie aber auf die Schlüssigkeit (Konsistenz) Ihrer Lösung. Lösungsstruktur Ihre Antwort enthält eine Kopfzeile für die gegebene C++-Routine und einen Aufruf mit Deklaration aller verwendeten Variablen. Für den Aufruf müssen die übergebenen Variablen nicht initialisiert werden. Gegebenenfalls sind auch Typen zu deklarieren. Bewertung Bewertet wird jeder korrekte Parameter (1 Punkt), die korrekte Einordnung und Handhabung von Funktion/Prozedur (1 Punkt), jede notwendige und korrekte Typendeklaration (1 Punkt) und jede notwendige und korrekte Variablendeklaration (0.5 Punkte). Die ganze Unteraufgabe ist 12 Punkte wert. Die C++-Routinen i) 1... skalarprodukt(...) 2 { 3 int i; 4 5 erg= 0.0; 6 for (i=0; i<n; i++) { 7 erg= erg+vec1[i]*vec2[i]; 8 } 9 } ii) 1... arg(...) 2 { 3 double winkel; 4 if (zahl.re!= 0) { 5 winkel= acos(zahl.im/zahl.re); 6 } else if (zahl.im>0) { 7 winkel= 3.141592653589793/2.0; 8 } else { 9 winkel= -3.141592653589793/2.0; 10 } 11 return(winkel); 12 } 4

Aufgabe 2: Logik (26 Punkte) In dieser Aufgabe werden Ihre Fähigkeiten bezüglich Logik geprüft. Sie müssen aus logischen Ausdrücken Wahrheitstabellen erstellen und logische Ausdrücke umformen. Das Problem Sie haben bereits gelernt, dass die UND-Verknüpfung und ODER-Verknüpfung zusammen mit der Negation ausreichen, um jeden logischen Ausdruck zu formulieren. Es geht jedoch noch besser, nämlich mit einer einzien Operation. Diese heisst NAND, wird mit dem Zeichen dargestellt und ist durch A B def =!(A&&B) definiert. Ihre Wahrheitstabelle ist A B A B 0 0 1 0 1 1 1 0 1 1 1 0 a) Formulieren Sie i) die Negation (!A) ii) die UND-Verknüpfung (A && B) iii) die ODER-Verknüpfung (A B) unter alleiniger Verwendung von NAND. Lösungsstruktur Pro Unteraufgabe erwarten wir einen zu!a, A && B und A B äquivalenten Ausdruck in den Variablen A und B, der ausschliesslich die Verknüpfung enthält. Massstab Für die korrekte Formulierung der Negation gibt es 1 Punkt, für die UND-Verknüpfung 3 Punkte, für die ODER-Verknüpfung 4 Punkte. Die Unteraufgabe ist 8 Punkte wert. b) Gegeben ist folgender logischer Ausdruck in den Variablen A, B und C: (A && B &&!C) (A &&!B && C) (A &&!B &&!C) i) Stellen Sie zu diesem Ausdruck eine Wahrheitstabelle auf. Lösungsstruktur Ihre Lösung enthält eine vollständige Wahrheitstabelle. Massstab Bewertet werden die Zeilen sowie das Layout der Tabelle. Die Aufgabe ist 9 Punkte wert. ii) Vereinfachen Sie den Ausdruck aufgrund der Wahrheitstabelle. Lösungsstruktur Wir erwarten einen möglichst kurzen logischen Ausdruck in den gegebenen Variablen, der die Operationen &&, und! enthalten darf und zum gegebenen Ausdruck äquivalent ist. Massstab Bewertet werden die Klammerung und der korrekte Einsatz der Verknüpfungen. Für die korrekte Lösung gibt es 4 Punkte. iii) Formulieren Sie den vereinfachten oder gegebenen Ausdruck unter alleiniger Verwendung von NAND. Lösungsstruktur Wir erwarten einen logischen Ausdruck in den gegebenen Variablen, der ausschliesslich die Operation enthält. Massstab Jede korrekte NAND Verknüpfung und jede korrekte Klammerung ist 1 Punkt wert. Für die vollständige, korrekte Umformulierung erhalten sie 5 Punkte. 5

6

Aufgabe 3: Funktionen und Prozeduren (27 Punkte) In dieser Aufgabe geht es um Funktionen und Prozeduren. Sie zeigen in der Aufgabe, dass Sie Funktionen und Prozeduren definieren und aufrufen können. Für die Aufgaben b) und c) brauchen Sie zudem Ihr Wissen über erweiterte Datenstrukturen. Pythagoräische Tripel Ein Tripel (a, b, c) von natürlichen Zahlen heisst pythagoräisches Tripel, wenn gilt: a 2 + b 2 = c 2. Beispiel 3 2 + 4 2 = 5 2 a) Implementieren Sie eine C++-Funktion TestTripel, welche für zwei natürliche Zahlen a und b testet, ob eine natürliche Zahl c existiert, so dass (a, b, c) ein pythagoräisches Tripel ist. Wenn (a, b, c) ein pythagoräisches Tripel ist, soll die Funktion die gefundene Zahl c zurückgeben. Anderenfalls soll der Wert 0 zurückgegeben werden. Hinweis: Für den verlangten Test brauchen Sie die Quadratwurzel. Verwenden Sie dafür die Funktion double sqrt(double z), welche den Wert von z zurückgibt. Lösungsstruktur Erwartet wird eine vollständige, mit Kommentaren versehene C++-Funktion, welche den verlangten Test durchführt. Massstab Bewertet wird: korrekter Umgang mit Parametern: 4 Punkte korrekter Anweisungsteil: 3 Punkte Kommentare: 1 Punkt Die Unteraufgabe ist 8 Punkte wert. b) Entwerfen Sie in C++-Syntax eine Datenstruktur, in der genau ein pythagoräisches Tripel gespeichert werden soll. Lösungsstruktur ist. Abzugeben ist eine in C++-Syntax formulierte Datenstruktur, die mit Kommentaren versehen Massstab Bewertet wird der Einsatz einer sinnvollen Datenstruktur (1 Punkt), der richtige Typ (1 Punkt) und Kommentare (1 Punkt). Die Teilaufgabe ist insgesamt 3 Punkte wert. c) Implementieren Sie eine C++-Prozedur PythTripel, welche alle pythagoräischen Tripel (a, b, c) mit a < b n in einem Feld p von demjenigen Datentyp abspeichert, den Sie in Aufgabe b) entworfen haben. Die Zahl n soll dabei als Parameter übergeben werden. Für die Berechnung der Tripel soll die Funktion TestTripel aus Aufgabe a) verwendet werden. Lösungsstruktur Abzugeben ist eine vollständige und kommentierte C++-Prozedur, welche mit der Funktion aus Aufgabe a) arbeitet und die gestellte Aufgabe erfüllt. Massstab Bewertet wird korrekter Umgang mit den Parametern: 3 Punkte korrekte Verwendung des Feldes: 3 Punkte korrekter Aufruf der Funktion aus Aufgabe a): 1 Punkt algorithmische Korrektheit: 8 Punkte Kommentare: 1 Punkt Die Unteraufgabe ist 16 Punkte wert. 7

8

Aufgabe 4: Rekursion (30 Punkte) In dieser Aufgabe prüfen wir am Beispiel der Zerlegung einer Zahl, ob Sie in der Lage sind, einen rekursiven Zusammenhang zu erkennen und ihn in einen Algorithmus umzusetzen. Das Problem Additionen verschiedener natürlicher Zahlen können zum selben Ergebnis führen. So ergeben z.b. drei verschiedene additive Rechenvorschriften 1 + 1 + 1 + 1 + 1 + 1, 3 + 2 + 1 und 3 + 3 alle die Zahl 6. Wir nennen solche verschiedenen Additionen, die alle die gleiche Summe n ergeben, eine Zerlegung der positiven ganzen Zahl n. Beispiele von Zerlegungen Alle Zerlegungen von 1: 1 Alle Zerlegungen von 2: 1 + 1, 2 Alle Zerlegungen von 3: 1 + 1 + 1, 1 + 2, 2 + 1, 3 Die Aufgaben a) Geben Sie alle Zerlegung der Zahl 4 an. Überlegen Sie sich dazu ein rekursives Vorgehen, mit dem Sie die Gewissheit haben, dass sie keine Zerlegung vergessen. Es ist Teil der Aufgabe herauszufinden, wieviele Zerlegungen es gibt. Achten Sie ausserdem darauf, dass innerhalb einer Zerlegung die Reihenfolge der Zahlen eine Rolle spielt (wie beim Beispiel der Zahl 3: 1 + 2 und 2 + 1 sind zwei Zerlegungen). Lösungsstruktur Anzugeben ist in drei bis vier eigenen Sätzen eine Beschreibung eines rekursiven Vorgehens, nach dem Sie alle Zerlegungen der Zahl 4 finden wollen, sowie die Zerlegungen in der Reihenfolge Ihrer beschriebenen Vorgehensweise. Massstab Bei der Beschreibung Ihres Vorgehens legen wir Wert auf die korrekte Behandlung des Rekursionsschrittes (max. 2 Punkte), die Abbruchbedingung (1 Punkt) sowie die Vollstaendigkeit der Beschreibung (1 Punkt). Sowohl korrekte Zerlegungen als auch die Reihenfolge gemäss Ihrer Beschreibung wird insgesamt mit bis zu 5 Punkten bewertet. Die Unteraufgabe ist 9 Punkte wert. b) Entwerfen Sie eine rekursive Prozedur, void zerlege(int zahl, int zerlegung[], int anzahl) die zu einer gegebenen positiven ganzen Zahl zahl alle Zerlegungen auf dem Bildschirm ausgibt. Das Array zerlegung kann dabei zur Speicherung der ersten anzahl Summanden des aktuellen Zwischenresultats dienen. Lösungsstruktur Abzugeben ist eine vollständige, kommentierte C++-Prozedur, welche die Aufgabenstellung erfüllt. Versehen Sie Ihre Prozedur mit Kommentaren. Massstab Wir legen Wert auf die Behandlung der Rekursion (max. 6 Punkte) und die Lösung des Problems (max. 2 Punkte). Sinnvolle Kommentare werden mit 1 Punkt bewertet. Die Unteraufgabe ist insgesamt 9 Punkte wert. c) Verändern Sie die rekursive Prozedur aus Aufgabe b) so, dass sie Zerlegungen nur einmal ausgibt, welche sich ausschliesslich durch die Reihenfolge der Summanden unterscheiden. Für zahl gleich 3 gibt diese Prozedur also beispielsweise nur 1 + 1, 1 + 2 und 2 + 2 aus, nicht aber 2 + 1. Lösungsstruktur Abzugeben ist eine vollständige, kommentierte C++-Prozedur, die die Aufgabenstellung erfüllt. Versehen Sie Ihre Prozedur mit Kommentaren. Massstab Wir legen Wert auf die Behandlung der Rekursion (max. 7 Punkte) und die Lösung des Problems (max. 4 Punkte). Sinnvolle Kommentare werden mit 1 Punkt bewertet. Die Unteraufgabe ist 12 Punkte wert. 9

10

Aufgabe 5: Dynamische Datenstrukturen: Listen (29 Punkte) In dieser Aufgabe geht es um Listen und Prozeduren. Diese Konzepte sollen Sie im Zusammenhang mit der Repräsentation ganzer Zahlen und deren Addition einsetzen. Das Problem Nicht negative ganze Zahlen sollen als Listen dargestellt werden. Das hat den Vorteil, dass Zahlen beliebig lange sein können. Ein Listenelement nimmt dabei nur eine Ziffer der zu speichernden Zahl auf. Hinweis: Um die folgenden Teilaufgaben einfacher lösen zu können, wird die führende Ziffer als letztes Element der Liste gespeichert. D.h. zahl 4 6 0 ˆ=4 10 0 + 6 10 1 = 64. a) Entwerfen Sie in C++ eine listenartige Datenstruktur für die Speicherung der Ziffern beliebig langer, nicht negativer ganzer Zahlen. Lösungsstruktur Abzugeben ist ein Datentyp in C++-Code, der eine beliebig lange, nicht negative ganze Zahl als Liste speichern kann. Spezifizieren Sie das Aussehen einer Ziffer. Geben Sie ausserdem an, wie die gesamte Zahl repräsentiert wird. Verwenden Sie aussagekräftige Namen und versehen Sie Ihren Code mit Kommentaren. Massstab Wir legen Wert auf aussagekräftige Namen (1.5 Punkte), korrekte Datenstruktur (2.5 Punkte), Umgang mit Zeigern (1 Punkt) und Kommentare (1 Punkt). Die Teilaufgabe gibt 6 Punkte. b) Erläutern Sie zeichnerisch und schrittweise die Addition zweier Zahlen 79 und 53, die in der von Ihnen definierten Struktur gespeichert sind. Das Ergebnis der Addition soll dabei in der ersten Zahl gespeichert werden. Lösungsstruktur Abzugeben ist eine Folge von Zeichnungen, deren Reihenfolge gekennzeichnet ist. Zeichnen Sie für jede Änderung in einer Liste ein eigenes Bild, erläutern Sie die Veränderungen und geben Sie ggf. den Wert von Hilfsvariablen an. Massstab Bewertet wird: Veränderungen der Liste (4 Punkte), die Verwendung von Hilfsvariablen (3 Punkte) und die schlussendliche Veränderung zum Endergebnis (1 Punkt). Die Teilaufgabe ist 8 Punkte wert. c) Entwerfen Sie eine C++-Prozedur zur Addition von zwei gleich langen Zahlen. Die Prozedur verändert den ersten Parameter: Er enthält nach dem Aufruf das Ergebnis der Addition. Lösungsstruktur Abzugeben ist eine C++-Prozedur, die die gegebene Aufgabe erfüllt. Versehen Sie Ihre Prozedur mit Kommentaren. Massstab Bewertet werden der Umgang mit der dynamischen Datenstruktur und Zeigervariablen (7 Punkte), Problemlösung (6 Punkte), Prozedurschnittstelle (1 Punkt) und Kommentare (1 Punkt). Die gesamte Teilaufgabe ist 15 Punkte wert. ***** Viel Erfolg! ***** lj, März 2002 11