Le carré magique : la matrice sous turbo pascal

Fermé
xavier - 4 janv. 2001 à 16:12
 viirus - 26 mai 2010 à 15:39
j'ai un devoir a rendre pour la semaine prochaine et il est presque fini: merci donc à celui ou celle qui m'apportera son aide.
il me reste à faire l'étape"3". voici l'énoncé:
ecrire un programme qui permet à l'utilisateur d'executer les fonctions suivantes:
"1"/ saisir une matrice (n lignes, n colonnes) qui sera placé dans le tableau.
"2"/afficher la matrice.
"3"/verifier si la matrice est un carré magique. c'est un carré magique si la somme de toutes les lignes, colonnes et diagonales principales sont égales (donnez-moi si possible quelques précisions sur la définition du carré magique).

4 réponses

program carre_magique;
uses wincrt;
type mat = array [1..19,1..19] of integer ;
{ Remarquer qu'une indexation de 0 à 18 rendrait possible l'utilisation de la fonction "mod" au lieu de la fonction
F définie plus loin. }
var N, D : integer ; A : mat;
procedure lecture (var N : integer ; var P : integer );
begin write ('Carrés magiques de coté impair avec des entiers consécutifs positifs.');
write ('Nombre de lignes et de colonnes: ');
repeat
readln (N)
until odd (N); {seule une valeur impaire est acceptée}
write ('Valeur de départ: ');
readln (P)
end ;
procedure ecriture (M : mat ; N, P : integer );
{ Affichage d'une matrice de N lignes et P colonnes }
var I, J : integer ;
begin
for I := 1 to N do
begin
for J := 1 to P do
write (M[I, J] : 4 );
writeln { passage à la ligne}
end
end ;

function f (X, N : integer ) : integer ;
{F est construite pour donner un résultat entre 1 et N dans tous les cas, on peut bien sûr se contenter de : "si
X<N alors X sinon X-N ", mais indexer le tableau de 0 à n-1 permet d'utiliser "mod" et donc de se dispenser de F }
begin if X < 1 then F := F(X + N ,N)
else if X > N then F := F(X - N,N)
else F := X
end;
procedure construc (N, D : integer ; var A : mat ); {D est la valeur initiale, N la dimension du carré}
var I, J, X : integer ; {I , J sont les coordonnées de la case courante }
begin for I := 1 to N do for J := 1 to N do A [I, J] := 0; {Initialisation nécessaire}
I := (N div 2) + 1 ; J := I-1;
for X := 0 to (N*N) -1 do
begin if A[F(I+1, N), F (J+1, N)] = 0
then begin I := F (I+1, N); J := F (J+1, N) end
else repeat I := F (I+2, N) until A[I, J] = 0;
{ Si la case suivante est vide, alors la case courante devient cette case-là.}
A[I, J] := X + D
end; { D est la valeur de départ }
end;
begin
lecture (N, D);
construc (N, D, A);
ecriture (A, N, N);
writeln ('La somme vaut : ', (N*(N*N-1) div 2) + N*D )
end.
11
program matrice_magique ;
uses wincrt ;
type
mat = array[1..100,1..100] of integer ;
var
m : mat ;
n : integer ;

procedure saisie (var n : integer);
begin
repeat
writeln('Donner la dimension de la matrice ');
readln(n);
until (n mod 2 <> 0) and (n>1);
end;

procedure affiche_mat (m : mat ; n : integer );
var
l,c : integer ;
begin
for l:= 1 to n do
begin
for c := 1 to n do
write(m[l,c],' ');
writeln;
end;
end;

procedure remplir_mat (var m : mat ; n : integer);
var
l,c,k,sl,sc : integer ;
begin
{initialisation}
l := n ;
c := (n div 2 ) + 1 ;
k := 0 ;
repeat
k:= k + 1 ;
m[l,c] := k ;
sl := l;
sc := c;
l := l + 1 ;
c := c + 1 ;
if l > n then
l := 1 ;
if c > n then
c := 1 ;

if m[l,c] <> 0 then
begin
l:= sl-1 ;
c:=sc;
end;
until k = sqr(n) ;
end;


{programme principal}
begin
saisie(n);
remplir_mat(m,n);
affiche_mat(m,n);
end.
4
salut esk vous pouvé maidé sur un exo ke le prof ma donnée sur la carrée magique
je dois ecrire un programme qui permet d'obtenir un carrée magique sans utilisé les procédures et les fonctions
je vous prie de bien vouloir m'aider
2
slt j ai ecri un algorithme qui permet de remplir un carré magique pour n impair
-1