20.11.2013 Aufrufe

Ü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 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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 ( ) ;

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!