Algorithme: carré magique [Fermé]

Signaler
-
 Anna -
Bonjour,

J'ai un exercice que je n'arrive pas à comprendre, je connais que veut dire un carré magique mais j'ai pas compris la méthode comment le faire.
SVP, qui peut m'expliquer la méthode de l'exercice suivant:

Dans un tableau carré à N lignes et N colonnes (N impair) ranger les nombres entiers de 1 à N2 de manière à ce que la somme des éléments de chaque ligne soit égale à la somme des éléments de chaque colonne et à la somme des éléments de chaque diagonale.

Le principe exposé ci-après est l’une des méthodes de création d’un carré magique :
•Pour commencer, 1 est placé dans la case centrale de la première ligne ;
•Ensuite, les entiers de 2 à N2 sont placés les uns après les autres dans les cases d’une diagonale orientée nord-ouest.
Plusieurs cas particuliers peuvent se présenter :
- Si on tombe hors du carré en haut, le nombre est placé dans la dernière ligne sans changer de colonne ;
- Si on tombe hors du carré à gauche, le nombre est placé dans la colonne de droite sans changer de ligne ;
- Si on tombe sur une case déjà occupée, le nombre est placé sous la case précédemment remplie. A chaque fois qu’un multiple de N est placé dans une case, la case destinée au nombre suivant est normalement occupée.

3 réponses

SVP, est ce que l'algorithme suivant est correcte :


Procédure carré(n : Entier; Var T: Tableau[1..n,1..n] de Entier)
Var
i, j, L, C : Entier
Début
C <-- (n + 1) Div 2
T[1,C] <-- 1
i<-- 1
L<-- 1
TantQue (i <= n^2) Faire
Si(i Mod n = 0) Alors
L <-- L + 1
Sinon
Si(L = 1) Alors
L <-- n
Sinon
L<-- L – 1
FinSi
Si(C = 1) Alors (* débordement de colonne *)
C <-- n
Sinon
C<-- C – 1
FinSi
FinSi
i <-- i + 1
T[L,C] <-- i
FinTQ
Fin

2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63639 internautes nous ont dit merci ce mois-ci

Messages postés
11471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 juillet 2020
655
Si tu me demandes de lire ton algorithme, je te demande, d'abord, de le rendre plus lisible : ajoute des commentaires, décris, au minimum, à quoi sert chaque variable.
Et indente tes lignes, pour rendre plus lisible tes if, tantque. Plus c'est clair, plus les erreurs sont visibles.
Quelques remarques :
(1) tu ne vérifies pas que n est impair
(2) tu as choisi de ne pas respecter la consigne "Si on tombe sur une case déjà occupée", et, au contraire, de vérifier "Si(i Mod n = 0) Alors", au lieu de vérifier que la cellule de destination est déjà occupée
(3) tu fais "L <-- L + 1" sans vérifier que L n'est pas la dernière ligne du tableau

Procédure carré(n : Entier; Var T: Tableau[1..n,1..n] de Entier)
Var
i, j, L, C : Entier
Début
(* mettre 1 dans la case centrale de la 1ère ligne *)
C <-- (n + 1) Div 2
T[1,C] <-- 1
(* remplissage du reste du tableau *)
i<-- 1
L<-- 1
TantQue (i <= n^2) Faire
Si(i Mod n = 0) Alors (* case occupée *)
L <-- L + 1
Sinon
Si(L = 1) Alors (* débordement de ligne *)
L <-- n
Sinon
L<-- L – 1
FinSi
Si(C = 1) Alors (* débordement de colonne *)
C <-- n
Sinon
C<-- C – 1
FinSi
FinSi
i <-- i + 1
T[L,C] <-- i
FinTQ
Fin

Messages postés
11471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 juillet 2020
655
Si tu me demandes de lire ton algorithme, je te demande, d'abord, de le rendre plus lisible : décris, au minimum, à quoi sert chaque variable.
Et indente tes lignes, pour rendre plus lisible tes if, tantque. Plus c'est clair, plus les erreurs sont visibles.
Quelques remarques :
(1) tu ne vérifies pas que n est impair
(2) tu as choisi de ne pas respecter la consigne "Si on tombe sur une case déjà occupée", et, au contraire, de vérifier "Si(i Mod n = 0) Alors", au lieu de vérifier que la cellule de destination est déjà occupée
(3) tu fais "L <-- L + 1" sans vérifier que L n'est pas la dernière ligne du tableau
(4) à quoi sert j?
OK, merci bien.
Messages postés
38534
Date d'inscription
mercredi 11 avril 2007
Statut
Modérateur
Dernière intervention
5 juillet 2020
7 816
Si tu lis bien ma publication, tu peux savoir que je ne demande pas la correction mais juste j'ai demandé à quelqu'un de m'expliquer l’énoncé de l'exercice pour que je puisse le faire.
Messages postés
38534
Date d'inscription
mercredi 11 avril 2007
Statut
Modérateur
Dernière intervention
5 juillet 2020
7 816 > Anna
Désolé...
Mais , je ne vois pas trop ce qu'il y aurait à expliquer dans l'énoncé de l'exercice.
Il faut construire un carré de n lignes et n colonnes impaires (3,5,7 . etc ) tel que la somme des éléments de chaque ligne soit égale à la somme des éléments de chaque colonne et à la somme des éléments de chaque diagonale.
Ensuite il faut suivre les instructions pour placer les divers chiffres
Je connais la définition d'un carré magique mais dés le début, j'ai pas compris les instructions à suivre pour le faire, c'est pourquoi j'ai posé la question.
Maintenant, c'est bon, j'ai compris les instructions. Je vous remercie pour l'explication.
Messages postés
11471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 juillet 2020
655
L'exemple en page 5 de http://artemath.com/artemath/activites/dedra2016/CARRE-corr.pdf est plus clair?
Ou bien https://fr.wikipedia.org/wiki/Carr%C3%A9_magique_(math%C3%A9matiques)#M.C3.A9thode_siamoise?
C'est clair, merciiiii bien.