70 lines
1.3 KiB
Plaintext
70 lines
1.3 KiB
Plaintext
MODULE MDR;
|
|
IMPORT StdLog, Strings, TextMappers, DevCommanders;
|
|
|
|
PROCEDURE CalcMDR(x: LONGINT; OUT mdr, mp: LONGINT);
|
|
VAR
|
|
str: ARRAY 64 OF CHAR;
|
|
i: INTEGER;
|
|
BEGIN
|
|
mdr := 1; mp := 0;
|
|
LOOP
|
|
Strings.IntToString(x,str);
|
|
IF LEN(str$) = 1 THEN mdr := x; EXIT END;
|
|
i := 0;mdr := 1;
|
|
WHILE i < LEN(str$) DO
|
|
mdr := mdr * (ORD(str[i]) - ORD('0'));
|
|
INC(i)
|
|
END;
|
|
INC(mp);
|
|
x := mdr
|
|
END
|
|
END CalcMDR;
|
|
|
|
PROCEDURE Do*;
|
|
VAR
|
|
mdr,mp: LONGINT;
|
|
s: TextMappers.Scanner;
|
|
BEGIN
|
|
s.ConnectTo(DevCommanders.par.text);
|
|
s.SetPos(DevCommanders.par.beg);
|
|
REPEAT
|
|
s.Scan;
|
|
IF (s.type = TextMappers.int) OR (s.type = TextMappers.lint) THEN
|
|
CalcMDR(s.int,mdr,mp);
|
|
StdLog.Int(s.int);
|
|
StdLog.String(" MDR: ");StdLog.Int(mdr);
|
|
StdLog.String(" MP: ");StdLog.Int(mp);StdLog.Ln
|
|
END
|
|
UNTIL s.rider.eot;
|
|
END Do;
|
|
|
|
PROCEDURE Show(i: INTEGER; x: ARRAY OF LONGINT);
|
|
VAR
|
|
k: INTEGER;
|
|
BEGIN
|
|
StdLog.Int(i);StdLog.String(": ");
|
|
FOR k := 0 TO LEN(x) - 1 DO
|
|
StdLog.Int(x[k])
|
|
END;
|
|
StdLog.Ln
|
|
END Show;
|
|
|
|
PROCEDURE FirstFive*;
|
|
VAR
|
|
i,j: INTEGER;
|
|
five: ARRAY 5 OF LONGINT;
|
|
x,mdr,mp: LONGINT;
|
|
BEGIN
|
|
FOR i := 0 TO 9 DO
|
|
j := 0;x := 0;
|
|
WHILE (j < LEN(five)) DO
|
|
CalcMDR(x,mdr,mp);
|
|
IF mdr = i THEN five[j] := x; INC(j) END;
|
|
INC(x)
|
|
END;
|
|
Show(i,five)
|
|
END
|
|
END FirstFive;
|
|
|
|
END MDR.
|