Bonjour,
pour un tp ( en licence math info) je devais faire un carré magique. Mais le problème c'est que je n'arrive pas à faire marcher la fonction qui permet de vérifier si c'est bien un carré magique.

Voici mon code que pour la création du carré magique de taille n*n(avec n=5):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
 
program carremagique;
 
uses crt;
 
const n=5;
 
 
 
var cell:array[1..n,1..n] of integer;
 
    i,j,sum:integer;
 
 
 
 
 
procedure car;
 
var i,j,count,ancj,anci:integer;
 
 
begin 
 begin   
 
  begin
 
   for i:=1 to n do
 
    begin
 
    for j:=1 to n do
 
    cell[i,j]:=0;
 
    end;
 
  end;
 
 
 j:=(n div 2) +1;
 
 i:=1;
 
 count:=0;
 
 repeat
 
 inc(count);
 
 cell[i,j]:=count;
 
 ancj:=j;
 
 dec (j);
 
if (j<1) then j:=n;
 
 anci:=i;
 
 dec (i);
 
if (i<1) then i:=n;
 
 
 
if cell[i,j]<>0 then
 
  begin
 
   i:=anci+1;
 
   if i>n then i:=1;
 
   j:=ancj;
 
  end;
 
 until count=n*n;
 
 end;
 
end;
 
 
 
 
 
 
begin
 
 car;
 
 for i:=1 to n do
 
  begin
 
  for j:=1 to n do
 
  write(cell[i,j]:5);
 
  writeln;
 
  end;
 
  readln;
 
end.
Par contre je n'arrive pas à faire fonctionner la fonction suivante qui permet de vérifier si c'est bien un carré magique.:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
function verif ( var flag:boolean):boolean;
 
var flag,i,j,sum,sum1,n:integer;
 
 
 
begin
 n:=5;
 
 flag:=true;
 
 sum1:= (n*(n*n + 1)) div 2;
 
 for i:=1 to n do
 
 sum:=0;
 
 for j:=1 to n do
 
  begin
 
   sum:=sum+cell[i,j];
 
   if (sum<> sum1) then flag:=false 
 
  end;
 
 for j:=1 to n do
 
 sum:=0;
 
 for i:=1 to n do
 
  begin
 
   sum:=sum+cell[i,j];
 
   if (sum<> sum1) then flag:=false 
 
  end;
 
if flag=false then writeln('Ce n''est pas un carré magique.')
else writeln('C''est un carré magique');
readln;
end;
Pouvez vous me dire ce qui marche pas dans cette fonction.
Merci d'avance