Le carré magique par fabien

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 398 fois - Téléchargée 39 fois

Contenu du snippet

Aprés dix ans d'étude en algorithmie, je vous propose la solution.

Note: affichage dans "debug.print".

Source / Exemple :


Option Explicit
Option Base 1

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'                         Fabien le 4/12/02
'                        Le carré magique
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Sub main()

Dim Saisie As String
Dim PairImpair As Single
Dim ValCote As Integer
Dim NbrCaseTotal As Integer

Dim Affect As Integer

Dim i As Integer
Dim j As Integer
Dim z As Integer

Dim TabMagique() As Integer
Dim TabAffiche As String
Dim Resultligne As Integer
Dim ResultColonne As Integer
Dim x As Integer
    '+++++++++++++++++++++++
    '       Saisie
    '+++++++++++++++++++++++
    Let Saisie = InputBox("Rentrez le nombre de case de votre ", "Longueur")
    Do
        Do While Not IsNumeric(Saisie)
            Let Saisie = InputBox("Que des chiffre, pas de lettre!", "Erreur")
        Loop
        Let ValCote = CInt(Saisie)
        Let PairImpair = ValCote Mod 2
        If PairImpair = 0 _
            Then
                Let Saisie = InputBox(" le nombre de case de votre carré doit être impair", "Longueur")
            End If
    Loop Until PairImpair = 1
    '++++++++++++++++++++++++
    '  Init de "TabMagique"
    '++++++++++++++++++++++++
    ReDim TabMagique(ValCote, ValCote)
    Let NbrCaseTotal = ValCote * ValCote
    Let i = 1
    Let j = 1
    'remise à 0 de toutes les cases
    For i = 1 To ValCote
        For j = 1 To ValCote
            Let TabMagique(i, j) = 0
        Next j
    Next i
        Let i = 0
        Let j = 0
        'positionement du premier chiffre
        Let i = (ValCote + 1) / 2 'calcul de l'indice colonne
        Let j = ((ValCote + 1) / 2) - 1 ' calcul de l'indice ligne
        Let TabMagique(i, j) = 1
        Let Affect = 1
        '+++++++++++++++++++++++++++++++++++++++
        '            Calcul
        '+++++++++++++++++++++++++++++++++++++++
        For z = 2 To NbrCaseTotal ' je commence à 2 car j'ai déja placé le 1
            Let i = i + 1
            Let j = j - 1
            ' on sort à gauche
                If i < 1 _
                    Then
                        Let i = ValCote
                    Else
                End If
                'on sort à droite
                If i > ValCote _
                    Then
                        Let i = 1
                    Else
                End If
                'on sort dessus
                If j < 1 _
                    Then
                        Let j = ValCote
                    Else
                End If
                ' au cas ou il y est deja une valeur dans la case visée
                If TabMagique(i, j) > 0 _
                    Then
                        Let i = i - 1
                        Let j = j - 1
                        Do While i < 1 Or i > ValCote Or j < 1
                            'on sort à gauche
                            If i < 1 _
                                Then
                                    Let i = ValCote
                                Else
                            End If
                            'on sort à droite
                            If i > ValCote _
                                Then
                                    Let i = 1
                                Else
                            End If
                            'on sort dessus
                            If j < 1 _
                                Then
                                    Let j = ValCote
                                Else
                            End If
                        Loop
                    End If
                    ' affectation de la case
                    Let Affect = Affect + 1
                    Let TabMagique(i, j) = Affect
        Next z
        '+++++++++++++++++++++++++++++++++++++++
        '      Affichage
        '+++++++++++++++++++++++++++++++++++++++
        Debug.Print
        Debug.Print
            For j = 1 To ValCote
                Let TabAffiche = ""
                For i = 1 To ValCote
                    Let TabAffiche = TabAffiche + "|" + CStr(Format(TabMagique(i, j), String(5, "@"))) + "  "
                Next i
                Let i = 1
                Debug.Print TabAffiche
                Debug.Print String(ValCote * 8, "--")
            Next j
End Sub

Conclusion :


Version non final.(Beta 182.3.0)

A voir également

Ajouter un commentaire Commentaires
Messages postés
15
Date d'inscription
samedi 13 avril 2002
Statut
Membre
Dernière intervention
28 avril 2003

Version non final.(Beta 182.01)
exellent !!!

PairImpair = 30 Mod 16
c'est pour rien, c'etait un test à l'arracher pour autre chose. rien à voir avec ca
++
afpa powaaaaaa
Messages postés
49
Date d'inscription
vendredi 11 janvier 2002
Statut
Membre
Dernière intervention
20 juillet 2004

slt,
Nox >> met un Stop juste avant le End Sub de Sub Main() et regarde dans ton Immediate Window, tu verras le beau carré magique. C'est dans cette fenêtre qu'écrit la command Debug.Print <text as string>
Afpa >> j'suis pas sur que ca marche. J'ai eu ça comme résultat :

Carré magique de 3 de coté.

| 8 | 1 | 6
------------------------
| 3 | 5 | 7
------------------------
| 4 | 9 | 2
------------------------
14

Carré magique de 5 de coté.

| 23 | 6 | 19 | 2 | 15
----------------------------------------
| 10 | 18 | 1 | 14 | 22
----------------------------------------
| 17 | 5 | 13 | 21 | 9
----------------------------------------
| 4 | 12 | 25 | 8 | 16
----------------------------------------
| 11 | 24 | 7 | 20 | 3
----------------------------------------
14

Il me semblait qu'en diagonale on saute une case, et en vertical ou horizontal, on saute 2 cases ... mais j'ai peut-être pas les bonnes règles ??
Et ca sert à quoi PairImpair = 30 Mod 16 à la fin, vu que ca fait toujours 14 ??
Messages postés
415
Date d'inscription
mardi 3 avril 2001
Statut
Membre
Dernière intervention
26 avril 2008

je comprend pas kess sa fait...
je lai mis dans un module, sa me demande un nombre impair et sa quite
Messages postés
415
Date d'inscription
mardi 3 avril 2001
Statut
Membre
Dernière intervention
26 avril 2008

ak un zip sa srait bien

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.