Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von...

28
Lehrstuhl für Software- Technologie Prof. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming, Springer- Verlag) Mathias Kadolsky Proseminar für Programmiermethodik

Transcript of Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von...

Page 1: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern

und

Felder von Feldern

(Literaturquelle: David Gries, The Science of Programming, Springer- Verlag)

Mathias Kadolsky

Proseminar für Programmiermethodik

Page 2: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Definition von Feldbereichen:

var b: array[0:n-1] of integer

b[0:n-1] kennzeichnet ganzes Feld

b[i:j] für 0≤i ≤ j<n kennzeichnet das Feld bestehend aus b[i], b[i+1],....,b[j] für i>j bezieht sich b[i:j] auf einen leeren Bereich

Bereiche von Feldern - Felder von Feldern 1 / 27

Page 3: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Formalisierung von logischen Aussagen:

Bereiche von Feldern - Felder von Feldern

„Alle Elemente von b sind kleiner als x“

(Ai:0≤i<n:b[i]<x)

„Feld b enthält nur Nullen“

(Ai:0 ≤ i<n:b[i]=0)

var b: array[0:n-1] of integer

Verkürzte Schreibweise:

b<x

=(b[0]<x)... (b[n-1]<x)

b=0

=(b[0]=0)... (b[n-1]=0)

2 / 27

Page 4: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

var b: array[0:n-1] of integer

Kurzschreibweise Langschreibweise

b[1:5]=x (Ai:1i5:b[i]=x)

b[6:10]x (Aj:6j10:b[j] x)

b[0:k-1]<x< b[k:n-1]

≡(b[0:k-1]<x)( b[k:n-1]>x)

(Ai:0i<k:b[i]<x)(Ai:ki<n:x< b[i])

Bereiche von Feldern - Felder von Feldern

Von der verkürzten Schreibweise zur Langschreibweise:

3 / 27

Page 5: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

(Ap,q:ipjqk :b[p] b[q])(Ap,q:ipjqk :b[p] )(Ap :ipj :b[p] )

var b: array[0:n-1] of integer

Kurzschreibweise Langschreibweise

b[i:j] b[j:k]

b

0 i-1 i j-1 j j+1 k k+1 n-1

Bereiche von Feldern - Felder von Feldern

Von der verkürzten Schreibweise zur Langschreibweise:

4 / 27

Page 6: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

var b: array[0:n-1] of integer

Kurzschreibweise Langschreibweise

(b[6:10]x)

= ((b[6]x)(b[7]x)... (b[10]x))

= ((b[6]x) (b[7]x) ... (b[10]x))

= ((b[6]=x) (b[7]=x) ... (b[10]=x))

(Aj:6j10:b[j] x)

=(Ej:6j10:(b[j] x))

=(Ej:6j10:b[j] =x)

Bereiche von Feldern - Felder von Feldern

Von der verkürzten Schreibweise zur Langschreibweise:

5 / 27

Page 7: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

var b: array[0:n-1] of integer

Kurzschreibweise Langschreibweise

Bisher kennengelernte Relationen: „=“, „ “, „<“, „>“, „ “, „≥“

Neue Relation: „ “

x b (Ei:i domain(b):x=b[i])

Bereiche von Feldern - Felder von Feldern

Von der verkürzten Schreibweise zur Langschreibweise:

6 / 27

Page 8: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Public boolean kleiner(int[] b,int x){int i=0;int n=b.lenght;while (i<b.lenght){

if (b[i]>=x) return false;i++;

}return true;

(Ai:0≤i<n:b[i]<x)b<x

Bereiche von Feldern - Felder von Feldern

Die Kurzschreibweise als Form von Abstraktion:

7 / 27

Page 9: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Programm:Sortieren eines Feldes b[0:n-1];Initialisierung des Feldes b mit dem Feld B[0:n-1], also b=B;

Erfüllen der folgenden drei Bedingungen:

1) b[0:k-1] ist sortiert und alle seine Elemente sind höchstens x;

2) der Wert, der zu b[k] gehört, ist x;

3) jeder Wert in b[k+1:n-1] ist mindestens x;

Beispiel:

B

0 1 2 3 4 5

3 2 5 1 4 0 b

0 1 2 3 4 5

32 51 40

für x=3b

0 1 2 3 4 5

32 51 40

k=3

k=3

Bereiche von Feldern - Felder von Feldern

Die Bild-Notation als Darstellungsform von Feldern:

8 / 27

Page 10: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Programm:Sortieren eines Feldes b[0:n-1];Initialisierung des Feldes b mit dem Feld B[0:n-1], also b=B;

Erfüllen der folgenden drei Bedingungen:

1) b[0:k-1] ist sortiert und alle seine Elemente sind höchstens x;

2) der Wert, der zu b[k] gehört, ist x;

3) jeder Wert in b[k+1:n-1] ist mindestens x;

b[0:k-1]≤x≤b[k+1:n-1]0≤k<n b[0:k-1]≤x≤b[k+1:n-1]0≤k<n b[0:k-1]≤x≤b[k+1:n-1] b[k]=x0≤k<n ordered(b[0:k-1]) perm(b,B) b[0:k-1]≤x≤b[k+1:n-1] b[k]=x

0≤k<n ordered(b[0:k-1]) perm((b;k:x),B) b[0:k-1]≤x≤b[k+1:n-1]

b[k]:=x ≡ b:=(b;k:x)

0≤k<n ordered(b[0:k-1]) b[0:k-1]≤x≤b[k+1:n-1] b[k]=x

Bereiche von Feldern - Felder von Feldern

Die Bild-Notation als Darstellungsform von Feldern:

9 / 27

Page 11: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

0≤k<n ordered(b[0:k-1]) perm((b;k:x),B) b[0:k-1]≤x≤b[k+1:n-1]

perm(x,y):= „Feld x ist Premutation von y“

ordered(b[0:k-1]):=(Ai:0≤i<k-1:b[i]≤b[i+1])

Darstellung mit Hilfe der Bild-Notation:

b

0 k-1 k k+1 n-1

ordered, ≤x ≥x perm((b;k:x),B)0≤k<n

Feldname

Eigenschaften der Feldpartition

obere und untereBereichsgrenze

Bereiche von Feldern - Felder von Feldern

Die Bild-Notation als Darstellungsform von Feldern:

10 / 27

Page 12: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

b

0 k-1 k k+1 n-1

ordered, ≤x ≥x perm((b;k:x),B)0≤k<n

Bereiche von Feldern - Felder von Feldern

Die Bild-Notation als Darstellungsform von Feldern:

Weglassen von Bereichsgrenzen bei Eindeutigkeit:

b

0 k-1 k+1 n-1

ordered, ≤x ≥x

b

0 k

ordered, ≤x ≥x

n-1

11 / 27

Page 13: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

b

0 k-1 k k+1 n-1

ordered, ≤x ≥x perm((b;k:x),B)0≤k<n

Bereiche von Feldern - Felder von Feldern

Die Bild-Notation als Darstellungsform von Feldern:

Leere Bereiche:

b

k n-1

≥x

für k=0

für k=n

b

0 k-1 n

ordered, ≤x

b[i:j] für 0≤i ≤ j<n kennzeichnet das Feld bestehend aus b[i], b[i+1],....,b[j] für i>j bezieht sich b[i:j] auf einen leeren Bereich

12 / 27

Page 14: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Zwischenfazit:

Definition von Feldbereichen

Kurzschreibweise, Langschreibweise und Bild-Notation um logische Aussagen zu Formalisieren

Relationen: „=“, „ “, „<“, „>“, „ “, „≥“, „ “

Anweisungen: domain(b), ordered(b) und perm(b,B)

13 / 27

Page 15: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Definition von Feldern von Feldern:

var b: array[0:1] of array[1:3] of integer (Pascal-Deklaration)

b[0][1] b[0][2] b[0][3]

b[1][1] b[1][2] b[1][3]

14 / 27

Page 16: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Selector-Term:

N={Bezeichner, selector} Menge der Nichtterminale

T={, є, b, [a]} Menge der Terminalzeichen

Bezeichner Startsymbol

Bezeichner::= b selector b kann einfache Variable oder Feldvariable sein,

„ “ drückt eine Konkatenation aus

selector::= є | [a] selector a ist eine Unterbeschreibung, є ist der Null-selector

Syntaktische Definition des selector-Terms:

Beispiel:

b[i][j][k] der Bezeichner b wird konkateniert mit einem selector der Länge drei, der

die Folge von geklammerten Unterbeschreibungen (i,j,k) beschreibt

15 / 27

Page 17: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Selector-Term:

Bedeutung des selector-Terms:

b є = b

var b: array[0:1] of array[1:3] of integer (Pascal-Deklaration)

b[0] = (b[0][1],b[0][2],b[0][3])

b[i][j] = integer-Wert

b[0][1] b[0][2] b[0][3]

b[1][1] b[1][2] b[1][3]

16 / 27

Page 18: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Referenzen:

Definition von Referenz:

Jede Referenz zu einer Variable -einfache oder Feldvariable- besteht aus einem Bezeichner mit

einem selector.

b є = b „die Referenz zum kompletten Feld b ist b є“

oder „b є referenziert das komplette Feld b“

oder „das komplette Feld b wird durch b є referenziert“

var b: array[0:1] of array[1:3] of integer (Pascal-Deklaration)

b[0][1] b[0][2] b[0][3]

b[1][1] b[1][2] b[1][3]

Beispiel:

17 / 27

Page 19: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Referenzen:

Definition von Referenz:

var b: array[0:1] of array[1:3] of integer (Pascal-Deklaration)

b[0] = (b[0][1],b[0][2],b[0][3]) „ b[0] referenziert zu einem Feld bestehend aus

(b[0][1],b[0][2],b[0][3])“

b[i][j] = integer-Wert „ b[i][j] referenziert zu einem einfachen integer-Wert“

b[0][1] b[0][2] b[0][3]

b[1][1] b[1][2] b[1][3]

Jede Referenz zu einer Variable -einfache oder Feldvariable- besteht aus einem Bezeichner mit

einem selector.

Beispiel:

18 / 27

Page 20: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Erweiterung der Notation „(b;i:e)“:

Definition:

Sind b und g Funktionen oder Variablen vom selben Typ und ist s passender selector

für b, dann ist die Notation (b;s:e) für einen passenden Ausdruck e definiert durch:

b:=(b;є:g) = g

{b[j]:=(b;[i] s:e)[j]=ij b[j]

i=j (b[j];s:e)

c[i]:=2 ≡ c:=(c;i:2)

b[i][j]:=2 ≡ b:=(b;[i][j]:2)

19 / 27

Page 21: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Erweiterung der Notation „(b;i:e)“:

b:=(b;є:g) = g

c[i]:=2 ≡ c:=(c;i:2)

b[i][j]:=2 ≡ b:=(b;[i][j]:2)

b є:=g ≡ b:=g

20 / 27

Page 22: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Erweiterung der Notation „(b;i:e)“:

c[i]:=2 ≡ c:=(c;i:2)

b[i][j]:=2 ≡ b:=(b;[i][j]:2)

b[j]:=(b;[i] s:e)[j]= ij b[j]

b:=(b;[i] s:e) ≡ b[i] s:=e

var b: array[0:1] of array[1:3] of integer (Pascal-Deklaration)

b[0][1] b[0][2] b[0][3]

b[1][1] b[1][2] b[1][3]

21 / 27

Page 23: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Erweiterung der Notation „(b;i:e)“:

c[i]:=2 ≡ c:=(c;i:2)

b[i][j]:=2 ≡ b:=(b;[i][j]:2)

b:=(b;[j] s:e) ≡ b[j] s:=e ≡ b[j]:=(b[j];s:e)

b[j]:=(b;[i] s:e)[j]= i=j (b[j];s:e)

22 / 27

Page 24: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Erweiterung der Notation „(b;i:e)“:

c[1:3]=(6,7,8); b[0:1][1:3]=((0,1,2),(3,4,5))

Beispiele:

c:=(c;є:b[1])=b[1]=(3,4,5)

c:=(c;є:b[1])[2]=b[1][2]=4

Definition:

Sind b und g Funktionen oder Variablen vom selben Typ und ist s passender selector

für b, dann ist die Notation (b;s:e) für einen passenden Ausdruck e definiert durch:

b:=(b;є:g) = g

{b[j]:=(b;[i] s:e)[j]=ij b[j]

i=j (b[j];s:e)

23 / 27

Page 25: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Erweiterung der Notation „(b;i:e)“:

c[1:3]=(6,7,8); b[0:1][1:3]=((0,1,2),(3,4,5))

Beispiele:

c[1]:=(c;1:3)[1]=(c;[1] є:3)[1]=(c[1];є:3)=3

c[2]:=(c;1:3)[2]=(c;[1] є:3)[2]=c[2] =7

Definition:

Sind b und g Funktionen oder Variablen vom selben Typ und ist s passender selector

für b, dann ist die Notation (b;s:e) für einen passenden Ausdruck e definiert durch:

b:=(b;є:g) = g

{b[j]:=(b;[i] s:e)[j]=ij b[j]

i=j (b[j];s:e)

24 / 27

Page 26: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Erweiterung der Notation „(b;i:e)“:

c[1:3]=(6,7,8); b[0:1][1:3]=((0,1,2),(3,4,5))

Beispiele:

b[0]:=(b;[1][3]:9)[0]=b[0]=(0,1,2)

b[1]:=(b;[1][3]:9)[1]=(b[1];[3]:9)=(3,4,9) b[1]:=(b[1];[3]:9) ≡ b[1][3]=9

Definition:

Sind b und g Funktionen oder Variablen vom selben Typ und ist s passender selector

für b, dann ist die Notation (b;s:e) für einen passenden Ausdruck e definiert durch:

b:=(b;є:g) = g

{b[j]:=(b;[i] s:e)[j]=ij b[j]

i=j (b[j];s:e)

25 / 27

Page 27: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Erweiterung der Notation „(b;i:e)“:

(((b;[i][j]:e);[j]:f);[k][i]:g) ≡ (b;[i][j]:e;[j]:f;[k][i]:g)

Beispiel:

Weglassen von inneren Klammern:

26 / 27

Page 28: Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat Bereiche von Feldern und Felder von Feldern (Literaturquelle: David Gries, The Science of Programming,

Lehrstuhl für Software-TechnologieProf. Dr. E.-E. Doberkat

Bereiche von Feldern - Felder von Feldern

Zusammenfassung:

Definition von Feldbereichen

Kurzschreibweise, Langschreibweise und Bild-Notation um logische Aussagen zu Formalisieren

Relationen: „=“, „ “, „<“, „>“, „ “, „≥“, „“

Anweisungen: domain(b), ordered(b) und perm(b,B)

Definition von Feldern von Feldern

Selector-Term

Referenzen

Erweiterung der Notation „(b;i:e)“

27 / 27