lehrstuhl für software-technologieprof. dr. e.-e. doberkat bereiche von feldern und felder von...
Post on 05-Apr-2015
115 Views
Preview:
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
top related