magic.pp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. {****************************************************************************
  2. Copyright (c) 1994 by Florian Kl„mpfl
  3. ****************************************************************************}
  4. { Demonstrationsprogramm zu FPKPascal }
  5. { berechnet magische Quadrate (Summe alle Spalten, Zeilen und }
  6. { Diagonalen ist gleich) }
  7. program magic;
  8. const
  9. maxsize = 11;
  10. type
  11. sqrtype = array[1..maxsize, 1..maxsize] of integer;
  12. var
  13. square : sqrtype;
  14. size, row, sum : integer;
  15. procedure makesquare(var sq : sqrtype;limit : integer);
  16. var
  17. num,r,c : integer;
  18. begin
  19. for r:=1 to limit do
  20. for c:=1 to limit do
  21. sq[r, c] := 0;
  22. if (limit and 1)<>0 then
  23. begin
  24. r:=(limit+1) div 2;
  25. c:=limit;
  26. for num:=1 to limit*limit do
  27. begin
  28. if sq[r,c]<>0 then
  29. begin
  30. dec(r);
  31. if r<1 then
  32. r:=r+limit;
  33. c:=c-2;
  34. if c<1 then
  35. c:=c+limit;
  36. end;
  37. sq[r,c]:=num;
  38. inc(r);
  39. if r>limit then
  40. r:=r-limit;
  41. inc(c);
  42. if c>limit then
  43. c:=c-limit;
  44. end;
  45. end;
  46. end;
  47. procedure writesquare(var sq : sqrtype;limit : integer);
  48. var
  49. row,col : integer;
  50. begin
  51. for row:=1 to Limit do
  52. begin
  53. for col:=1 to (limit div 2) do
  54. write(sq[row,2*col-1]:4,' ',sq[row,2*col]:4,' ');
  55. writeln(sq[row,limit]:4);
  56. end;
  57. end;
  58. begin
  59. size:=3;
  60. while (size<=maxsize) do
  61. begin
  62. writeln('Magisches Quadrat mit der Seitenl„nge ',size);
  63. writeln;
  64. makesquare(square,size);
  65. writesquare(square,size);
  66. writeln;
  67. sum:=0;
  68. for row:=1 to size do
  69. sum:=sum+square[row,1];
  70. writeln('Summe in den Reihen, Spalten und Diagonalen = ', sum);
  71. writeln;
  72. writeln;
  73. size:=size+2;
  74. end;
  75. end.