Zur Themenübersicht     

Übungsaufgaben: Die WAS n Prozeduren/Funktionen

Weitere Beispiele und Aufgaben

Beide WAS Proceduren zeichnen ein Object. WAS1 zeichnet eine Spirale die sich linksherum dreht. WAS2 hingegen zeichnet eine Kochkurve. Beide Proceduren haben einen Algorythmus und eine Eingangsbedingung. Die Spieziellen Beschreibungen der Proceduren sind links neben dem dazugehörigen Quellcode zu finden.

1.1 Die WAS n Prozeduren/Funktionen

Beschreibungen der Proceduren WAS1 und WAS2.
Das Programm WAS1 zeichnet eine Spierale auf die Zeichenfläche, die sich variabel weit zeichnen läßt. Dies kontrolliert man mit den Variablen a und b.
Die Procedure zeichnet eine Linie mit der Länge a, danach wird der Stift um 10 Grad nach links gedreht. Eine weitere wichtige Komponente in dieser Procedure ist die Eingangsbedingung in Zeile 3. Diese Zeile verhindert, dass die Procedure in das Unendliche weiter läuft.
Aus diesen wird die Spirale zusammengebaut in dem man die Procedure beliebig oft wiederholt. Wenn man aber die Werte nicht verändern würde nach jedem Durchlauf, würde es einen Kreis ergeben, um daraus eine Spiral zu formen, verkürzt man die Variable a um einen Beliebigen Wert b.
1 procedure TForm1.was1 (a,b: Real);
2 begin
3   if a > 0 then begin
4      draw(a);
5      winkel := winkel + 10;
6      was1 (a - b , b)
7   end
8 end;
 Zeichnung
Das Programm WAS2 zeichnet einen einnzelne Lineie auf die Zeichenfläche, die die gesamte Breite der Figur, die sich nach weiteren durchlaufen der Procedure erweitert wird, darstellen. Wie groß diese Figur wird liegt auch hier an den Variablen a und b.
Die Procedure zeichnet eine Linie mit der Länge a, danach wird der jeweils der Stift um 90 Grad nach links oder nach rechts gedreht (s. Zeichnung). Eine weitere wichtige Komponente in dieser Procedure ist die Eingangsbedingung in Zeile 3. Diese Zeile verhindert, dass die Procedure in das Unendliche weiter läuft.
01 procedure TForm1.was2 (a,b: Real);
02 begin
03    if a > b then begin
04      was2(a /3,b);
05      winkel := winkel + 90;
06      was2(a /3,b);
07      winkel := winkel - 90;
08      was2(a /3,b);
09      winkel := winkel - 90;
10      was2(a /3,b);
11      winkel := winkel + 90;
12      was2(a /3,b);
13     end
14    else draw(a)
15 end;

 Zeichnung

Um die Übersicht bei umpfangreichen Algorytmen zu behalten ist es sinnvoll eine Wertetabelle zu erstellen.

 

Beispiel für eine Wertetabelle
  WAS1:            
Winkel Zeile a b        
0 1 50 80        
0 3 Eintrittsbedingung erfüllt        
0 4 Neue Speicherstellen ----> WAS2 a b
          1 30 50
          3 Eintrittsbedingung nicht erfüllt
        <---- 14 Linie wird gezeichnet
90 5 Stift wird gedreht        
90 6 Neue Speicherstellen ----> WAS2 a b
          1 30 50
          3 Eintrittsbedingung nicht erfüllt
          <---- 14 Linie wird gezeichnet
0 7 Stift wird gedreht
0 8 Neue Speicherstellen ----> WAS2 a b
          1 30 50
          3 Eintrittsbedingung nicht erfüllt
        <---- 14 Linie wird gezeichnet
-90 9 Stift wird gedreht        
-90 10 Neue Speicherstellen ----> WAS2 a b
          1 30 50
          3 Eintrittsbedingung nicht erfüllt
        <---- 14 Linie wird gezeichnet
0 11 Stift wird gedreht        
0 12 Neue Speicherstellen ----> WAS2 a b
          1 30 50
          3 Eintrittsbedingung nicht erfüllt
        <---- 14 Linie wird gezeichnet
0 15 Ende der Procedure alle Speicherstellen werden gelöscht