. . Fachhochschule Bochum FB3 - Elektrotechnik und Informatik Grundlagen Informatik Prof. Dr. K. Brabender Prof. Dr. C. Köhn Name, Vorname Elektrotechnik und Informatik Mechatronik Datum Matrikelnummer Klausur Punkte : 13.09.2006 ................... / 100 .....................% Allgemeine Hinweise zur Klausur Kennzeichnen Sie Ihre Studienrichtung auf dem Deckblatt. Schreiben Sie auf jeder Seite oben rechts ihren Namen. Schreiben Sie die Lösungen der Aufgaben in den freien Platz nach der Aufgabenstellung. Sollte der Platz auf den Blättervorderseiten nicht ausreichen nutzen Sie die leere, gegenüberliegende Seite. Kennzeichnen Sie jede Aufgabe mit der Aufgabennummer und dem Unterpunkt – also z.B. 1.x. Als Hilfsmittel sind 3 hand beschriebene Blätter (Vorder- und Rückseite, d.h. 6 Seiten) zugelassen. Andere Hilfsmittel, wie Taschenrechner etc., sind nicht erlaubt. Es gibt 8 Aufgaben mit insgesamt 100 Punkten. Mit 50 Punkten ist die Klausur bestanden. Bearbeitungszeit: 180 Minuten. Seite 1 von 14 Name: Aufgabe 1 – Zahlenumwandlung und Rechenoperationen 12 Punkte A P4 Berechnen Sie nach dem Quellenverfahren (Divisionsmethode) folgende Aufgaben: a) 7310=x16 b) 9810=x8 c) 3110=x5 a) 4916 b) 1428 c) 1115 B Berechnen Sie nach dem Horner-Schema folgende Aufgaben: P4 a) 0x3B2=x10 b) 1118=x10 c) 101112=x10 a) 94610 b) 7310 c) 2310 C P4 Die 32-Bit Gleitkommadarstellung nach der Norm IEEE 754 hat folgenden Aufbau: Anzahl der Bits: 1 Feldbezeichnung: v 8 e 23 f Lösung: Für den dargestellten Wert w gilt: v e-127 w = -1 * 2 *1.f Füllen Sie die Tabelle aus für w = -4,75 Grundlagen der Informatik 13.09.2006 Seite 2 von 14 Name: Aufgabe 2 –Zahlendarstellung im Rechner A P4 4 Punkte Berechnen Sie die folgenden Zahlen in der binären Darstellung mit der Hilfe des Zweierkomplements. Verwenden Sie eine 4-Bit-Darstellung. a) 6 – 3 = 6+(-3)= 0110+1101=0011 b) (7 – 2) – 3 = (7+(-2))+(-3)= 0111+1110+1101=0010 Aufgabe 3 – Algorithmen 10 Punkte A P 10 Der MergeSort ist ein in der Informatik bekannter Sortieralgorithmus. Erläutern Sie, wie der MergeSort arbeitet und was ihn von den anderen Sortieralgorithmen unterscheidet, die Sie in der Vorlesung kennen gelernt haben. Lösung: Der MergeSort teilt das Array in zwei gleich große Teilarrays auf. Jedes dieser unsortierten Teilarrays wird mit dem MergeSort sortiert, zuerst das linke, dann das rechte. Sind beide Teilarrays sortiert, so werden beide Teilarray mit der Methode merge() gemischt, d.h. zusammengefügt. Das Sortieren der beiden Teilarrays erfolgt rekursiv, d.h. ein Teilarray wird sortiert, indem es in zwei Teilarrays unterteilt wird, sortiert wird und mit merge() zusammengefügt wird. Das rekursive Verfahren hat ein Ende, wenn das Teilarray nur noch aus einem Element besteht. Unterschied zu den anderen Verfahren: MergeSort ist rekursiv, Bubble Sort ist iterativ, MergeSort teilt das Array immer in zwei gleichgroße (+1) Teilarrays auf, QuickSort teilt das Array je nach Größe des Pivot Elementes auf. Grundlagen der Informatik 08.03.2006 Seite 3 von 14 Name: Aufgabe 4 – Java-Verständnisfragen A 12 Punkte Was versteht man unter „Polymorphie“ in der Objektorientierung? P3 B Erläutern Sie, was das reservierte Wort static in Java für eine Bedeutung hat. P3 C P3 D P3 Was versteht man unter einer abstrakten Klasse in Java und wie wird sie in Java gekennzeichnet? Nennen Sie alle Unterschiede zu einer normalen Klasse. Verdeutlichen Sie den Unterschied zwischen „Überladen“ und „Überschreiben“ von Methoden Grundlagen der Informatik 08.03.2006 Seite 4 von 14 Name: Aufgabe 5: Java-Programmierung A 20 Punkte Die Klasse Random aus dem Paket java.util enthält keine Methode zur Erzeugung eines zufälligen Zeichens und keine Methode zur Erzeugung einer zufälligen Zeichenkette. Schreiben Sie eine Klasse RandomC, die von der Klasse Random erbt. RandomC enthalte • P1 zwei Attribute u und o vom Datentyp int für die untere und obere Grenze, zwischen denen das Zeichen erzeugt werden soll (z.B. u = 65 und o = 90 würde alle Zeichen zwischen ASCII 65 und ASCII 90, d.h. alle Großbuchstaben des Alphabetes, erzeugen). • P2 zwei Konstruktoren. Der erste Konstruktor ist parameterlos und initialisiert die Attribute mit den Werten u = 32, o = 127, der zweite Konstruktor initialisiert die beiden Attribute mit zu übergebenden Werten. P2 • set-Methoden für die beiden Attribute u und o. • eine Methode nextChar(). Diese Methode ermittelt ein zufälliges P3 Zeichen, das zwischen den Grenzen u und o liegt (einschließlich u und o, d.h. beide Grenzwerte können angenommen werden) und gibt diese Zeichen als char zurück. • P4 eine Methode nextString(). Diese Methode bekommt eine Länge n übergeben und ermittelt eine zufällige Zeichenkette der Länge n und gibt diese Zeichenkette zurück. Jedes Zeichen der Zeichenkette nimmt einen Wert zwischen ASCII u und ASCII o an. Grundlagen der Informatik 08.03.2006 Seite 5 von 14 Name: Lösung: import java.util.*; class RandomC extends Random{ private int u, o; public RandomC(){ super(); u = 32; o = 127; } public RandomC(int u, int o){ super(); this.u = u; this.o = o; } public void setU(int u){ this.u = u; } public void setO(int o){ this.o = o; } public char nextChar(){ return (char)(nextInt(o-u+1)+u); } public String nextString(int laenge){ String hilf = ""; for (int i = 0; i < laenge;i++) hilf += nextChar(); return hilf; } } Grundlagen der Informatik 08.03.2006 Seite 6 von 14 Name: B Schreiben Sie eine Applikation, die P1 • ein Array der Länge 100 vom Datentyp String erzeugt, P3 • dieses Array mit zufällig erzeugten Strings füllt. Jeder String hat eine zufällige Länge zwischen 1 und 5 und besteht aus zufälligen Zeichen zwischen ASCII 65 und ASCII 90. Benutzen Sie für diesen Teil der Aufgabe die Klasse RandomC, P1 • die Werte des Arrays auf dem Bildschirm ausgibt, P2 • das Array mit Hilfe der Methode sort der Klasse Arrays sortiert, • das sortierte Array ausgibt. P1 Lösung: import java.util.*; class SortStrings{ public static void main(String args[]){ RandomC zufall = new RandomC(65,90); String[] a = new String[100]; for (int i = 0; i < a.length; i++){ a[i] = zufall.nextString(zufall.nextInt(6)); } System.out.println("unsortiertes Array"); for (int i = 0; i< a.length; i++){ System.out.println(a[i]); } System.out.println(); System.out.println("sortiertes Array"); Arrays.sort(a); for (int i = 0; i< a.length; i++){ System.out.println(a[i]); } } } Grundlagen der Informatik 08.03.2006 Seite 7 von 14 Name: Aufgabe 6: Java-Programmierung 20 Punkte Schreiben Sie eine Klasse, die zwei Methoden enthält. P7 • eine Methode anzahlGeradeZahlen(), die eine LinkedList mit Integer Werten sowie einen boolschen Wert (true steht für gerade Zahlen, false für ungerade Zahlen) übergeben bekommt. Die Methode zählt die Anzahl der geraden bzw. ungeraden Zahlen in der LinkedList und gibt diese Zahl zurück. P8 • eine main-Methode. In dieser Methode wird aus einer Textdatei mit dem Namen zahlen.txt gelesen. Die Textdatei enthält Integer Zahlen, die untere einander in der Datei stehen. Diese Zahlen werden in eine LinkedList geschrieben. Anschließend wird die Summe der geraden Zahlen sowie die Summe der ungeraden Zahlen mittels der Methode anzahlGeradeZahlen() ermittelt und beide Werte auf dem Bildschirm ausgegeben. • P5 Bemerkung: Es kann sein, dass die Datei zahlen.txt nicht nur Integer Zahlen sondern auch Dezimalzahlen oder Textelemente enthält. Fangen Sie diese Fehler beim Auslesen der Daten ab und geben Sie im Falle des Auftretens eine entsprechende Meldung auf dem Bildschirm aus. Es soll aber dennoch die Summe der geraden Zahlen bzw. der ungeraden Zahlen von allen vorhandenen Integer Zahlen ermittelt werden. LinkedList list = new LinkedList(); Grundlagen der Informatik 08.03.2006 Seite 8 von 14 Name: Lösung: import java.util.*; import java.io.*; class AnzahlLinkedList{ static int anzahlGeradeZahlen(LinkedList<Integer> l, boolean z){ int anzahl = 0; for (int i = 0; i < l.size(); i++){ if(l.get(i)%2 == 0) anzahl++; } if (z) return anzahl; else return l.size()-anzahl; } public static void main(String args[])throws IOException{ LinkedList<Integer> list = new LinkedList<Integer>(); BufferedReader br = new BufferedReader(new FileReader("zahlen.txt")); String lies = null; while ((lies=br.readLine())!= null){ try{ list.add(Integer.parseInt(lies)); }catch(Exception e){ System.err.println("Datei enthält auch nicht Integer Zahlen"); } } int anzahlgerade = anzahlGeradeZahlen(list,true); int anzahlungerade = anzahlGeradeZahlen(list,false); System.out.println(anzahlgerade); System.out.println(anzahlungerade); } } Grundlagen der Informatik 08.03.2006 Seite 9 von 14 Name: Aufgabe 7 – Java-Programmierung 12 Punkte A Entwickeln Sie eine Applikation mit einem Fenster. Folgende Eigenschaften P12 sollte das Fenster haben: Größe: 200x200 Pixel, Titel: „Mein Fenster“, Applikation: Die Aufgabe soll mit einem JFrame oder mittels eines Applet gelöst werden Ein Button soll auf der Mitte des Fenster positioniert sein. Auf Knopfdruck soll das J-Frame-Fenster auf 400x600 Pixel vergrößert werden oder ein String „Hallo Welt“ beim Applet ausgegeben werden. Hilfestellung JFrame: javax.swing.*; ist das Package für das JFrame; JFrame ist die Mutterklasse des Fensters, JButton ist die Mutterklasse für den Button Sinnvolle Methoden: setTitle(String); setSize(int,int); setVisible(boolean); Hilfestellung Applet: java.applet.* ist das Package für das Applet; Applet ist die Mutterklasse für das Applet Die Implementation über den Browser ist mit folgendem TAG zu realsieren: <applet> </applet> Die Attribute des TAGs sind code, width, height Sinnvolle Methoden für das Applet: public void init(){} setVisible(boolean); void paint(Graphics g) drawString(String str, int x, int y); Weitere Hinweise siehe Anhang. Grundlagen der Informatik 08.03.2006 Seite 10 von 14 Name: Aufgabe 7 – Java-Programmierung Grundlagen der Informatik 08.03.2006 12 Punkte Seite 11 von 14 Name: A import javax.swing.*; P12 import java.awt.event.*; public class HelloFrame extends JFrame implements ActionListener{ HelloFrame( ) { setTitle( "Mein Fenster" ); setSize( 200, 200 ); setzeButton(); setVisible( true ); } void setzeButton(){ JButton b = new JButton("Vergrößern"); getContentPane().add(b); b.addActionListener(this); } public void actionPerformed(ActionEvent e){ setSize(400,600); } public static void main( String args [] ){ HelloFrame f = new HelloFrame( ); } } import java.applet.*; import java.awt.*; import java.awt.event.*; public class simple extends Applet implements ActionListener { Button b1; public void init() { setLayout (new FlowLayout() ); Button b1 = new Button("Knopf 1"); b1.addActionListener (this); add(b1); } public void actionPerformed(ActionEvent event) { repaint(); } public void paint(Graphics g) { g.drawString("Heinz ist doof",50,25); } } Aufgabe 8 – Java-Programmierung Grundlagen der Informatik 08.03.2006 12 Punkte Seite 12 von 14 Name: A Was ist die Ausgabe des folgenden Programms? 6P class Eltern{ public void eigenschaft(){ System.out.println("Objekt der Elternklasse"); } } class Kind extends Eltern{ public String methodeKind(){ return "Dies ist eine Methode des Kindes"; } public void eigenschaft(){ System.out.println("Objekt der Kindklasse"); } } public class Ausgabe { public static void main (String args[]){ Eltern[] feld = new Eltern[4]; feld[0] = new Eltern(); feld[1] = new Kind(); feld[2] = new Kind(); feld[3] = new Eltern(); for (int i = 0; i< feld.length; i++){ feld[i].eigenschaft(); } } } Lösung: Objekt der Elternklasse Objekt der Kindklasse Objekt der Kindklasse Objekt der Elternklasse Grundlagen der Informatik 08.03.2006 Seite 13 von 14 Name: B Mit welchen Objekten aus dem Array feld kann die Methode methodeKind() 6P aufgerufen werden? Geben Sie diesen bzw. diese Aufrufe im Java Code an. Lösung: Aufruf mit feld[1] und feld[2]. Aufrufe: ((Kind)feld[1]).methodeKind(); ((Kind)feld[2]).methodeKind(); Grundlagen der Informatik 08.03.2006 Seite 14 von 14