Grundlagen Informatik

Werbung
.
.
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
Herunterladen