Algorithme: carré magique
Anna
-
Anna -
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.
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.
A voir également:
- Écrire un programme qui teste si un carré est magique
- Algorithme euromillion excel gratuit - Forum Excel
- Un algorithme sur excel ou un logiciel à programmer - Forum Logiciels
- Logiciel algorithme euromillion - Télécharger - Loisirs créatifs
- Algorithme : toutes les combinaisons possibles dans un tableau de 2 par 7 ✓ - Forum VB / VBA
- Ecrire un algorithme qui permet de resoudre ax²+bx+c=0 pdf - Forum Algorithmes / Méthodes
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
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
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?