Grundlagen der Programmierung (Vorlesung 11)
z Vorige Vorlesung
y Prädikatenlogik mit Axiomen z.B. für natürliche Zahlen y Elemente von Programmiersprachen (Variablen, Felder) y Spezifikationen
z Inhalt dieser Vorlesung
y Verifikation von Algorithmen
y Zuweisungen und Kontrollstrukturen
z Lernziele
y Grundlagen der systematischen Programmentwicklung
Ralf Möller, FH-Wedel
u ï>ûð°'y üû
~ñ
~3ò-ó
þaôð°'y
ñ û
~ñ
~ û ~
ý$õö÷HySø
~
ù ú û$ü ýÞþlÿ û ý
ýü ýþ
û ý
û
ýÞþý
! #"#$%'&)(*+(
,%-/.0-@å1,32
45 Ì 6
798':9;
6 @ k
i G Ð B
J3K
B J Í
798':<;
DB-
=i Ð9
K B J Ì Õ
798>:9;
? m VA@
i G Ð B
J3K
B J Í
45
Û¼®¬«@¬Å¯®i° Ãb´ªB ©b¸iª ´°P³#´°º¸Ù
Ö ÊÒªÝMË Ù«ª+´°º¸±:öÚ®iÝM´ÂA©b°3¬«@¬¯®i° Ø ±2¯«ª+´Â ©b¯°
Ü_ª+®i¸iª«ÂAÂ Ö R33¬ ´PÍÝÙ Ø Ýi®iªª+©Rݬɫª+Ä>©R¬©g¬
ÌÛá'áIáXÍ ¯»+¬©b¯° ºK®iÂAÂA©b°3¬«ªR±
ÎP«@¬NÄ>©be³Û©RªÜ_ª+®i¸iª «ÂA«´º»Åµ ´Îºª+´°º¸Ýi©b¯°©b°Ù Ê¢©Rݬ
©b°3¬Î ٫ˬN©b¯° ÜÒª Ù«i³#¯Ý«@¬ Ö B ©'³#¯°¸i´º°¸±.P}´º»é³Ûª+´½ÍÅÝ:±P³#©bª
Ãb´
Ï
Ð)Ñ®³#©bª ªrÒÔÓaÑÌ«´º»¸i© ¯U©Rª¬Å©r¬_¯U©Rª³#©b° Ý«°º°
Ø
6 C 2Yï Õ »¯°P³ Ü_ª'Ù«i³#¯Ý«@¬©
¯»+¬©b¯°GÜ_ª+®i¸iª «ÂAÂ
D C
æE-/.F2YïYægÀ
íGæl«0¬IHJG#åí C 2 ì
³LKM>´»+¬ON°P³PKb¯°%Kb»ÜQM®i¸RMSNÂAÂA»
Ö
B)KbËTKb¸i´°¸A³UKVM
ó)NWM+XNÄËTKb° Ø ÝYN°°GÂA¬U» ®iËÏÍÅÎ%Kb°GÜZM'ÙNi³#¯ÝYN@¬9Kb°
Ä[Kb»éÍÅÎ%M+TKbÄ[KR°¯KVM ³LKR°
6 »9\[KRÃb¹PÃbTKVM']ê³LKR° ö^Kr¹/°_]¯®i°º» Ä[KVM`KRÏÍÅÎ ³UKVMÃR´
Ä[KVM`K ÍÅΰaKR°P³UKb° P´°ºÝb]¯®i°
Õ »9\[KRÃb¹PÃbTKVM']ê³ÛTKÉÃb´ Ä3KVM`K'ÍΰaKR°P³UK:P´°ºÝb]¯®i°
45 6 ´º°½³ Õ ¯KVM ³UKb° >´»ÏÍÎaKM+´º°¸RKb° c! ` *ed"3`f
u ï>ûð°'y üû
~ñ
~3ò-ó
þaôð°'y
ñ û
~ñ
~ û ~
ý$õö÷HySø
~
ù ú û$ü ýÞþlÿ û ý
ýü ýþ
û ý
û
ýÞþý
! #"#$%'&)(*+(
,%-/.0-@å1,32
45 Ì 6
798':9;
6 @ k
i G Ð B
J3K
B J Í
798':<;
DB-
=i Ð9
K B J Ì Õ
798>:9;
? m VA@
i G Ð B
J3K
B J Í
45
Û¼®¬«@¬Å¯®i° Ãb´ªB ©b¸iª ´°P³#´°º¸Ù
Ö ÊÒªÝMË Ù«ª+´°º¸±:öÚ®iÝM´ÂA©b°3¬«@¬¯®i° Ø ±2¯«ª+´Â ©b¯°
Ü_ª+®i¸iª«ÂAÂ Ö R33¬ ´PÍÝÙ Ø Ýi®iªª+©Rݬɫª+Ä>©R¬©g¬
ÌÛá'áIáXÍ ¯»+¬©b¯° ºK®iÂAÂA©b°3¬«ªR±
ÎP«@¬NÄ>©be³Û©RªÜ_ª+®i¸iª «ÂA«´º»Åµ ´Îºª+´°º¸Ýi©b¯°©b°Ù Ê¢©Rݬ
©b°3¬Î ٫ˬN©b¯° ÜÒª Ù«i³#¯Ý«@¬ Ö B ©'³#¯°¸i´º°¸±.P}´º»é³Ûª+´½ÍÅÝ:±P³#©bª
Ãb´
Ï
Ð)Ñ®³#©bª ªrÒÔÓaÑÌ«´º»¸i© ¯U©Rª¬Å©r¬_¯U©Rª³#©b° Ý«°º°
Ø
6 C 2Yï Õ »¯°P³ Ü_ª'Ù«i³#¯Ý«@¬©
¯»+¬©b¯°GÜ_ª+®i¸iª «ÂAÂ
D C
æE-/.F2YïYægÀ
íGæl«0¬IHJG#åí C 2 ì
³LKM>´»+¬ON°P³PKb¯°%Kb»ÜQM®i¸RMSNÂAÂA»
Ö
B)KbËTKb¸i´°¸A³UKVM
ó)NWM+XNÄËTKb° Ø ÝYN°°GÂA¬U» ®iËÏÍÅÎ%Kb°GÜZM'ÙNi³#¯ÝYN@¬9Kb°
Ä[Kb»éÍÅÎ%M+TKbÄ[KR°¯KVM ³LKR°
6 »9\[KRÃb¹PÃbTKVM']ê³LKR° ö^Kr¹/°_]¯®i°º» Ä[KVM`KRÏÍÅÎ ³UKVMÃR´
Ä[KVM`K ÍÅΰaKR°P³UKb° P´°ºÝb]¯®i°
Õ »9\[KRÃb¹PÃbTKVM']ê³ÛTKÉÃb´ Ä3KVM`K'ÍΰaKR°P³UK:P´°ºÝb]¯®i°
45 6 ´º°½³ Õ ¯KVM ³UKb° >´»ÏÍÎaKM+´º°¸RKb° c! ` *ed"3`f
u ï>ûð°'y üû
~ñ
~3ò-ó
þaôð°'y
ñ û
~ñ
~ û ~
ý$õö÷H'ytø
~
hGåæîå1G¿1G ÜZM`ii¸RM9NÂAÂA»S\[KbÃj¹/ÝkNl]<jTiRg
Gåm2 <nHl,
ì
Hl. 6 6 »9ii˯ˢÈlÈlÈ
·^¸.¹
È)ÈlÈ)KjTgaKÉóoNWM`jXNÄËTK I NWp0qrUKVgGõ KVM']
ø
à»9KE]ÃKVgts
Kb»N»9ii˯Ëuj¯ÂAÂvKMq1p%gÝw]9jTiRg%jTKVM`KVg
·a½
. ¹
È)ÈlÈrUjTKÇxpºÂAÂyKDÃe¯KVjTKVM¼uNÎËTKVg I p%gzr|{yjTgPKjTgaKM
ó)NWM`jXNÄËTKVg 9 »9\[KjÏÍÅÎ%KVM`g
·a½
í ¹
È)ÈlÈr%N»} Nloaj¯Â~p Ãe¯KVjTKMuNÎËTKVg I p%gFr|{yjTg
KVjTg%KVMóoNWM`jXNÄËTKVg
k
»9\[KjÏÍÅÎ%KVM`g
·'¿+¹
È)ÈlÈrUjTKÉõ KM']<Kà ¯KjTKVMó)NWM`jXNÄËTKVg wKVM']ONWp»ÍÅÎ%KVg
·\ÁE¹
È)ÈlÈ à~gFNl]Ùp%M+ËTjÏÍÅÎ%KÇuNÎËTKVg
I
p%gzrP{A¸bNWgºÃRÃANÎËTj¯¸Âyj_]
ÂKR»`]]9Kj¯ËTKVgPpagFrjTg rLKgGóoNWMjXNÄËTKVgPp%gzr
k
ÂKR»9pË_]Nl]pagFrÂKb»`]»9\3KVjÏÍÎaKM`g
·aÃW¹
È)ÈlÈrUjTK$È3B gFNl]ÙpaM+ËTjÏÍÎaKg uNÎËTKVg Ö B Ø jTgPKVjTg%KVM
ó)NWM`jXNÄËTKVg 9 NWpUqe9pÂAÂyjTKVM`KVg
·'Ä+¹
È)ÈlÈZq paMKjTgaKgzNl]Ù p%M+ËTjÏÍÅÎ%KÇuNÎË°BÙ rLKg RM iiÇY]9KVgÙ
±KVj¯ËTKVM
k B Ä[K`]9j¯ÂAÂyKVg
x0z e~ ~
,zHlHlG2>u-¬IGå- wiRg ÜZM`iRRMSNÂAÂyKVg
HJG#¿e.U-å ÃVp KjTgaKMx\[KbÃj_/ÝkNl]<jTiRg
45
KVjTgGÜZM`iRRMSNÂAÂ ÖH© `] pPÍÝÙ Ø jT`]ÝRiRM`MKRÝb]/s
·^¸.¹
¯Kgag KjTgPKVjTg%Kb Pg0qmNWg%RÃpa`]ONWgFr|RKV<]NWM']9KE]
¯jTMSrs%jTg rUKb rUjTK}óZiRM+Ä[KrLjTg%Rp%ga 6 Rj¯Ë_]As
r#ÈtÎ rUjTK}óoNWM`jXNĺËTKgMÄ[KbËTKRpag%RKbÎ iRM>]NÃVpÂÙ
ö^Kg%j_]9jTiRgaÄ3KVM`KVjÏÍÎts
·a½W¹
¯Kgag K]9KVM+ÂyjTg%jTKVM']
·'¿+¹
¯Kgag j¯Â ÊZgFrÛÃpa`]ONWgFr rUjTK8ÛNiÍÎMÄ[KrLjTg%Rpag% Õ Rj¯Ë_]
·^¸U¿+¹
\zNWM']9jTKb˯ËTK|ºiRM`MKRÝb]ÅÎ%KVj_]
45
óiRM+Ä3KArUjTgaRp%gar%NWM>q wKM``]
ÙNWMÝb]_¯KVMSrLKg
45
ö^Kg%j_]9jTiRga Ä[KVM`KjÏÍÅίjTMSrKVjTg%RKVéÍÅÎ%M ÙNWgºÝb]
45
ÛNiÍÅÎMÄ3KArUjTgaRp%gar%NWM>qNÄ%RKVéÍÅί ÙNiÍÎb]_¯KM9rUKVg
45
! `e ^"3¨,.^`8/.^`l%&(" *4
hGxhGåæVHlG
ì
G0 w] ÙNWM+Ýxpag%yKVjTg%KVMóZiRM`[KrLjTg%Rpag%pagFr
#Íί NiÍÎ p%g%vKjTgaKM_ÛNiÍÎx[KArUjTg%Rpag%Ù
÷ .Fmæ
·^¸.¹
6 Y 6Þ
·a½W¹
ÌR6 Þ Í ÌÕ Þ Í
·'¿+¹
ÕÞY Õ
ïI.F22 åm- ÌR6 Í ÌÕ£Í
gültig
gültig korrekt
korrekt
~ñ ~3ò-ó ñ ~ñ ~ ~ ~
ð,zH
ì
G;¬IG02 ÜZM`iRRM9NW¡y¡yKgb]\¯p%M>q
·^¸.¹
ÜZM`iRºËTK¡ S\[KV¢j_¢jTKVM`KVg
·^¸
. ¹ } j_]ܯKRËÏÍÅÎ%KVgóoNWM`jXNWºËTKg|Sii˯ËRKANWM`[Kj_]9KE]¯KVMSrUKVg
Y öKbÝMËXNWMSNl]<jTiRg%KVg
·^¸
í ¹ õ NW9ii˯Ëu[KMK ÍÅÎ%g%KE]_¯KMSrLKg Y Õ
·^¸
« ¹ õ NWg%g 9ii˯ËtraNWNÜZM`iRRMSNW¡y¡ qepagÝb]9jTiRgajTKMKg Y 6
·a½W¹
ÎajTKM9NWp%KVjTgGÜZM`iRRMSNW¡y¡ ÝRiRg%`]9M`pajTKMKg
ð.%Hå1.í£1G02 ö^jTKjTg rLKMx\[KV¢j_/ÝkNl]<jTiRg pagFrjT¡ ÜQMiRRMSNW¡y¡
[KVgxp0]9¢E]9KVg óoNWMjXNWËTKVgPp%gzr rLKMKg ±²L\
Ö õ KVM']9KV3KVM`KVjÏÍÎ
Ø
¯KM9rUKVg ¡yj_]¤j¯Ë_qeK wiRg
ö^KRÝjËXNWMSNl]9jTiRg%KVgPqeKV`]9RKbËTKY]lÈ
P}˯ËTK p%%MjTRKgÙ ÛNW¡yKVg¥9jTgzrºiRg%`]ONWgb]<Kg
45 ¦
I Wfg
45 ¦
[§
45 ¦
³e
á¯á
B[de C fg
~ñ ~3ò-ó ñ ~ñ ~ ~ ~
ð,zH
ì
G;¬IG02 ÜZM`iRRM9NW¡y¡yKgb]\¯p%M>q
·^¸.¹
ÜZM`iRºËTK¡ S\[KV¢j_¢jTKVM`KVg
·^¸
. ¹ } j_]ܯKRËÏÍÅÎ%KVgóoNWM`jXNWºËTKg|Sii˯ËRKANWM`[Kj_]9KE]¯KVMSrUKVg
Y öKbÝMËXNWMSNl]<jTiRg%KVg
·^¸
í ¹ õ NW9ii˯Ëu[KMK ÍÅÎ%g%KE]_¯KMSrLKg Y Õ
·^¸
« ¹ õ NWg%g 9ii˯ËtraNWNÜZM`iRRMSNW¡y¡ qepagÝb]9jTiRgajTKMKg Y 6
·a½W¹
ÎajTKM9NWp%KVjTgGÜZM`iRRMSNW¡y¡ ÝRiRg%`]9M`pajTKMKg
ð.%Hå1.í£1G02 ö^jTKjTg rLKMx\[KV¢j_/ÝkNl]<jTiRg pagFrjT¡ ÜQMiRRMSNW¡y¡
[KVgxp0]9¢E]9KVg óoNWMjXNWËTKVgPp%gzr rLKMKg ±²L\
Ö õ KVM']9KV3KVM`KVjÏÍÎ
Ø
¯KM9rUKVg ¡yj_]¤j¯Ë_qeK wiRg
ö^KRÝjËXNWMSNl]9jTiRg%KVgPqeKV`]9RKbËTKY]lÈ
P}˯ËTK p%%MjTRKgÙ ÛNW¡yKVg¥9jTgzrºiRg%`]ONWgb]<Kg
45 ¦
I Wfg
45 ¦
[§
45 ¦
³e
á¯á
B[de C fg
~ñ ~3ò-ó ñ ~ñ ~ ~ ~
® ¯ ()° >±a²(*³Z+(´~«µ()$"·¶ ²(¸ ^+¹ "Z()$>
Áº½uº¸
D C
hG0»m¼
C
2I½zG02
D C GU»¾¼ C 2I½ [KV<]<K¿aKg NWp%KjTgaKMóoNWMjXNW%ÀTKVgPp%gzrPKVjTg%KV¡
PpaÁrLM`pFÂ<Ã
6
m2kYijm
F i
Å D K 9 G
kCK
VAÆ I Å
Å
Ï
³ÐlÑ
D C
¼E-/.F2Ç ÈZM`iRRM9NW¡y¡y¢pa<]NWgFruÉ
B)KVÀTKVRp%g%yrUKVM«ÈZM`iRRM9NW¡y¡ËÊRNWM`jXNWaÀTKgy¡yj_]KjTgaK¡
Ì KVM']¢Vp KVjTg%KV¡ 3KV`]9jT¡y¡]9KgPÍ[KVj_]9\%pag%Ãb]rUKVM
ÈZM`iRRM9NW¡y¡¥NWp%`qÎpa¿%M`pag%
ÏhG0ÇIG C - C 2I½ Ð K¡¥NWgw]9jTÃ
ÑTÒ%ÓmdlÔ`ÕPÖO×T× rLKMØÙUÚÛWÜEÙzÝÞ«ßjTM9rPNWp%9RKEßKVM']9KE]p%gzrPrUKVM
àzáYÜEâãáwäVåTæOç~¢Vp%RKEßjTK9KVgts
raNWgFNRÂ<¿ 9\[KjXÂ<¿%KVM']rUjTK*è)NWM`jXNW%ÀTKnrUKVg [KVM`KÂ<¿%gaK]9KVg
Ì KVM']
45
Í[pa<]NWgFrU`]9M9NWg%`qeiRM¡¥Nl]9jTiRgts
Í[pa<]NWgFrU NWgzrUKVM`p%gaÎ
ÏhG0ÇIG C - C
2I½ Ð K¡¥NWgw]9jTÃ
Ó¾dlÔ`ÕPúl× rLp%MSÂ<¿ KjTgaKûKRKVÀãs%rLjTKn3KVOÂ9¿%MKjTU]AsUßjTKnNWp%KjTgaKM
üNRÂ<¿x3KArUjTgaRp%gaýpagFrKVjTg%KVMÍ[pbßKVjT9p%gaRÁNWgwßKVjTSpag%
rLjTKþeOÂ<¿bßÎNRÂ<¿%`]9KlÿoèZiRM`[KArUjTg%Rpag%v3KVM`KAÂ9¿%gaK]
ßKM9rUKVg ÃYNWgag
l» 9KjKVjTgp%Or`pzÂ9Ã3sajTg r¡ ÊwiÃRiR¡y¡/s
` ÀVT "!%#$!FÂ9Ã
&%')(
+*
T,+-"!%#,!zÂ9Ã ./ ¡ 0WÀTÀ*è21`Ã1R¡y¡3Ê41
!/SÂ9¿ ,569¢6«ß718 589
þ!|¡ 1:RÀXÂ<¿'ß 5;!SÂ<¿Î ¢!/5JÎ0<<¢ÀXÂ<¿
=À>0W¡y¡3,)-5,?@#0WÃ@A5ÁÂ<¿BC!De90E!PÊ41
`¿90WÀF aÀTEÿ#G
ÏIHxIH0»m¼J<Hx½9H0 DÎ!Í !wß 58!/:
K
&%'( L*NM ÉÅ K M
",:!a¡34#0<1PÀÎ0E!D>OYÎ!FÂ<Ãbß Î0EP5
È2AÎ0TÃQ0<RÎ!/PDS T:RÀXÂ<¿bß P:
DU0RÂ9¿/$È2AÎ0TÃV0<AW!%¡3:6DS1`¡X)ß 8
Beispiele: Zuweisung x := A
❚ Beispiel 1
❙ P: (x * x) > 0
❙ A: y + 1
❙ V = P[x ← A]: (y+1)*(y+1)>0 (korrekt unter dieser Vorbedingung)
❚ Beispiel 2
❙ P: x = 42
❙ A: 42
❙ V = P[x ← A]: 42=42 (tautologisch, korrekt ohne bes. Vorbed.)
❚ Beispiel 3
❙ P: x = 42
❙ A: 43
❙ V = P[x ← A]: 43=42 (unerfüllbar, nie korrekt)
Wann arbeitet das folgende Programm korrekt?
❚ var x : Z, f: array[0..n-1] of Z, i: N 0
❚ { 42 = 42 } x := 42 { x = 42 } immer
❚ { 42 = 43 } x := 43 { x = 42 } nie
❚ { x + 1 > 0 } x := x + 1 { x > 0 }
❙ wenn x vor der Zuweisung größer oder gleich 0 ist
❚ { y * y = 16 } x := y * y { x = 16 }
❙ wenn y vor der Zuweisung gleich 4 oder -4 ist
iCJ<jIH0»klHmJVnoI½ p3V¿^Dq0RÂ<¿Í!bß 5!/:
rstu v6wlxlxlxyw zÉÅ
v{wxlxlx6w z
l»
&%'v|( v#wlxlxlx6w zB( z *
5,+-"!5#,!zÂ9Ã ./ p 0WÀTÀ*è21`Ã1p3p3Ê41
}~!/SÂ9¿ } þS:RÀXÂ<¿FA:xÿ,5Aß7185
rH l»
ÏIHjIH0»m¼J<Hx½9H DÎ!Op3¿/PDq0RÂ<¿hÍ !wß 58!/:
K
&%'v( v#wlxlxlx6w zB( z *NM
v wlxxlx6w z ÉÅ v wlxlxlx6w z K M
DÎ!ÐFzÃQ0<1P¿IÎ0E!:b5¿/#Î!VÀXÂ9¿