Fallunterscheidung und Iteration Programmierung I Prof. Dr. Michael Löwe
Fachhochschule für die Wirtschaft Fallunterscheidung und Iteration2 Inhalt Fallunterscheidung Bedingte Anweisung Boole‘sche Fallunterscheidung Mehrfache Fallunterscheidung (Selektion) Iteration Der semantische Iterator Anweisungen zur Iteration
Fachhochschule für die Wirtschaft Fallunterscheidung und Iteration3 Bedingte Anweisung W Wenn b ein boole‘scher Ausdruck ist, b E W, und a Anweisung, a ST, dann ist If b Then a End If ST. Die Bedeutung ist gegeben durch: [|If b Then a End If |](z, t) = (1) [|a|](z, t), wenn value[(z, t)](b) = T (2) (z, t) sonst
Fachhochschule für die Wirtschaft Fallunterscheidung und Iteration4 Boole‘sche Fallunterscheidung W Wenn b E W und a1, a2 ST, dann ist If b Then a1 Else a2 End IF ST. [|If b Then a1 Else a2 End If |](z, t) = (1) [|a1|](z, t), wenn value[(z, t)](b) = T (2) [|a2|](z, t) sonst
Fachhochschule für die Wirtschaft Fallunterscheidung und Iteration5 Mehrfache Fallunterscheidung Else Parts: (1) Der leere Ausdruck ist ein „Else Part“, EP (2) Wenn a ST, dann ist Else a ein „Else Part“, i.e. Else a EP W (3) Wenn b E W, a ST und e EP dann ist Elseif b Then a; e ein „Else Part“, i.e. Elseif b Then a; e EP
Fachhochschule für die Wirtschaft Fallunterscheidung und Iteration6 Allgemeine Fallunterscheidung W Wenn b E W, a ST und ep EP, dann ist If b Then a ep End If ST [|If b Then a ep End If |](z, t) = [|a|](z, t), wenn value[(z, t)](b) = T, [|ep|](z, t) sonst [| |] (z, t) = (z, t) [|Else a |](z, t) = [|a|](z, t) [|Elseif b Then a ep|](z, t) = [|a|](z, t), wenn value[(z, t)](b) = T, [|ep|](z, t) sonst
Fachhochschule für die Wirtschaft Fallunterscheidung und Iteration7 Iteration (intuitiv) For i = anfang To ende Step differenz Anweisungen Next i Intuitiv: (1) Setze i auf anfang; (2) falls i ende noch nicht erreicht hat, führe Anweisungen aus, sonst verlasse die Iteration bei (4) (3) addiere differenz zu i, fahre mit (2) fort. (4) Ende der Iteration
Fachhochschule für die Wirtschaft Fallunterscheidung und Iteration8 Der semantische Iterator Erste Version: Sei f: TypedStates TypedStates Abbildung, dann ist f n : TypedStates TypedStates für alle natürlichen Zahlen n so definiert: (1) f 0 (s) = s (2) f n + 1 (s) = f n (f(s))
Fachhochschule für die Wirtschaft Fallunterscheidung und Iteration9 Der semantische Iterator Zweite Version Z Sei f: TypedStates TypedStates Abbildung, i Names und w Z* eine Liste von ganzen Zahlen, dann ist f (i, w) : TypedStates TypedStates so definiert: (1) f (i, ) (s) = s (2) f (i, xv) (z, t) = f (i, v) (f(set(z, i, x), t)) falls t(i) = Integer (3) f (i, w) (s) = undefiniert sonst
Fachhochschule für die Wirtschaft Fallunterscheidung und Iteration10 Iteration Z Wenn i Names, e1, e2, e3 E Z, dann ist i = e1 To e2 Step e3 ein Iterationskopf, i. e. i = e1 To e2 Step e3 IK Wenn k IK und a ST, dann ist: For k a Next ST (Iteration)
Fachhochschule für die Wirtschaft Fallunterscheidung und Iteration11 Semantik der Iteration Für alle Iterationsköpfe k definieren wir Z [|k|]: TypedStates Names Z* so: [|i = e1 To e2 Step e3|] (s) = (i, w), wobei w durch die folgenden Bedingungen eindeutig charakterisiert ist: ZZ Für z 1, z 2 Z und u, w, x Z* w = uz 1 x impliziert: z 1 value[s](e2) falls value[s](e3) > 0 w = uz 1 x impliziert: z 1 value[s](e2) falls value[s](e3) < 0 w = z 1 u impliziert: z 1 = value[s](e1) w = uz 1 z 2 x impliziert: z 2 = z 1 + value[s](e3) [|For i = e1 To e2 Step e3 a Next|](s) = [|a|] [|i = e1 To e2 Step e3|](s) (s)