Einlesen der Matrix II

 [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

SantaClaus.m2
index := 0; squarelen := 0; counter := 0; nextodd := 1;
ReadCard(value);
WHILE Done DO
   (* Invarianten:
      buf[0 .. index-1] sind belegt, also index Werte
      squarelen^2 = index + counter
      (squarelen+1)^2 - squarelen^2 = nextodd
   *)
   IF index <= HIGH(buf) THEN
      buf[index] := value; INC(index);
      IF counter = 0 THEN
         INC(squarelen); counter := nextodd - 1;
         (* Der Abstand zwischen zwei aufeinanderfolgenden
            Quadratzahlen n^2 und (n+1)^2 ist 2n+1,
            somit ist der Abstand zwischen zwei
            aufeinanderfolgenden Abstaenden 2
         *)
         INC(nextodd, 2);
      ELSE
         DEC(counter);
      END;
   ELSE
      WriteString("Die Wegematrix ist zu gross!"); WriteLn;
      RETURN FALSE
   END;
   ReadCard(value);
END;

*counter gibt jeweils an, wieweit die nächste Quadratzahl entfernt ist.
 
*nextodd gibt die Distanz zur darauffolgenden Quadratzahl an.
 

 [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 1999 Andreas Borchert, in HTML konvertiert am 13.01.1999