51 lines
927 B
Text
51 lines
927 B
Text
MODULE SelfDescribingNumber;
|
|
|
|
FROM WholeStr IMPORT
|
|
CardToStr;
|
|
FROM STextIO IMPORT
|
|
WriteString, WriteLn;
|
|
FROM SWholeIO IMPORT
|
|
WriteCard;
|
|
|
|
PROCEDURE Check(Number: CARDINAL): BOOLEAN;
|
|
VAR
|
|
I, D: CARDINAL;
|
|
A: ARRAY [0 .. 9] OF CHAR;
|
|
Count, W: ARRAY [0 .. 9] OF CARDINAL;
|
|
Result: BOOLEAN;
|
|
BEGIN
|
|
CardToStr(Number, A);
|
|
FOR I := 0 TO 9 DO
|
|
Count[I] := 0;
|
|
W[I] := 0;
|
|
END;
|
|
FOR I := 0 TO LENGTH(A) - 1 DO
|
|
D := ORD(A[I]) - ORD("0");
|
|
INC(Count[D]);
|
|
W[I] := D;
|
|
END;
|
|
Result := TRUE;
|
|
I := 0;
|
|
WHILE Result AND (I <= 9) DO
|
|
Result := (Count[I] = W[I]);
|
|
INC(I);
|
|
END;
|
|
RETURN Result;
|
|
END Check;
|
|
|
|
VAR
|
|
X: CARDINAL;
|
|
|
|
BEGIN
|
|
WriteString("Autodescriptive numbers from 1 to 100000000:");
|
|
WriteLn;
|
|
FOR X := 1 TO 100000000 DO
|
|
IF Check(X) THEN
|
|
WriteString(" ");
|
|
WriteCard(X, 1);
|
|
WriteLn;
|
|
END;
|
|
END;
|
|
WriteString("Job done.");
|
|
WriteLn;
|
|
END SelfDescribingNumber.
|