Le carré magique par fabien

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

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.