public static void replace(stringbuffer b) { for (int i = 0; i < b.length(); i++) { char replacechar; switch( b.charat(i) ) {

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

Java - Programmierung - Prozedurale Programmierung 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

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

Java-Schulung Grundlagen

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Einstieg in die Informatik mit Java

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

II.4.5 Generische Datentypen - 1 -

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Matrikelnummer:

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

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Einführung in die Informatik 1

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Klausur "ADP" SS 2015

Programmiermethodik 3. Klausur Lösung

Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik

Einführung in die Informatik 1

Aufgabe 1 (Programmanalyse, Punkte)

Übungslösungen. 1. Übung

Allgemeine Hinweise:

Einführung in die Programmierung für Wirtschaftsinformatik

Klausur Grundlagen der Programmierung

16. Dezember 2004 Dr. M. Schneider, P. Ziewer

Ausnahmen. Exceptions. Definition Ausnahmen erzeugen Ausnahmen abfangen Ausnahmen weiterleiten. Dr. Beatrice Amrhein

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

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

Allgemeine Informatik II SS :30-13:30 Uhr

Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Musterlösung Stand: 5. Februar 2009

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

Selbststudium OOP7 & ALG2 Auftrag

Programmieren in Java

Primitive Datentypen

Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik

Informatik II. Giuseppe Accaputo, Felix Friedrich, Patrick Gruntz, Tobias Klenze, Max Rossmannek, David Sidler, Thilo Weghorn FS 2017

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

3. Übungsbesprechung Programmkonstruktion

Tutoraufgabe 1 (Fibonacci-Zahlen):

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Test zu Grundlagen der Programmierung Leitung: Susanne Guth/Michael Hahsler. 28. Februar 2003

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Große Übung Praktische Informatik 1

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

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Programmierkurs Java

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Klausur zur Informatik A WS 2001/2002 Name: Korrektor: Punkte: a) Zeichnen Sie zu der nachstehenden Syntax in EBNF die passenden Syntaxdiagramme.

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

Algorithmen und Datenstrukturen

Klausur Software-Entwicklung März 01

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Datenbankanwendungsprogrammierung Crashkurs Java

Interfaces und Generics

12 Abstrakte Klassen, finale Klassen und Interfaces

ADT: Verkettete Listen

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung "Programmieren 1", IN1bac, WS 10/11 Seite 1 von 6

14 Abstrakte Klassen, finale Klassen, Interfaces

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

int x = 3; int y = 11; public A () { this.x = z; y *= z;

Institut für Programmierung und Reaktive Systeme 7. Juli Programmieren II. Übungsklausur

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

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Objektorientierte Programmierung Studiengang Medieninformatik

Name: Matrikelnr : Aufgabe 1: (ca. 8 Punkte )

JAVA für Nichtinformatiker - Probeklausur -

Propädeutikum zur Programmierung

1 Abstrakte Klassen, finale Klassen und Interfaces

Programmieren in Java

Objektorientierte Programmierung

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

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

Einführung in die Programmierung

Distributed Computing Group

Probeklausur Informatik 2 Sommersemester 2013

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II

Einführung in die Programmierung Vorlesungsprüfung

Programmieren 2 Java Überblick

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Android Programmierung mit Java Studiengang MI

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

JAVA - Methoden,... T.Bosse

Programmieren in Java

Algorithmen und Datenstrukturen. Übersicht. Interfaces und Generics. InsertionSort für Punkte. InsertionSort für Punkte

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Transkript:

Klausur aus Softwareentwicklung 1 Klausur am 3.2.2005 Institut für Pervasive Computing Univ.-Prof. Dr. Alois Ferscha Zuname Vorname Matr. Nr. SKZ HS Sitzplatz Punkte Note 1.Mehrfachverzweigung In einem StringBuffer sei eine Zeichenkette gespeichert. (3 * 1 Punkte) Implementieren Sie eine Methode static void replace(stringbuffer b), welche alle Vokale durch ein jeweils anderes Zeichen ersetzt. Folgende Ersetzungstabelle soll gelten: Vokal a e i o u Ersetzung = & $? public static void replace(stringbuffer b) { for (int i = 0; i < b.length(); i++) { char replacechar; switch( b.charat(i) ) { case 'a': replacechar = '='; case 'e': replacechar = '&'; case 'i': replacechar = '$'; case 'o': replacechar = ' '; case 'u' replacechar = '?'; default: replacechar = b.charat(i); b.setcharat(i, replacechar) ;

2.Ausdrücke (6 * 1 Punkte) Ermitteln Sie die Ergebnisse folgender Ausdrücke und tragen Sie diese in die nebenstehenden Antwortkästchen ein. class AusdruckTest { public static void main(string args[]) { int a = 2; int b = 3; System.out.println(a++ + a - --b); // 2 System.out.println(a b); // 3 System.out.println(a & b); // 2 System.out.println(a / b + 1); // 2 System.out.println((int) (((float) a) / ((float) b) * 4.0)); // 6 System.out.println((b * 2) % a); // 1 3.Iteration (4 * 1 Punkte) Gegeben sind zwei aufsteigend sortierte Integer-Arrays int[] a1 und int[] a2. Implementieren Sie die Methode int[] merge(int[] a1, int[] a2), welche die beiden Arrays zusammenführt und dieses neue, wieder aufsteigend sortierte Integer-Array zurück gibt. Sie können davon ausgehen, dass die Zahlen die in a1 gespeichert sind in a2 nicht vorkommen und umgekehrt. Beispiel: 1 2 3 6 7 9 10 4 5 8 1 2 3 4 5 6 7 8 9 10 public static int[] merge(int[] a1, int[] a2) { int[] merged = new int[a1.length + a2.length]; int a1index = 0; int a2index = 0; for (int i = 0; i < a1.length + a2.length ; i++) { if ((a2index >= a2.length) ((a1index < a1.length) && ( a1[a1index] < a2[a2index] ))) { merged[i] = a1[a1index] ; a1index++; else { merged[i] = a2[a2index] ; a2index++; return merged;

4.Arrays (4 * 1 = 4 Punkte) Gegeben sei eine große, dünn besetzte (nur wenige Elemente sind ungleich 0) Matrix m vom Datentyp double[][]. Gesucht ist eine Methode List[] convert(double[][] m), welche als Ergebnis ein Array von Listen liefert (für jede Zeile der Matrix eine lineare Liste), sodass in diesen Listen nur diejenigen Elemente der Matrix zusammen mit ihren Spaltennummern vorkommen die ungleich 0 sind. Beispiel: 01 1 01 30 22 24 2 22 0 30 4 24 public class Node { int index; double value; Node next; public Node(int index, double value) { this.index = index; this.value = value; next = null; public class List { Node head; public List() { head = null; public void append(node n) { Node cur = head; if (cur!= null) { while(cur.next!= null) { cur = cur.next; cur.next = n; else { head = n; public static List[] convert(double[][] m) { List[] l = new List[m.length]; for (int i = 0; i < l.length; i++) { l[i] = new List(); for (int row = 0; row < m.length ; row++) { for (int col = 0; col < m[row].length ; col++) { if (m[row][col]!= 0.0) { l[row].append(new Node( col, m[row][col] )); return l;

5.Listen (6 * 0.5 = 3 Punkte) Gegeben ist eine Liste List welche ganze Zahlen verwaltet. Gesucht sind die beiden Methoden int sumpositivenumbers() und int sumnegativnumbers(). int sumpositivenumbers() summiert alle in der Liste vorkommenden positiven Zahlen und gibt das Ergebins zurück und int sumnegativenumbers() summiert alle in der Liste vorkommenden negativen Zahlen und gibt ebenfalls das Ergebnis zurück. Sie können davon ausgehen, dass alle anderen zum Aufbau der Liste notwendigen Methoden implementiert sind. class Node { private int value; private Node next; public Node(Node prevnode, int value) { if (prevnode!= null) { prevnode.next = this; this.next = null; this.value = value; public int getvalue() { return value; public Node getnext() { return next; public class List { Node head = null; public List() {... public int sumpositivenumbers() { int sum = 0; Node actnode; for (actnode = head; actnode!= null; actnode = actnode.getnext() ) { if ( actnode.getvalue() > 0 ) { sum += actnode.getvalue() ; return sum; public int sumnegativenumbers() { int sum = 0; Node actnode; for (actnode = head; actnode!= null; actnode = actnode.getnext() ) { if ( actnode.getvalue() < 0 ) { sum += actnode.getvalue() ; return sum;

6.Vererbung (6 * 1 + 6 * 0.5 = 9 Punkte) Regelmäßige geometrische Figuren sind solche, bei denen alle Seiten gleich lang sind. Beispiele dafür sind das gleichseitige Dreieck, das Quadrat und das regelmäßige Sechseck. Leiten Sie von der abstrakten Klasse Figur drei Subklassen für die konkreten regelmäßigen Figuren gleichseitiges Dreieck, Quadrat und regelmäßiges Sechseck ab und implementieren Sie jeweils den Konstruktor und die beiden abstrakten Methoden double flaeche() und double umfang(). Beachten Sie, dass die Variable a in der Klasse Figur private ist, weshalb Sie nicht direkt aus den Subklassen auf diese Variable zugreifen können. Figur Fläche Umfang gleichseitiges Dreieck 3 4 a2 3 a Quadrat a 2 4 a regelmäßiges Sechseck 3 3 2 a2 6 a abstract class Figur { private double a; public Figur(double a) { this.a = a; double geta() { return a; abstract double flaeche(); abstract double umfang(); class Quadrat extends Figur { public Quadrat(double a) { super(a) ; public double flaeche() { return geta() * geta() ; public double umfang() { return 4 * geta() ;

class GleichseitigesDreieck extends Figur { public GleichseitigesDreieck(double a) { super(a) ; public double flaeche() { return Math.sqrt(3) * geta() * geta() / 4 ; public double umfang() { return 3 * geta() ; class RegelmaessigesSechseck extends Figur { public RegelmaessigesSechseck(double a) { super(a) ; public double flaeche() { return 3 * Math.sqrt(3) * geta() * geta() / 2 ; public double umfang() { return 6 * geta() ; 7.Rekursion Gegeben sei ein Feld von m n Einheitsquadraten. Gesucht ist die Anzahl der kürzesten Wege längs der Seiten der Einheitsquadrate, die von der linken unteren Ecke zur rechten oberen Ecke führen. Vervollständigen Sie die nachfolgende rekursive Methode so, dass die Anzahl der kürzesten Wege ermittelt wird. public static int numshortestways(int m, int n) { if (m == 1 n == 1) { return n + m ; return numshortestways( m 1, n ) + (5 * 1 = 5 Punkte) Ziel m 1 Start1 n die numshortestways( m, n 1 );

8.Exception (6 * 1 = 6 Punkte) Die Methode public static int teileganzzahlig(int a, int b) ist Teil einer Arithmetik-Klasse und soll die beiden übergebenen Argumente als Zähler und Nenner eines Bruchs a /b interpretieren und versuchen a ganzzahlig durch b zu dividieren. Hierbei sind zwei Fehlerfälle zu unterscheiden: 1. Der Nenne b ist 0 (division by zero) und 2. a läßt sich nicht ohne Rest durch b teilen (not divisible without remainder). Vervollständigen Sie folgendes Programmfragment so, dass für beide Fehlerfälle jeweils eine Exception signalisiert wird. Im Fall 1 soll das eine DivisionByZeroException und im Fall 2 eine NotDivisibleWithoutReminderException sein. public class DivisionByZeroException extends Exception { public class NotDivisibleWithoutReminderException extends Exception { private int a; private int b; public NotDivisibleWithoutReminderException(int a, int b) { this.a = a; this.b = b; public int getzaehler() { return a; public int getnenner() { return b; public class Arithmetik { public static int teileganzzahlig(int a, int b) throws DivisionByZeroException, NotDivisibleWithoutReminderException { if (b == 0) { throw new DivisionByZeroException() ; if (a % b!= 0) { throw new NotDivisibleWithoutReminderException(a, b) ; return a / b; public class Arithmetik Programm { public static void main(string args[]) { try { System.out.println(Arithmetik.teileGanzzahlig(4,3)); catch ( DivisionByZeroException dze ) { System.out.println("Division durch 0 aufgetreten"); catch ( NotDivisibleWithoutReminderException ndwr ) { System.out.println(ndwr.getZaehler() + " laesst sich nicht ganzzahlig durch " + ndwr.getnenner() + " dividieren");