Matrikelnummer:

Ähnliche Dokumente
Große Übung Praktische Informatik 1

1 Polymorphie (Vielgestaltigkeit)

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

Themen. Web Service - Clients. Kommunikation zw. Web Services

Algorithmen und Datenstrukturen

Objektorientierte Programmierung

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

3 Objektorientierte Konzepte in Java

Programmieren in Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

3 Objektorientierte Konzepte in Java

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Kapitel 6. Vererbung

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Test-Driven Design: Ein einfaches Beispiel

Kapitel 6. Vererbung

Java Schulung (Java 2 Java Development Kit 5 / 6)

Algorithmen und Datenstrukturen 07

Programmieren in Java

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

Probeklausur: Programmierung WS04/05

Objektorientierte Programmierung

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Musterlösungen zur Klausur Informatik 3

Java-Schulung Grundlagen

Kapitel 6. Vererbung

Nachholklausur (6 ECTS) Einführung in die Informatik: Programmierung und Software-Entwicklung. Nachname... Vorname... Matrikelnummer... Studienfach...

Software Engineering Klassendiagramme Einführung

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

Aufgabe 1. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

Java Einführung Abstrakte Klassen und Interfaces

Java-Programmierung. Remote Method Invocation - RMI

5. Tutorium zu Programmieren

Java Einführung Methoden in Klassen

Java: Vererbung. Teil 3: super()

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Teil II. Objektorientierte Programmierung und objektorientierter Entwurf

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Programmierkurs Java

Nachholklausur (9 ECTS) Einführung in die Informatik: Programmierung und Software-Entwicklung. Nachname... Vorname... Matrikelnummer... Studienfach...

Programmieren - Vererbung & Polymorphie

Exceptions. Prof. Dr. Margarita Esponda SS M. Esponda-Argüero

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Datum, Uhrzeit: , Uhr Matrikelnummer:... Semester: INbac2 Prüfer: Prof. Meixner Note:...

Klausur vom 14. Juni Informatik 4

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Informatik I WS 07/08 Tutorium 24

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Institut fu r Informatik

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Informatik II. /* c) Baumstruktur in einen String schreiben und zurueckgeben */ public String tostring() {

Sie müssen den Test bis 20:00 Uhr am Abgabetag dieses Übungszettels absolviert haben.

Programmentwicklung I für Hörer anderer Fachrichtungen -Wintersemester 2003/04- Abschlussklausur

Vererbung & Schnittstellen in C#

3. Konzepte der objektorientierten Programmierung

Programmieren Tutorium

Programmieren in Java

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Teilprüfung Software- und Internettechnologie Programmierkurs 1 Wintersemester 2005/2006

EndTermTest PROGALGO WS1516 A

Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Zur Erinnerung.

14. Tutorium zu Programmieren

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

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Abschnitt 9: Schnittstellen: Interfaces

Universität Augsburg, Institut für Informatik Sommersemester 2003 Prof. Dr. Bernhard Bauer 18. Oktober 2003 Stefan Fischer, Dr.

Java - Programmierung - Objektorientierte Programmierung 1

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Objektorientierte Programmierung

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung

Vorlesung Objektorientierte Programmierung Probeklausur

Einführung in die Programmierung

U08 Entwurfsmuster (II)

Innere Klassen in Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 8. Arrays. Arrays

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Einführung in die Programmierung für Wirtschaftsinformatik

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken

5.6 Vererbung. Vererbung

Einführung in die Java- Programmierung

Allgemein: Klassen testbar machen. 5. Mocking. Mocks programmieren. Zusammenspiel von Klassen testen

Programmierkurs Java

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Bearbeitungszeit: 120 Minuten. Kommentare kosten Zeit; kommentieren Sie ihr Programm nur da, wo der Code alleine nicht verständlich wäre.

Alltagsnotizen eines Softwareentwicklers

Java-Vorkurs Wintersemester 15/16

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Prinzipien Objektorientierter Programmierung

Transkript:

Übungen zur Informatik A Hauptklausur 20.02.2003 Universität Koblenz-Landau Institut für Informatik WS 2002/3 Prof. Dr. Dietrich Paulus Dr. Manfred Jackel Bitte lösen Sie jede Aufgabe auf dem jeweiligen Blatt bzw. auf dessen Rückseite. Wenn Sie zusätzliche Blätter benötigen, dann vermerken Sie Ihren Namen auf jedem einzelnen Blatt. Jede Aufgabe wird mit 12 Punkten bewertet, die sich gleichmäßig auf die Teilaufgaben verteilen. Lesen Sie erst alle Aufgaben durch. Beginnen Sie mit der für Sie einfachsten. A Name:... Vorname:... Matrikelnummer:... E-Mail:... Übungsgruppe:... Studiengang: Informatik Computervisualistik... Aufgabe: 1 2 3 4 5 6 Punkte: Gesamtpunktzahl:... Viel Erfolg!

Aufgabe A1 Hier sehen Sie ein UML-Klassendiagramm mit 3 Klassen. Datum - int tag - int monat - int jahr + Datum(int t, int m, int j) + String tostring() Fahrzeugdaten - String fahrzeugtyp - String hersteller + Fahrzeugdaten(String ft, String h) + String tostring() FahrzeugSchein - String kennzeichen - Datum zugelassenam + Schein(?? ) + String tostring() a) Geben Sie Javacode für diese Klassen an. Alle Klassen sollen in eigenen Dateien liegen. b) Vervollständigen Sie die Signatur des Konstruktors FahrzeugSchein. Er soll alle Attribute der Klasse und der Basisklasse initialisieren. c) Programmieren Sie alle Konstruktoren aus. Denken Sie an den richtigen Aufruf des Superklassen-Konstruktors. d) Schreiben Sie eine Hauptklasse Probeklausur mit einer main-methode, die ein FahrzeugSchein-Objekt erzeugt und dessen Inhalt anzeigt, Typ Golf 4, Hersteller VW, Kennzeichen KO-PF 444, zugelassen am 20.2.2003.

Aufgabe A2 Gegeben sei folgende Syntax in EBNF: <Qualifier> ::= <Bezeichner> { <Punkt> <Bezeichner> <Bezeichner> ::= <Buchstabe> { <Buchstabe> <Strich> <Ziffer> <Buchstabe> ::= a b c... x y z <Strich> ::= _ <Punkt> ::=. <Ziffer> ::= 0 1... 8 9 a) Prüfen Sie, ob folgende Worte aus dem Startsymbol <Qualifier> ableitbar sind oder nicht. Geben Sie entweder den Ableitungsbaum an, oder ein Gegenargument, falls sich das Wort nicht ableiten lässt. (1.) _abc123 (2.) koblenz.o.lau (3.) abc123 b) Geben Sie Syntaxdiagramme für die Nonterminale <Qualifier> und <Bezeichner> an.

Aufgabe A3 Gegeben ist folgende (unfertige) Klasse Matrix, die quadratische Matrizen darstellen soll. Ein geeigneter Konstruktor, der hier nicht angegeben ist, möge die Werte der Matrixfelder im Attribut a ablegen. a) Programmieren Sie die Methode max(), die den Wert des größten Elementes in der Matrix ermittelt. b) Programmieren Sie die Methode diagonale(), die die Diagonale der Matrix liefert. class Matrix { int[][] a; public int max() { // bestimmen Sie das größte Element der Matrix. public int[] diagonale(){ //hier ihr Code für die Diagonale

Aufgabe A4 n f x = a x + + a 1x + 0... a wertet man am besten nach dem Horner-Schema Polynome ( ) n n aus: ( x) = ( ( a0 x + a1 ) x +... + an 1 ) x an f... +. Vervollständigen Sie nachfolgendes Programmstück durch die Methode pwert, die nach dem Hornerschema das Polynom mit den Koeffizienten double[] a = new double[n+1] an der Stelle x auswertet. class Polynom { private double[] a; public Polynom(double[] a) { this.a = a; double pwert(double x) {

Aufgabe A5 Folgendes Programm berechnet rekursiv die Fibonacci-Zahlen: static long fib(int n) { if (n<=1) return 1; return fib(n-1)+fib(n-2),... public static main(string[] args) { long r=fib(3);... Skizzieren Sie den Stack bei der Berechnung von fib(3), wenn zum ersten Mal fib(1) aufgerufen wird!

Aufgabe A6a Gegeben sei folgende Klasse Bruch, die Brüche normiert darstellt: In der internen Speicherung sind die Brüche vollständig gekürzt, der Nenner ist stets positiv, die Null wird eindeutig als 0/1 dargestellt. Die Klasse Bruch implementiert das Interface Comparable. a) Implementieren Sie die Methode public int compareto(object b). class Bruch implements Comparable{ private int zaehler, nenner; // normierte Darstellung hier! private int ggt(int a, int b) { if (b == 0) return a; else return ggt(b, a % b); public Bruch (int zaehler, int nenner) throws ArithmeticException { if (nenner==0) throw new ArithmeticException("Nenner ist 0"); if (nenner<0) { nenner = -nenner; zaehler = -zaehler; if (zaehler==0) { this.zaehler=0; this.nenner=1; else { int k = ggt(math.abs(zaehler), nenner); if (k==1) { this.zaehler=zaehler; this.nenner=nenner; else { this.zaehler=zaehler/k; this.nenner=nenner/k; int getzaehler() { return zaehler; int getnenner() { return nenner;

Aufgabe A6a (Fortsetzung) Hauptklausur zur Informatik A WS 2002/3 public int compareto(object b) { // -1 falls aktuelles Objekt kleiner b // 0 für gleich // 1 sonst // hierhin mit Ihrem Code.

Aufgabe A6.b In der Klasse Bruchrechnung sollen die Operationen Addition und Multiplikation zweier Brüche implementiert werden. die Methode mult haben wir schon ausprogrammiert. b) Programmieren Sie die Methode add aus. class Bruchrechnung { public static Bruch add(bruch a, Bruch b) throws ArithmeticException { // Platz für Ihre Lösung: public static Bruch mult(bruch a, Bruch b) throws ArithmeticException { return new Bruch(a.getZaehler()*b.getZaehler(), a.getnenner()*b.getnenner()); // Ein Beispiel, wie man diese Methoden anwenden kann: public static void main(string[] args)throws Exception { Bruch a=new Bruch(1,2); Bruch b=new Bruch(1,4); Bruch c=new Bruch(4,3); if (mult(add(a,b),c).compareto(new Bruch(1,1))==0) System.out.println("Richtig.");

Aufgabe B3 Hier sehen Sie ein UML-Klassendiagramm mit 3 Klassen. Datum - int tag - int monat - int jahr + Datum(int t, int m, int j) Fahrzeugdaten - String fahrzeugtyp - String hersteller + Fahrzeug(String ft, String h) + String tostring() FahrzeugSchein - String kennzeichen - Datum zugelassenam + Schein(?? ) + String tostring() e) Geben Sie Javacode für diese Klassen an. Alle Klassen sollen in eigenen Dateien liegen. f) Vervollständigen Sie die Signatur des Konstruktors FahrzeugSchein. Er soll alle Attribute der Klasse und der Basisklasse initialisieren. g) Programmieren Sie alle Konstruktoren aus. Denken Sie an den richtigen Aufruf des Superklassen-Konstruktors. h) Schreiben Sie eine Hauptklasse Probeklausur mit einer main-methode, die ein FahrzeugSchein-Objekt erzeugt und dessen Inhalt anzeigt, Typ Golf 4, Hersteller VW, Kennzeichen KO-PF 444, zugelassen am 20.2.2003.

Aufgabe B4 Gegeben sei folgende Syntax in EBNF: <Qualifier> ::= <Bezeichner> { <Punkt> <Bezeichner> <Bezeichner> ::= <Buchstabe> { <Buchstabe> <Strich> <Ziffer> <Buchstabe> ::= a b c... x y z <Strich> ::= _ <Punkt> ::=. <Ziffer> ::= 0 1... 8 9 a) Prüfen Sie, ob folgende Worte aus dem Startsymbol <Qualifier> ableitbar sind oder nicht. Geben Sie entweder den Ableitungsbaum an, oder ein Gegenargument, falls sich das Wort nicht ableiten lässt. (1.) _abc123 (2.) koblenz.o.lau (3.) abc123 b) Geben Sie Syntaxdiagramme für die Nonterminale <Qualifier> und <Bezeichner> an.

Aufgabe B5 Gegeben ist folgende (unfertige) Klasse Matrix, die quadratische Matrizen darstellen soll. Ein geeigneter Konstruktor, der hier nicht angegeben ist, möge die Werte der Matrixfelder im Attribut a ablegen. a) Programmieren Sie die Methode max(), die den Wert des kleinsten Elementes in der Matrix ermittelt. b) Programmieren Sie die Methode diagonale(), die die Diagonale der Matrix liefert. class Matrix { int[][] a; public int min() { // bestimmen Sie das kleinste Element der Matrix. public int[] diagonale(){ //hier ihr Code für die Diagonale

Aufgabe B6 n f x = a x + + a 1x + 0... a wertet man am besten nach dem Horner-Schema Polynome ( ) n n aus: ( x) = ( ( a0 x + a1 ) x +... + an 1 ) x an f... +. Vervollständigen Sie nachfolgendes Programmstück durch die Methode pwert, die nach dem Hornerschema das Polynom mit den Koeffizienten double[] a = new double[n+1] an der Stelle x auswertet. class Polynom { private double[] a; public Polynom(double[] a) { this.a = a; double pwert(double x) {

Aufgabe B1 Folgendes Programm berechnet rekursiv die Fibonacci-Zahlen: static long fib(int n) { if (n<=1) return 1; return fib(n-1)+fib(n-2),... public static main(string[] args) { long r=fib(3);... Skizzieren Sie den Stack bei der Berechnung von fib(3), wenn zum ersten Mal fib(1) aufgerufen wird!

Aufgabe B2.a Gegeben sei folgende Klasse Bruch, die Brüche normiert darstellt: In der internen Speicherung sind die Brüche vollständig gekürzt, der Nenner ist stets positiv, die Null wird eindeutig als 0/1 dargestellt. Die Klasse Bruch implementiert das Interface Comparable. a) Implementieren Sie die Methode public int compareto(object b). class Bruch implements Comparable{ private int zaehler, nenner; // normierte Darstellung hier! private int ggt(int a, int b) { if (b == 0) return a; else return ggt(b, a % b); public Bruch (int zaehler, int nenner) throws ArithmeticException { if (nenner==0) throw new ArithmeticException("Nenner ist 0"); if (nenner<0) { nenner = -nenner; zaehler = -zaehler; if (zaehler==0) { this.zaehler=0; this.nenner=1; else { int k = ggt(math.abs(zaehler), nenner); if (k==1) { this.zaehler=zaehler; this.nenner=nenner; else { this.zaehler=zaehler/k; this.nenner=nenner/k; int getzaehler() { return zaehler; int getnenner() { return nenner;

Aufgabe B2.a (Fortsetzung) Hauptklausur zur Informatik A WS 2002/3 public int compareto(object b) { // -1 falls aktuelles Objekt kleiner b // 0 für gleich // 1 sonst // hierhin mit Ihrem Code.

Aufgabe B2.b In der Klasse Bruchrechnung sollen die Operationen Subtraktion und Multiplikation zweier Brüche implementiert werden. die Methode mult haben wir schon ausprogrammiert. b) Programmieren Sie die Methode add aus, class Bruchrechnung { public static Bruch sub(bruch a, Bruch b) throws ArithmeticException { // Platz für Ihre Lösung: public static Bruch mult(bruch a, Bruch b) throws ArithmeticException { return new Bruch(a.getZaehler()*b.getZaehler(), a.getnenner()*b.getnenner()); // Ein Beispiel, wie man diese Methoden anwenden kann: public static void main(string[] args)throws Exception { Bruch a=new Bruch(1,1); Bruch b=new Bruch(1,4); Bruch c=new Bruch(4,3); if (mult(sub(a,b),c).compareto(new Bruch(1,1))==0) System.out.println("Richtig.");