Übungen zu Einführung in die Informatik II - Technische Universität ...
Übungen zu Einführung in die Informatik II - Technische Universität ...
Übungen zu Einführung in die Informatik II - Technische Universität ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Technische</strong> <strong>Universität</strong> München SS 2006<br />
Fakultät für <strong>Informatik</strong> Übungsblatt 5<br />
Prof. Dr. A. Knoll 30. Juni 2006<br />
<strong>Übungen</strong> <strong>zu</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> <strong>Informatik</strong> <strong>II</strong><br />
Aufgabe 15<br />
Kleidung<br />
a) Wir def<strong>in</strong>ieren <strong>zu</strong>nächst <strong>die</strong> Aktionenmenge A = {a 0 ,...,a n }:<br />
a 0 : Anziehen der Unterhose<br />
a 1 : Anziehen der Hose<br />
a 2 : Anziehen des Guertels<br />
a 3 : Anziehen des Unterhemds<br />
a 4 : Anziehen des Hemds<br />
a 5 : Anlegen der Hosentraeger<br />
a 6 : Anlegen der Krawatte<br />
a 7 : Anziehen des Jackets<br />
a 8 : Anziehen der Socken<br />
a 9 : Anziehen der Schuhe<br />
a 10 : Anlegen des Mantels<br />
a 11 : Aufsetzen des Huts<br />
Die Def<strong>in</strong>ition der Ereignismenge E lässt sich nicht direkt aus realen Gegebenheiten herleiten.<br />
Wir nehmen daher an, dass es sich bei e<strong>in</strong>em Ereignis quasi um den Willen der Person<br />
handelt, e<strong>in</strong> bestimmtes Kleidungsstück anlegen <strong>zu</strong> wohlen. D.h. wir def<strong>in</strong>ieren für jede der<br />
o.g. Aktionen jeweils e<strong>in</strong> Ereignis e i das <strong>die</strong> Aktion auslöst. Es gilt also α(e i ) = a i<br />
Zur Def<strong>in</strong>ition des Prozesses benötigen wir schließlich noch <strong>die</strong> Kausalitätsrelation<br />
– 2 –<br />
c) E<strong>in</strong>e vollständige Sequenzialisierung wäre z.B.:<br />
e 0 ↦→ e 1 ↦→ e 8 ↦→ e 9 ↦→ e 2 ↦→ e 3 ↦→ e 4 ↦→ e 6 ↦→ e 5 ↦→ e 7 ↦→ e 11 ↦→ e 10<br />
c) Transitivität bedeutet im Fall der Kausalitätsrelation: (a < b) ∧ (b < c) ⇒ (a < c), also z.B.<br />
folgt aus der Tatsache, dass das Unterhemd vor dem Hemd und <strong>die</strong>ses wiederum vor dem<br />
Jacket angezogen werden muss, dass das Unterhemd vor dem Jacket angezogen werden<br />
muss.<br />
Wegen der Transitivität der Relation lässt sich auch leicht zeigen, dass <strong>die</strong> Unterhose vorm<br />
Jacket angezogen werden muss: <strong>die</strong> Unterhose muss vor der Hose angezogen werden und<br />
<strong>die</strong>se vor den Hosenträgern ((e 0 ,e 1 ) ∧ (e 1 ,e 5 ) ⇒ (e 0 ,e 5 )). Das Jacket kann wiederum erst<br />
nach den Hosenträgern angezogen werden ((e 5 ,e 7 ) ∧ (e 0 ,e 5 ) ⇒ (e 0 ,e 7 )q.e.d.)<br />
Aufgabe 16<br />
Kle<strong>in</strong>stes Präfix<br />
Ausgehend von der Ereignismenge E = {e i : i ∈ IN 0 } und der Aktionenmenge A = {a 0 ,a 1 ,a 2 ,a 3 }<br />
sei der Prozess P = (E,
– 3 –<br />
E<strong>in</strong>e vollständige Sequentialisierung erhält man durch topologisches Sortieren. Dabei s<strong>in</strong>d<br />
<strong>die</strong> Knoten derart <strong>in</strong> e<strong>in</strong>er L<strong>in</strong>ie an<strong>zu</strong>ordnen, dass alle Kanten <strong>in</strong> <strong>die</strong> gleiche Richtung zeigen.<br />
(Das lässt sich leicht bewerkstelligen, <strong>in</strong>dem man mit e<strong>in</strong>em Knoten beg<strong>in</strong>nt, auf den<br />
ke<strong>in</strong>e Kante zeigt, <strong>die</strong>sen aus dem Graphen samt se<strong>in</strong>en ausgehenden Kanten entfernt und<br />
so fortfährt, bis <strong>die</strong> Knotenmenge erschöpft ist. Zyklenfreiheit ist bei Prozessen gegeben.)<br />
Die l<strong>in</strong>eare Ordnung, <strong>die</strong> sich daraus <strong>in</strong> derselben Richtung zwischen den Knoten ergibt,<br />
erweitert <strong>die</strong> ursprüngliche Relation. Das Ergebnis e<strong>in</strong>er vollständigen Sequentialisierung<br />
ist e<strong>in</strong> sequentieller Prozess.<br />
c) Die Spuren (<strong>die</strong> Aktionsströme der vollständigen Sequentialisierungen) von P 4,5 :<br />
< a 0 , a 1 , a 2 , a 3 , a 0 , a 1 > < a 1 , a 0 , a 2 , a 3 , a 0 , a 1 ><br />
< a 0 , a 1 , a 2 , a 3 , a 1 , a 0 > < a 1 , a 0 , a 2 , a 3 , a 1 , a 0 ><br />
< a 0 , a 1 , a 3 , a 2 , a 0 , a 1 > < a 1 , a 0 , a 3 , a 2 , a 0 , a 1 ><br />
< a 0 , a 1 , a 3 , a 2 , a 1 , a 0 > < a 1 , a 0 , a 3 , a 2 , a 1 , a 0 ><br />
< a 0 , a 1 , a 3 , a 1 , a 2 , a 0 > < a 1 , a 0 , a 3 , a 1 , a 2 , a 0 ><br />
< a 0 , a 2 , a 1 , a 3 , a 0 , a 1 ><br />
< a 0 , a 2 , a 1 , a 3 , a 1 , a 0 ><br />
Aufgabe 17<br />
Aktionsstruktur (Prozess)<br />
a) Zur Def<strong>in</strong>ition der Aktionsstruktur (E 0 ,< 0 ,α) über e<strong>in</strong>er Menge E von Ereignissen und<br />
e<strong>in</strong>er Menge A von Aktionen gehört <strong>die</strong> Forderung, dass <strong>die</strong> Kausalitätsrelation < 0 endlich<br />
fun<strong>die</strong>rt ist.<br />
(1) Die Forderung drückt aus, dass jedes Ereignis (auch <strong>in</strong> unendlichen Prozessen) nur<br />
endlich viele kausale Vorgänger besitzt. Darauf beschränkt sich unsere Theorie, <strong>in</strong> der<br />
Annahme e<strong>in</strong> breites Spektrum von Anwendungen <strong>zu</strong> erfassen.<br />
(2) E<strong>in</strong>e partielle Ordnung heißt Noethersch, wenn es ke<strong>in</strong>e unendlich absteigende Kette<br />
gibt. Beispiel e<strong>in</strong>er Noetherschen aber nicht endlich fun<strong>die</strong>rten partiellen Ordnung:<br />
Auf den natürlichen Zahlen stehe jede gerade Zahl <strong>zu</strong> allen ungeraden Zahlen <strong>in</strong> Relation,<br />
und sonst stehe nur jede Zahl <strong>zu</strong> sich selbst <strong>in</strong> Relation.<br />
b) Sei P 1 = (E 1 ,< 1 ,α 1 ) der Prozess<br />
und P 2 = (E 2 ,< 2 ,α 2 ) der Prozess<br />
({e 1 ,e 2 },{(e 1 ,e 1 ),(e 2 ,e 2 )},{e 1 ↦→ a 1 ,e 2 ↦→ a 2 })<br />
({e 1 ,e 2 },{(e 1 ,e 1 ),(e 2 ,e 2 )},{e 1 ↦→ a 2 ,e 2 ↦→ a 1 })<br />
(1) P 1 ist ke<strong>in</strong> Teilprozess von P 2 ,<br />
(2) P 1 ist ke<strong>in</strong>e Sequentialisierung von P 2 ,<br />
(3) P 1 ist aber isomorph <strong>zu</strong> P 2 .
– 4 –<br />
Begründung <strong>zu</strong> (1) und (2): Die Abbildungen α 1 |E 2 und α 2 s<strong>in</strong>d verschieden.<br />
Begründung <strong>zu</strong> (3): Die Abbildung ϕ : E 1 → E 2 , <strong>die</strong> <strong>die</strong> beiden Elemente vertauscht, ist<br />
surjektiv. Die Kausalitätsrelation bleibt erhalten, d.h.<br />
e i < 1 e k gilt genau dann, wenn ϕ(e i ) < 2 ϕ(e k ) für i = 1,2 und k = 1,2<br />
und für <strong>die</strong> Aktions<strong>zu</strong>ordnungen gilt<br />
α 1 (e i ) = α 2 (ϕ(e i )) für i = 1,2.<br />
Aufgabe 18 Bank-Konto <strong>in</strong> Java (Lösungsvorschlag)<br />
a) Account.java<br />
p u b l i c c l a s s Account {<br />
i n t money ;<br />
Account ( i n t money ) {<br />
t h i s . money = money ;<br />
}<br />
p u b l i c synchronized void d e p o s i t ( i n t money ) {<br />
t h i s . money += money ;<br />
System . o u t . p r i n t l n ( money + " \ t d e p o s i t e d \ t \ t \ t \ t " + t h i s .<br />
money + " \ t r e m a i n i n g " ) ;<br />
n o t i f y A l l ( ) ;<br />
}<br />
p u b l i c synchronized void withdraw ( i n t money ) {<br />
while ( t h i s . money < money ) {<br />
t r y {<br />
w a i t ( ) ;<br />
} catch ( I n t e r r u p t e d E x c e p t i o n e ) {<br />
break ;<br />
}<br />
}<br />
}<br />
}<br />
t h i s . money −= money ;<br />
System . o u t . p r i n t l n ( " \ t \ t \ t " + money + " \ t w i t h d r a w n \ t " +<br />
t h i s . money + " \ t r e m a i n i n g " ) ;<br />
n o t i f y A l l ( ) ;<br />
b) Depositer.java<br />
p u b l i c c l a s s D e p o s i t e r extends Thread {<br />
p r i v a t e Account a c c o u n t ;<br />
p r i v a t e i n t money ;<br />
D e p o s i t e r ( Account account , i n t money ) {<br />
t h i s . a c c o u n t = a c c o u n t ;
– 5 –<br />
}<br />
t h i s . money = money ;<br />
p u b l i c void run ( ) {<br />
while ( true ) {<br />
t h i s . a c c o u n t . d e p o s i t ( t h i s . money ) ;<br />
}<br />
}<br />
}<br />
t r y {<br />
s l e e p ( ( i n t ) ( Math . random ( ) ∗ 1000) ) ;<br />
} catch ( I n t e r r u p t e d E x c e p t i o n e ) {<br />
break ;<br />
}<br />
c) Withdrawer.java<br />
p u b l i c c l a s s Withdrawer extends Thread {<br />
p r i v a t e Account a c c o u n t ;<br />
p r i v a t e i n t money ;<br />
Withdrawer ( Account account , i n t money ) {<br />
t h i s . a c c o u n t = a c c o u n t ;<br />
t h i s . money = money ;<br />
}<br />
p u b l i c void run ( ) {<br />
while ( true ) {<br />
t h i s . a c c o u n t . withdraw ( t h i s . money ) ;<br />
}<br />
}<br />
}<br />
t r y {<br />
s l e e p ( ( i n t ) ( Math . random ( ) ∗ 1000) ) ;<br />
} catch ( I n t e r r u p t e d E x c e p t i o n e ) {<br />
break ;<br />
}<br />
d) BankAccount.java<br />
p u b l i c c l a s s BankAccount {<br />
p u b l i c s t a t i c void ma<strong>in</strong> ( S t r i n g [ ] a r g s ) {<br />
Account a c c o u n t = new Account ( 0 ) ;<br />
D e p o s i t e r d e p o s i t e r = new D e p o s i t e r ( account , 40) ;<br />
D e p o s i t e r d e p o s i t e r 2 = new D e p o s i t e r ( account , 10) ;<br />
Withdrawer w i t h d r a w e r = new Withdrawer ( account , 50) ;<br />
Withdrawer w i t h d r a w e r 2 = new Withdrawer ( account , 70) ;<br />
d e p o s i t e r . s t a r t ( ) ;<br />
d e p o s i t e r 2 . s t a r t ( ) ;<br />
w i t h d r a w e r . s t a r t ( ) ;
– 6 –<br />
}<br />
}<br />
w i t h d r a w e r 2 . s t a r t ( ) ;