Prof. Dr. Ch. Wahmkow Fachbereich Maschinenbau Fachhochschule Stralsund Arbeitsblätter für Algorithmierung und Strukturierung Inhalt : Struktogramme, Beispiele und Erläuterungen - Sequenz - vollständige Alternative - unvollständige Alternative - kopfgesteuerte Schleifen - fußgesteuerte Schleife - Fallunterscheidungen
Folgendes Delphi-Formular gilt für alle Struktogramme und Programme: 2
Struktugramm - Schema Beispiele in Delphi Bemerkung Sequenz (Reihenfolge)... E : A : a b:=a+1 b... vollständige Alternative (Auswahl) var a,b:real; a:=strtofloat(edit1.text); b:=a+1; edit2.text:=floattostr(b); - einzelne Anweisungen erfolgen nacheinander - mehrere Anweisungen nacheinander werden Anweisungsblock genannt ja E: i s:=s+5 A : s Ende i = 0? nein s:=s+10,i var i,s:integer; s:=0; i:=strtoint(edit1.text); if i=0 then s:=s+5; end else s:=s+10; edit3.visible:=true; edit3.text:=inttostr(i); - Abarbeitung von 2 Möglichkeiten (ja/nein) - Auswahl der Möglichkeit durch Festlegung ( if... then...else ) - vor else niemals ein Semikolon Die Eigenschaft "visible" des Edit3- Fensters wird im Objektinspektor auf "false" gesetzt und erst im else-zweig geändert. 3
unvollständige Alternative (Auswahl)... s:=0 E: i i<> 0? ja nein / i=0? ja nein s:=s+5 / A:... s var s,i:integer; s:=0; i:=strtoint(edit1.text); if i<>0 then else ; if i=0 then s:=s+5; - ein Anweisungsblock bleibt immer leer - auf eine Bedingung kann nur eine Möglichkeit weiter bearbeitet werden - Bedingung für JA-Zweig formulieren, da einfacher und übersichtlicher zu programmieren 4
Schleifen (auch Zyklen oder Iterationen) kopfgesteuerte Schleifen Zählschleife s:=0 i:=1,10 A : i A : s s:=0, i:=0 i:=1, 10 A : i,s var s,i:intger; s:=0; for i:=1 to 10 do ; edit1.text:=inttostr(s); edit2.text:=inttostr(i); hier wird 11 ausgegeben : : s:=0;i:=0; for i:=1 to 10 do ; edit1.text:=inttostr(i); - for-do Schleife - Test der Bedingung am Schleifenkopf - Schleifenkörper wird nicht abgearbeitet, wenn EW kleiner als AW - dito für downto Schleife - Laufvariable darf im Schleifenkörper nicht verändert werden - Laufvariable wird im Schleifenkopf erhöht bzw. erniedrigt und getestet - nur die Schrittweite 1 zulässig - ohne BEGIN und END im Schleifenkörper gehört standardmäßig nur eine Anweisung nach dem Schleifenkopf zum Schleifenkörper WHILE - Schleife (solange) 5
s:=0, i:=0 solange i<10 i:=i+0,1 A : s A : i var s,i:real; s:=0;i:=0; while i<10 do i:=i+0.1; ; edit1.text:=inttostr(s); edit2.text:=inttostr(i); Hier wird 10 ausgegeben - while-do Schleife - Abprüfung einer Bedingung - dann Abarbeitung des Schleifenkörpers - Bedingung muß im Schleifenkörper verändert werden, sonst Endlosschleife - Bedingung wird vor Ausführung der Schleife getestet (sogenannte abweisende Schleife) - Schrittweite beliebig fußgest. Schleife (repeat-schleife) 6
s:=0 s:=s+1 A : s bis s > 10 A : s var s:integer; s:=0; repeat s:=s+1; edit1.text:=inttostr(s); until s>10; Hier wird 11 ausgegeben. - repeat-until Schleife, wiederhole...bis - Anweisungsblock wird solange durchlaufen bis die Bedingung erfüllt ist - Bedingung muß im Schleifenkörper verändert werden, sonst Endlosschleife - Bedingung wird erst nach Ausführung d. Schleifenkörpers getestet, d.h. Schleife wird auf jeden Fall einmal durchlaufen - Schleifenkörper muß nicht in und end eingegrenzt werden, da Schlüsselwörter repeat...until vorhanden 7
geschachtelte Alternative ja E : a,b,c a > b? nein a > c? b > c? ja nein ja nein max:= a max:= c A : max max:= b max:= c var a,b,c,max:real; a:=strtofloat(edit1.text); b:=strtofloat(edit2.text); c:=strtofloat(edit3.text); if a>b then if a>c then max:=a else max:=c end else if b>c then max:=b else max:=c; edit4.text:=floattostr(max); - jeweilige Programmabarbeitung nach Bedingungsabgleichung - wichtig : vor else kein Semikolon Fallunterscheidung ohne else 8
5 s:=s+5 A : i i=...? 10 15 s:=s+s var i,s:integer; s:=10; i:=strtoint(edit1.text); case i of 5: s:=s+5; 10: ; 15: s:=s+s; edit3.text:=inttostr(i); - der Datentyp der Vergleichsvariablen muß abzählbar sein, string und real- Zahlen kommen nicht in Frage - Integer oder Char sind abzählbare Datentypen, Fallunterscheidung mit else 9
5 s:=s+5 A : i i=...? 10 else s:=s+s var i,s:integer s:=10; i:=strtoint(edit1.text); case i of 5: s:=s+5; 10: ; end else s:=s+s; edit3.text:=inttostr(i); 10