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;
|