MODULE HappyNumbers; FROM InOut IMPORT WriteCard, WriteLn; CONST Amount = 8; VAR seen, num: CARDINAL; PROCEDURE SumDigitSquares(n: CARDINAL): CARDINAL; VAR sum, digit: CARDINAL; BEGIN sum := 0; WHILE n>0 DO digit := n MOD 10; n := n DIV 10; sum := sum + digit * digit; END; RETURN sum; END SumDigitSquares; PROCEDURE Happy(n: CARDINAL): BOOLEAN; VAR i: CARDINAL; seen: ARRAY [0..255] OF BOOLEAN; BEGIN FOR i := 0 TO 255 DO seen[i] := FALSE; END; REPEAT seen[n] := TRUE; n := SumDigitSquares(n); UNTIL seen[n]; RETURN seen[1]; END Happy; BEGIN seen := 0; num := 0; WHILE seen < Amount DO IF Happy(num) THEN INC(seen); WriteCard(num,2); WriteLn(); END; INC(num); END; END HappyNumbers.