Prüfung Informatik D-MATH/D-PHYS

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

Klausur in Programmieren

Informatik II Musterlösung

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Probeklausur: Programmierung WS04/05

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

9. Eine einfache Warteschlangen-Simulation.

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

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

Übungen zu Programmierung I - Blatt 8

Einführung in die Informatik 1

Mathematik I Prüfung für den Übertritt aus der 8. Klasse

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

Klassenstufen 7, 8. Aufgabe 1 (6+6+8 Punkte). Magischer Stern:

Teil III: Evaluationstest

Einführung in die Programmierung

Übungen zu C++ Kapitel 3

1 Vom Problem zum Programm

Abstrakte Algorithmen und Sprachkonzepte

Programmierkurs Java

Viel Spaÿ! Aufgabe 0.1. Laufzeit unter Verdoppelung (-)

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

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

Komplexität von Algorithmen

Klausur in Programmieren

Aktivitäten in C# /.NET umsetzen

Algorithmen II Vorlesung am

Arbeiten mit JavaKara

Grundlagen der Programmierung

Übung 9 - Lösungsvorschlag

1.8 Kontrollstrukturen 73. default : ziffer = 0; if (ziffer > 0) { cout << "Ziffer = " << ziffer; else { cout << "keine römische Ziffer!

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Tabellenkalkulation 1. Einheit 5 Rechnerpraktikum EDV

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Kapitel 5 Zustand eines Objekts

Folge 13 - Quicksort

Objektorientierte Programmierung mit C++ Vector und List

Monte-Carlo Simulation

1 Zahlentheorie. 1.1 Kongruenzen

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Modulprüfung 2009 Klasse M+E p / M+E 1p. Mathematik: Lin Alg. + Geom.

Name: Klausur Programmierkonzepte SS 2011

Würfel-Aufgabe Bayern LK 2006

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren

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

Mathematik I Prüfung für den Übertritt aus der 9. Klasse

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n

Einführung in die Java- Programmierung

Grundlagen der Informatik I (Studiengang Medieninformatik)

Klausur in Programmieren

Flussdiagramm / Programmablaufplan (PAP)

Geometrie I. Sebastian Redinger Informatik 2 Programmiersysteme Martensstraße Erlangen

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Klassen mit Instanzmethoden

Einführung in die Java- Programmierung

Dynamisches Programmieren - Problemstruktur

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Kontrollstrukturen und Funktionen in C

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

Technische Informatik - Eine Einführung

Grundlagen der Programmierung

Wirtschaftsinformatik I

Klausur zur Vorlesung,,Algorithmische Mathematik II

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

SEP 114. Design by Contract

1.4 Der Binomialtest. Die Hypothesen: H 0 : p p 0 gegen. gegen H 1 : p p 0. gegen H 1 : p > p 0

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Urs Wyder, 4057 Basel Funktionen. f x x x x 2

Grundlagen der Wahrscheinlichkeitstheorie und Statistik für Studierende der Informatik

Schriftlicher Test Teilklausur 2

Großübung zu Einführung in die Programmierung

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

SOI Die Schweizer Informatikolympiade

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Programmieren in C/C++ und MATLAB

Gleitkommaarithmetik. Erhöhen der Genauigkeit. Grundlagen der Rechnerarchitektur Logik und Arithmetik 124

Vererbung. Martin Wirsing. Ziele. Vererbung

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

2. Semester, 2. Prüfung, Lösung

Objektorientierte Programmierung

Grundlagen der Programmierung in C Funktionen

1. Definition von Dezimalzahlen

Numerisches Programmieren, Übungen

Technische Universität München WS 2012/13 Fakultät für Informatik Lösungsvorschläge zu Blatt 4 Dr. C. Herzog, M. Maalej 12.

14. Rot-Schwarz-Bäume

=ZÄHLENWENN Zählt die nichtleeren Zellen eines Bereiches, deren Inhalte mit den Suchkriterien übereinstimmen

2 Einfache Rechnungen

Access 2010 Programmierung Schleifen

Einstieg in die Informatik mit Java

Applet Firewall und Freigabe der Objekte

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Tutorium Mathematik II, M Lösungen

Grundlagen der Programmierung in C++ Kontrollstrukturen

Kurze Einführung in die Programmiersprache C++ und in Root

Transkript:

Prüfung Informatik D-MATH/D-PHYS 12.2.2010 Dr. Bernd Gartner, Prof. Juraj Hromkovic Lösung. Aufgabe 1. Die Variable x hat zu Beginn jeder Auswertung den Typ int und den Wert 2. Ausdruck Typ Wert 3 * 1 + 1.5 / 3 double 3.5 11 * 19 % 21 * 13 % 23 * 3 % 3 int 0 7 / x * 3.0 * x double 18.0 x!= 2 && x - 1!= 1 x + 1 == 3 bool true 17 / 2 == 8.5 && 7 * 3 == 21.0 bool false (++x - 1) / 2 int 1 x++ - 1 / 2 int 2 Punktvergabe. Fur jeden korrekt genannten Typ gibt es +1 Punkt und fur jeden korrekt genannten Wert gibt es +2 Punkte. Insgesamt macht das +21 Punkte. Aufgabe 2. a) Die Binarexpansion der dezimalen Zahl 0.8 bricht nicht ab und lautet 0.110011001100... Sie kann also geschrieben werden als 0.1100. b) Naturlich ist 0.1100 nicht exakt darstellbar im System F (2, 2, 2, 2), und deshalb mussen wir runden. Die nachstgrossere Zahl ist 1.0 2 0, was einer dezimalen 1 entspricht. Die nachstkleinere Zahl in F (2, 2, 2, 2) ist 1.1 2 1, was einer dezimalen 0.75 entspricht. Demnach runden wir naturlich ab, und die Darstellung von 0.8 entspricht 1.1 2 1 oder in der ausfuhrlichen Schreibweise +(1 2 0 + 1 2 1 )2 1. c) Berechnung Exaktes Resultat F (2, 2, 2, 2) Rundung 1.1 2 1 + 1.1 2 1 1.1 2 0 1.1 2 0 keine 1.1 2 0 + 1.1 2 1 1.001 2 1 1.0 2 1 1.0 2 1 + 1.1 2 1 1.011 2 1 1.1 2 1 1.1 2 1 + 1.1 2 1 1.111 2 1 1.0 2 2 Das Schlussresultat der Berechnung ist demnach 1.0 2 2, was exakt der dezimalen 4 entspricht. Das zeigt, dass sich Fehler manchmal wechselseitig aufheben konnen!

Punktvergabe. Es gibt +4 Punkte fur die Teilaufgabe a). Der Korrektor kann die Halfte der Punkte anrechnen, wenn jemand den Konversionsalgorithmus aus der Vorlesung anwenden will, sich aber verrechnet. Insbesondere gibt es -2 Punkte Abzug, wenn jemand die Periode vergisst. Wenn jemand das fuhrende 0. nicht hinschreibt, gibt es -1 Punkt. Die Teilaufgabe b) gibt ebenfalls +4 Punkte. Wurde in a) ein falsches Ergebnis berechnet, so gibt es hier trotzdem die volle Punktezahl, falls die Darstellung richtig angegeben wird und eine Rundung notwendig war. Falls jedoch aufgrund eines falschen Resultates in Teilaufgabe a) eine exakte Darstellung in F (2, 2, 2, 2) moglich ist (und diese auch korrekt angegeben wird), dann gibt es nur +2 Punkte. Teilaufgabe c) gibt insgesamt +10 Punkte. Dabei sollte jede der vier einzelnen Additionen mit +2 Punkten bewertet werden. Falls sich jemand auf dem Weg verrechnet, so sollen die folgenden Additionen trotzdem mit der vollen Punktezahl bewertet werden, sofern sie korrekt sind (Folgefehler nicht bestrafen). Das gilt ubrigens auch wenn schon mit einem falschen Resultat aus der Teilaufgabe b) gestartet wird. Falls bei einer Addition in die falsche Richtung gerundet wird, gibt es -1 Punkt Abzug. Falls aufgrund eines Folgefehlers keine eindeutige nachste Zahl vorliegt zu der gerundet werden soll, dann wird die Auswahl des Studenten in jedem Fall richtig gezahlt. Zusatzlich gibt es noch +2 Punkte fur das korrekte Schlussresultat, respektive die Bemerkung, dass tatsachlich das exakte Resultat von 4 heraus kommt. Aufgabe 3. Die folgende Implementierung ist sehr simpel, tut aber das geforderte. // POST: Gibt true zurueck, falls es eine natuerliche Zahl a gibt, fuer // die n == a*a*a gilt. Andernfalls wird false zurueck gegeben. bool is_cube(unsigned int n) { for (int i = 0; i <= n; ++i) { if (i*i*i == n) return true; return false; Man kann naturlich noch implementieren, dass die Funktion fruher abbricht, falls i*i*i schon grosser als n ist, oder ahnliches. Die Aufgabe verlangt jedoch nur nach der Korrektheit des Algorithmus und nicht nach Ezienz. Punktvergabe. Bei dieser Programmieraufgabe gilt, dass die volle Punktezahl von +15 Punkten vergeben wird, sobald die Implementierung die Nachbedinung erfullt. Naturlich muss die Funktion auch fur die Eingabewerte 0 und 1 das richtige Resultat liefern, namlich true. Sollte letzteres nicht der Fall sein gibt es pro Versaumnis einen Abzug von -3 Punkten. Bei Syntaxfehlern drucken wir beim ersten ein Auge zu. Danach gibt es

pro Syntaxfehler -1 Punkt Abzug; jedoch keinen vielfachen Abzug fur die Wiederholung des selben Syntaxfehlers. Die weitere Abstufung der Punkte ist vom Korrektor nach Sichtung der Abgaben zu bestimmen. Aufgabe 4. Diese Aufgabe stimmt exakt mit der Aufgabe \Towers of Hanoi" aus den Vorlesungsunterlagen uberein. Es wurde lediglich der Kontext geandert. D.h. anstatt Scheiben auf Stiften sind es hier Container auf Stellplatzen, und die Bedingung, dass keine grossere Scheibe auf einer kleineren zu liegen kommt, wird hier von der Sortierung der Container nach dem Gewicht ubernommen. Hier also die Implementierung wie sie auch in den Losungen aus den Vorlesungsunterlagen zu nden ist. // PRE: 1 <= from, to <= 3; from!= to // POST: Gibt eine Reihe von Bewegungen aus, die ausgefuehrt werden // muessen, um n Container vom Stellplatz from auf den Stellplatz // to zu verschieben. void move_containers (const unsigned int n, const int from, const int to) { if (n > 0) { // move topmost n-1 containers from from to helper site 6-from-to move_containers(n-1, from, 6-from-to); // move bottommost container from from to to std::cout << "move(" << from << "," << to << ")"; // move the n-1 containers from the helper site to to move_containers(n-1, 6-from-to, to); Punktvergabe. Diese Aufgabe gibt insgesamt +15 Punkte. Bei Syntaxfehlern drucken wir beim ersten ein Auge zu. Danach gibt es pro Syntaxfehler -1 Punkt Abzug; jedoch keinen vielfachen Abzug fur die Wiederholung des selben Syntaxfehlers. Fur andere Mangel aller Art kann der Korrektor um -1 bis -4 Punkte von den folgenden Grundregeln abweichen. Die groben Richtlinien fur die weitere Punktevergabe sind wie folgt: 1. Eine blosse Ansammlung von couts gibt 0 Punkte. 2. Eine Ansammlung von couts, welche in Schleifen verpackt sind, geben ebenfalls 0 Punkte, falls bei den Schleifen kein sinnvolles Schema erkennbar ist.

3. Sinnvolle Schleifen fur kleine Zahlen, d.h. n <= 4, geben +5 Punkte. 4. Fuhrt jemand die Rekursionsidee oder das Stichwort "Hanoi" an, und sei es auch nur in einem Prosasatz, so gibt das +5 Punkte. 5. Hat jemand einen halbwegs sinnvollen Rekursionscode abgeliefert, dann gibt das +10 Punkte, auch wenn es nicht ganz funktionieren sollte. 6. Die Korrekte Losung gibt naturlich die vollen +15 Punkte. Bemerkung: Wahrend der Prufung stellte sich die Frage, ob man auch eine andere Funktionssignatur verwenden darf, z.b. vier anstatt drei Argumente. Dies mochten wir mit ja beantworten. Wichtig an dieser Aufgabe ist schlussendlich die Ausgabe der move Anweisungen. Wenn diese stimmen, dann gibt es auch die volle Punktezahl. Allerdings muss bei der abgeanderten Funktion auch die Vor- und Nachbedingung entsprechend angepasst worden sein. Es muss klar sein, wie der Aufrufer allfallige zusatzliche Parameter verwenden soll. Wenn dies nicht der Fall ist, dann gibt es einen Abzug. Aufgabe 5. a) // POST: Gibt den Abstand von p zum Ursprung an. double distance(const point& p) { return std::sqrt(p.x * p.x + p.y * p.y + p.z * p.z); b) struct gerade { // INV: a!= b point a, b; Eine Gerade kann ganz einfach durch zwei Punkte dargestellt werden. Fur die Eindeutigkeit, wie sie in der Aufgabenstellung verlangt ist, konnen wir fordern, dass die beiden Punkte nicht identisch sein durfen. c) // PRE: a!= b // POST: Gibt eine gerade zurueck, die durch die Punkte a und b geht. gerade berechne_gerade(const point& a, const point& b){ gerade g; g.a = a; g.b = b; return g; Aufgrund der gewahlten Reprasentation ergibt sich die Implementierung der Funktion berechne gerade ganz naturlich. Beachten sie, dass wir die Invariante des structs gerade einfach weiter propagieren, indem wir fordern, dass a!=b auch fur einen Aufruf der Funktion berechne gerade gelten muss.

Punktvergabe. je -1 Punkt. Fur die Teilaufgabe a) gibt es insgesamt +7 Punkte. Syntaxfehler geben Die Teilaufgabe b) wird mit insgesamt +8 Punkten belohnt. Dabei ist die Umsetzung der korrekten Invariante +4 Punkte wert und ein geeigneter struct ebenfalls +4 Punkte. Die Teilaufgabe c) gibt insgesamt +8 Punkte. Hier werden +2 Punkte fur die Einhaltung der Invarianten aus b) vergeben und +6 Punkte fur die eigentliche Implementierung. Wie gehabt, Syntaxfehler -1 Punkt. Es versteht sich von selbst, dass auch andere Losungen moglich sind. Z.B. kann man eine Gerade durch einen Punkt und eine Richtung dargestellen. Eine solche Alternative verdient naturlich auch die volle Punktezahl, sofern die Anforderungen erfullt werden. Aufgabe 6. Teilaufgabe Klasse Algorithmus a) B \Gehe durch das Feld hindurch und unterhalte zwei Zahler. Wenn eine gerade Zahl angetroen wird (Test mit % 2), erhohe den einen Zahler. Wenn eine ungerade Zahl angetroffen wird, dann erhohe den anderen Zahler. Am Ende vergleiche man die beiden Zahler." b) A "Greife auf die ersten 10 Zahlen zu und gib sie aus.\ c) C "Sortiere die Zahlen im Feld. Gehe durch das sortierte Feld hindurch und speichere den Index, an welchem bislang die kleinste Dierenz zweier aufeinanderfolgender Zahlen gefunden wurde. Die beiden gesuchten Zahlen sind aufeinanderfolgend und nden sich nach dem Durchlaufen an dem Index, den man sich gemerkt hat. Berechne die Dierenz dieser beiden Zahlen.\ d) B "Finde die grosste und die kleinste Zahl in dem Feld. Berechne die Dierenz der gefundenen Zahlen.\ e) D "Fur jede Zahl in dem Feld gehe man durch das ganze Feld hindurch und prufe, welche der anderen Zahlen Teiler sind. Falls ein Teiler gefunden wird, gebe man ihn aus.\ f) B "Gehe durch das Feld hindurch und unterhalte eine Variable, die die bisherige Summe unterhalt. Bei jeder neuen Zahl addiere man sie dazu.\ g) C "Sortiere die Zahlen in dem Feld. Berechne die Summe der ersten dn/2e Zahlen, indem man das Feld bis zur dn/2e-ten Stelle durchlaufe, und die Summe in einer Variablen aufaddiere.\ Punktvergabe. Jede der Teilaufgaben bekommt bei korrekter und optimaler Beantwortung +4 Punkte. Mit \optimal" sprechen wir hier die Laufzeiten resp. die Ezienz des Algorithmus an. Die optimalen Laufzeiten konnen der Tabelle oben entnommen

werden, welche wir ohne Beweis angeben. Die detailierte Abstufung ist wie folgt. Wenn der Algorithmus eklatant falsch ist oder fehlt, gibt es keine Punkte, selbst wenn die Laufzeit stimmen sollte, weil man nicht entscheiden kann, ob die Laufzeit nur zufallig stimmt. Wenn der angegebene Algorithmus korrekt, aber nicht optimal ist, gibt es +2 Punkte fur die korrekte Angabe der Laufzeit (bezuglich des suboptimalen Algorithmus), jedoch keine Punkte fur den Algorithmus. Wenn der angegebene Algorithmus korrekt und optimal ist und die richtige Laufzeit angegeben wird, dann gibt es +4 Punkte. Falls ein optimaler Algorithmus angegeben wird, aber keine oder eine falsche Laufzeit, dann gibt es je nach Teilaufgabe folgende Punkte: a) +1 Punkt b) +1 Punkt c) +2 Punkte d) +2 Punkte e) +2 Punkte f) +1 Punkt g) +2 Punkte Ende der Musterlosung zur Prufung vom 12.2.2010.