Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Allgemeine Iteration und Rekursion
Programmierung I Prof. Dr. Michael Löwe
2
Allgemeine Iteration und Rekursion
Inhalt Iteration Der semantische Iterator Die Verallgemeinerung auf beliebige Typen Anweisungen zur Iteration über Listen ganzer Zahlen Fiktive Anweisung zur Iteration über Zeichenkettenlisten Rekursion FHDW Allgemeine Iteration und Rekursion
3
Allgemeine Iteration und Rekursion
„Zustand sei r:“ i = 1; a = a + i; b = b - i i = 2; a = a + i; b = b - i i = 3; a = a + i; b = b - i i = 4; a = a + i; b = b - i (.....) i = 10; a = a + i; b = b - i „:Zustand sei s“ „Zustand sei r:“ For i = 1 To 10 a = a + i; b = b - i Next i „:Zustand sei s“ s = [|a = a + i; b = b - i|][| i = 1 To 10|](r)(r) s = [|a = a + i; b = b - i|](i, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])(r) FHDW Allgemeine Iteration und Rekursion
4
Der semantische Iterator
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 FHDW Allgemeine Iteration und Rekursion
5
Der allgemeine Iterator
Sei f: TypedStates TypedStates Abbildung, i Names und w T* eine Liste von Elementen zu einem beliebigen Typ T, dann ist f (i, w): TypedStates TypedStates definiert: (1) f (i, )(s) = s (2) f (i, xv)(z, t) = f (i,v)(f(set(z, i, x),t)) falls domain(t(i)) = T (3) f (i, w)(s) = undefiniert sonst FHDW Allgemeine Iteration und Rekursion
6
Allgemeine Iteration und Rekursion
Iteration über Zahlen Wenn i Names, e1, e2, e3 EZ, 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) FHDW Allgemeine Iteration und Rekursion
7
Semantik der Iteration über Zahlen
Für alle Iterationsköpfe k definieren wir [|k|]: TypedStates Names Z* so: [|i = e1 To e2 Step e3|] (s) = (i, w), wobei w durch die folgenden Bedingungen eindeutig charakterisiert ist: Für z1, z2 Z und u, w, x Z* w = uz1x impliziert: z1 value[s](e2) falls value[s](e3) > 0 w = uz1x impliziert: z1 value[s](e2) falls value[s](e3) < 0 w = z1u impliziert: z1 = value[s](e1) w = uz1z2x impliziert: z2 = z1 + value[s](e3) [|For k a Next|](s) = [|a|] [|k|](s)(s) FHDW Allgemeine Iteration und Rekursion
8
Iteration über Zeichenketten
Listen von Zeichenketten ES*: | ES* Wenn v ES und w ES* dann ist v|w ES* Wenn i Names, sl ES*, dann ist i In sl ein Iterationskopf, i. e. i In sl IK Wenn k IK und a ST, dann ist: For k a Next ST (Iteration) FHDW Allgemeine Iteration und Rekursion
9
Semantik der Iteration über Zeichenketten
Für alle neuen Iterationsköpfe k definieren wir [|k|]: TypedStates Names S* so: [|i In w1|w2| ....|wn||] (s) = (i, value[s](w1).... value[s](wn)) [|For k a Next|](s) = [|a|] [| k |](s)(s) Anwendungsbeispiele??? FHDW Allgemeine Iteration und Rekursion
10
Allgemeine Iteration und Rekursion
Wenn b ein boole‘scher Ausdruck ist, b EW, und a Anweisung, a ST, dann ist Do While b a Loop ST. Die operationale Bedeutung ist gegeben durch: [| Do While b a Loop |](s) = (1) s , wenn value[s](b) = F (2) [|Do While b a Loop|]([|a|](s)) sonst FHDW Allgemeine Iteration und Rekursion
11
Allgemeine Iteration und Rekursion
Wenn b ein boole‘scher Ausdruck ist, b EW, und a Anweisung, a ST, dann ist Do Until b a Loop ST. Die operationale Bedeutung ist gegeben durch: [| Do Until b a Loop |](s) = (1) s , wenn value[s](b) = T (2) [|Do Until b a Loop|]([|a|](s)) sonst FHDW Allgemeine Iteration und Rekursion
12
Allgemeine Iteration und Rekursion
Wenn b ein boole‘scher Ausdruck ist, b EW, und a Anweisung, a ST, dann ist Do a Loop While b ST. Die operationale Bedeutung ist gegeben durch: [| Do a Loop While b |](s) = (1) [|a|](s) , wenn value[[|a|](s)](b) = F (2) [|Do a Loop While b |]([|a|](s)) sonst FHDW Allgemeine Iteration und Rekursion
13
Allgemeine Iteration und Rekursion
Wenn b ein boole‘scher Ausdruck ist, b EW, und a Anweisung, a ST, dann ist Do a Loop Until b ST. Die operationale Bedeutung ist gegeben durch: [| Do a Loop Until b |](s) = (1) [|a|](s) , wenn value[[|a|](s)](b) = T (2) [|Do a Loop Until b |]([|a|](s)) sonst FHDW Allgemeine Iteration und Rekursion
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.