IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Construction d'un carré magique


Sujet :

Pascal

  1. #1
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut Construction d'un carré magique
    salut,
    j'ai écrit un programme permettant de construire un carré magique en suivant cet algorithme (que j'ai trouvé sur internet) :
    x <-- 1
    mettre x au hasard sur la matrice
    incrémenter x
    décalage vers la droite puis décalage vers le bas
    mettre x si la case est vide sinon annuler décalage puis décaler 2 fois vers le bas
    l'algo s'arrête lorsque on atteint sqr(n)
    Si j'ai la somme des lignes = sommes de colonnes = n*(n+1) / 2 c'est pas le cas pour la somme des diagonales.
    exemple n=3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    5  7  3
    1  6  8
    9  2  4
    Pouvez-vous m'indiquer une méthode de construction plus élaborée ?
    Merci.

  2. #2
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Points : 734
    Points
    734
    Par défaut
    Bonsoir,

    Citation Envoyé par paskal++ Voir le message
    salut,
    si j'ai la somme des lignes = sommes de colonnes = n*(n+1) / 2 c'est pas le cas pour la somme des diagonales.
    exemple n=3:

    5 7 3
    1 6 8
    9 2 4
    Et est-ce le cas pour les autres lignes et colonnes ? Non. La formule de la somme est plutôt n * (n² + 1) / 2.
    pouvez vous m'indiquer une méthode de construction plus élaborée
    merci.
    Il y a plusieurs façons pour construire un carré magique. Voici une méthode parmi d'autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    0  0  0     0  0  0     0  0  2     0  0  2     4  0  2  
    0  0  0     0  0  0     0  0  0     3  0  0     3  0  0  
    0  0  0     0  1  0     0  1  0     0  1  0     0  1  0  
    
    4  0  2     4  0  2     4  0  2     4  0  2     4  9  2
    3  5  0     3  5  0     3  5  7     3  5  7     3  5  7
    0  1  0     0  1  6     0  1  6     8  1  6     8  1  6
    Je pense que c'est simple à comprendre. Ah, débrouille-toi pour les carrés où n est pair !

    --
    Wachter
    Code parrain certification Voltaire : NTMPH759

  3. #3
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut
    bonsoir,
    Citation Envoyé par Wachter Voir le message
    Non. La formule de la somme est plutôt n * (n² + 1) / 2.


    sinon la méthode ne fonctionne que si le 1 est placé dans la matrice ligne3 colonne 2
    en inversant le pas et en le placant ligne1 colonne 2 j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    8	1      6
    3	5	7
    4	9	2

    y'a t'il une méthode en utilisant la fonction random
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    randomize ;
    i := random(n)+1 ;
    j := random (n)+1 ; 
    x := 1 ;
    m[i,j] := x ;
    avec n variable et impair
    merci.

  4. #4
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    La fonction random n'est pas adapté à ce genre de problème, surtout que la procédure pour créer ton carré magique te montre que les nombre ne sont pas choisis aléatoirement.
    Indices: Sachant que i et j représentent la ligne et la colonne , tu as le choix de commencer le remplissage sur la dernière ligne ou la première ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      i:={première ligne ou derniere ligne}
      j:= (taille div 2) +1; {taille est la taille du carré, dans ton exemple 3}
      m[i,j]:=1{ et voila ton 1 est bien placé pour partir}
    -Si on prend le cas que tu viens de mettre i=1, Pour remplir, vu que la première ligne est déjà rempli on passe à la dernière ligne(qui est égale à la taille du carré)(le principe étant que quand une ligne est rempli on passe à la ligne inférieure et ceci étant possible que si la colonne est dans les limites)
    -Ensuite on a le cas ou si le nombre qu'on vient de mettre est un multiple de taille du carré(dans ce cas on place le prochain nombre juste en dessous de celui qu'on vient de placer(même colonne, ligne courante -1)
    -Et pour poursuivre quand une dernière colonne est occupé il faut repassé sur la première colonne pour placer notre nombre.
    En gros ce qui te permet de faire tes tests sont :
    *Vérifier que tu ne passe pas sur une ligne=0 et que la colonne est bien dans les limites
    *Vérifier que le nombre placé est multiple de la taille
    *Vérifier si la colonne est hors limite et que la ligne est remplissable
    *Dernier cas tout est bon on se pose pas de question on crée dans la position courante.

    Voila un algo parmi d'autres pour remplir le carré magique sachant que si la taille du carré est 3 par exemple tu feras un parcours en taille² c'est a dire 9

    La taille paire c'était de l'ironie
    Cordialement
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. construction d'un carré magique
    Par achta dans le forum Général Python
    Réponses: 3
    Dernier message: 07/05/2010, 18h05
  2. Construction Carré magique
    Par nianko dans le forum Débuter
    Réponses: 2
    Dernier message: 29/05/2008, 09h34
  3. [TP] Programme carré magique
    Par Henry22 dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 31/03/2007, 14h40
  4. probléme carré magique
    Par pipip dans le forum C
    Réponses: 4
    Dernier message: 29/11/2006, 18h23
  5. le carré magique
    Par mahis_ dans le forum C
    Réponses: 29
    Dernier message: 15/11/2006, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo