Création
d'entreprise
Posez votre question Signaler

Le carré magique : la matrice sous turbo pascal

xavier - Dernière réponse le 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).
Lire la suite 

Le carré magique : la matrice sous turbo pascal »

4 réponses
Réponse
+10
moins plus
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.
Ajouter un commentaire
Réponse
+2
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
-1
moins plus
slt j ai ecri un algorithme qui permet de remplir un carré magique pour n impair
Ajouter un commentaire
Ce document intitulé « le carré magique : la matrice sous turbo pascal » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?