Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J. O. Blech Dipl.-Inform. M. J. Gawkowski Dipl.-Inform. N. Rauch
TU Kaiserslautern
Fachbereich Informatik AG Softwaretechnik
Ubungsblatt 8: Software-Entwicklung I (WS 2006/07) ¨
Ausgabe: 12. Dezember 2006 Abgabe: 18. Dezember 2006, 12.00 Uhr Abnahme praktischer Teil: 18. - 22. Dezember 2006
Aufgabe 1 Programmierung mit Feldern (praktisch) (15 Punkte)
In dieser Aufgabe soll eine kleine Arithmetisch-Logische Einheit (ALU) in Form eines Java-Pro- gramms implementiert werden. Die ALU soll mit 8 Bit breiten Daten arbeiten. Jedes Datum soll dabei durch ein Feld ausboolean-Variablen dargestellt werden.
Erweitern Sie zur L¨osung der Aufgabe das folgende Fragment, in dem beispielhaft auch die Imple- mentierung der bitweisenNot-Funktion gezeigt ist:
class ALU extends InputOutput {
static boolean[] not (boolean[] arg) { boolean[] result = new boolean[8];
for (int i = 0; i < 8; i++) { result[i] = !arg[i];
}
return result;
} }
a) Implementieren Sie analog zum Beispielnotdie Bitoperationenand,or,xorundshl(ShiftLeft).
(4 Punkte)
Beispiel: shl101110012= 011100102
b) Implementieren Sie die OperationenAddition(add),Subtraktion(sub) undMultiplikation(mul) f¨ur ganze Zahlen. Das erste Bit gibt das Vorzeichen an (1 f¨ur negative Zahlen). Die folgenden sieben Bits den vorzeichenlosen Zahlenwert. Welchen Zahlenbereich kann diese Darstellung dar- stellen? Was passiert bei einem ¨Uberlauf/Unterlauf? (6 Punkte) c) Implementieren Sie analog zum Beispielnoteinen Vergleichsoperatoreqlf¨ur die ganzen Zahlen
in oben beschriebener Darstellung. (1 Punkte)
d) Implementieren Sie zwei KonvertierungsprozedurenfromInt und toInt, mit denen Werte des Typsintin Bitvektoren konvertiert werden k¨onnen und umgekehrt. (4 Punkte) Ihre Implementierung sollten Sie dann mit folgendem Hauptprogramm testen k¨onnen:
public static void main (String[] args) { boolean[] a1,a2;
a1 = fromInt(-6);
a2 = fromInt(3);
println(toInt(add(a1,a2)));
println(toInt(sub(a1,a2)));
println(toInt(mul(a1,a2)));
println(toInt(shl(a1)));
}
Aufgabe 2 Stapel in Java (praktisch) (9 Punkte)
In dieser Aufgabe geht es darum, die Datenstruktur der Stapel von Zeichenreihen und die Opera- tionenpush,pop undtop in Java zu implementieren.
Benutzen Sie dabei folgende Definitionen:
class Stacknode {
Stacknode next; //Zeiger auf das naechste Element String content; // hier Inhalt
}
class Stack {
Stacknode first;
} ...
static void push(Stack s,String e) { ...
}
static void pop(Stack s) { ...
}
static String top(Stack s) { ...
}
a) Erg¨anzen Sie die Java-Prozedur push. Sie soll den ¨Ubergebenen String auf den ¨ubergebenen Stapel legen. Was passiert, wenn ein Stapel leer ist? (4 Punkte) b) Erg¨anzen Sie analog zu oben die Java-Prozedurpop. (2 Punkte) c) Erg¨anzen Sie analog zu oben die Java-Prozedurtop. (1 Punkte) d) Testen Sie Ihre Implementierung anhand geeigneter Beispiele! Geben Sie diese Beispiele mit ab. Stellen Sie einen von Ihnen erzeugten Stapel mit mindestens drei Elementen in der graphi-
schen Notation der Vorlesung dar. Erl¨autern Sie Gemeinsamkeiten und Unterschiede zu den ML
Stapeln. (2 Punkte)
Aufgabe 3 Rekursion vs. Iteration (6 Punkte)
a) Erg¨anzen Sie folgendes Programm, das testet, ob eine Zahl eine Primzahl ist!
fun isprim(n) = ipe(n,n-1);
fun ipe (0,n) = False
| ipe (1,n) = False
| ipe (2,n) = True
| ipe (m,n) = ... ipe (m,n-1) ...;
Uberf¨¨ uhren Sie es mit dem in der Vorlesung vorgestellten Verfahren in ein prozedurales Pro- gramm ohne Rekursion. Erl¨autern Sie Ihre Vorgehensweise!