Universität Ulm, Fakultät für Mathematik und Wirtschaftswissenschaften, SAI

Lösung zu Blatt 1 --- Allgemeine Informatik II (WS 1999)

1. Verschachtelt

MODULE Plottest;

   IMPORT Arguments;
   IMPORT MathLib;
   IMPORT Plot;
   IMPORT StdIO;

   CONST
      maxx = 4000.0;
      maxy = 4200.0;

   TYPE Point = RECORD x, y: REAL; END;

   PROCEDURE Line(x, y: Point); (* Points between (0,0) and (1,1) *)
   BEGIN
      Plot.Line(TRUNC(maxx * x.x), TRUNC(maxy * x.y),
		  TRUNC(maxx * y.x), TRUNC(maxy * y.y));
   END Line;

   PROCEDURE Middle(x, y: Point; VAR res: Point);
   BEGIN
      res.x := 0.5 * (x.x + y.x);
      res.y := 0.5 * (x.y + y.y);
   END Middle;

   PROCEDURE Generate(x, y, z: Point; n: INTEGER);
      VAR xy, xz, yz, np2: Point;
   BEGIN
      Line(x, y); Line(x, z); Line(y, z);
      IF n > 0 THEN 
	 Middle(x, y, xy); Middle(x, z, xz); Middle(y, z, yz);
	 Generate(x, xy, xz, n - 1);
	 Generate(y, xy, yz, n - 1);
	 Generate(z, xz, yz, n - 1);
      END;
   END Generate;

   VAR x, y, z: Point;
      gen: INTEGER;

BEGIN
   Arguments.InitArgs("#Generations");
   Arguments.FetchInt(gen);
   Arguments.AllArgs;
   x.x := 0.0; x.y := 0.0;
   y.x := 1.0; y.y := 0.0;
   z.x := 0.5; z.y := MathLib.sqrt(0.75);
   Plot.OpenPlot(StdIO.stdout);
   Generate(x, y, z, gen);
   Plot.ClosePlot();
END Plottest.

Universität Fakultät SAI

Ingo Melzer, 20. April 1999