Data update
This commit is contained in:
parent
72eb4943cb
commit
4d5544505c
2347 changed files with 62432 additions and 16731 deletions
46
Task/Magic-constant/Modula-2/magic-constant.mod2
Normal file
46
Task/Magic-constant/Modula-2/magic-constant.mod2
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
MODULE MagicConstant;
|
||||
|
||||
FROM STextIO IMPORT WriteString, WriteLn;
|
||||
FROM SWholeIO IMPORT WriteInt;
|
||||
FROM RealMath IMPORT exp, ln;
|
||||
|
||||
VAR
|
||||
N: CARDINAL;
|
||||
E: REAL;
|
||||
|
||||
(* Returns the magic constant of a magic square of order N + 2 *)
|
||||
PROCEDURE A(N: CARDINAL): CARDINAL;
|
||||
VAR
|
||||
N2: CARDINAL;
|
||||
BEGIN
|
||||
N2 := N + 2;
|
||||
RETURN (N2 * ((N2 * N2) + 1)) DIV 2
|
||||
END A;
|
||||
|
||||
(* Returns the order of the magic square whose magic constant is at least X *)
|
||||
PROCEDURE InvA(X: REAL): CARDINAL;
|
||||
BEGIN
|
||||
RETURN VAL(INTEGER, exp(ln((2. * X)) / 3.) + 1.)
|
||||
(* Use of power(2. * X, 1. / 3.) + 1. does not give enough precision due to rounded exponent *)
|
||||
END InvA;
|
||||
|
||||
BEGIN
|
||||
WriteString("The first 20 magic constants are ");
|
||||
FOR N := 1 TO 20 DO
|
||||
WriteInt(A(N), 1);
|
||||
WriteString(" ")
|
||||
END;
|
||||
WriteLn;
|
||||
WriteString("The 1,000th magic constant is ");
|
||||
WriteInt(A(1000), 1);
|
||||
WriteLn;
|
||||
E := 1.;
|
||||
FOR N := 1 TO 20 DO (* The results are equal to these from Mathematica for N <= 23 *)
|
||||
E := E * 10.;
|
||||
WriteString("10^");
|
||||
WriteInt(N, 2);
|
||||
WriteString(": ");
|
||||
WriteInt(InvA(E), 9);
|
||||
WriteLn
|
||||
END
|
||||
END MagicConstant.
|
||||
Loading…
Add table
Add a link
Reference in a new issue