PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → Hors-sujet → CARRE MAGIQUE
CARRE MAGIQUE
Débuté par philippe pasquali, 26 juil. 2006 15:36 - 3 réponses
Posté le 26 juillet 2006 - 15:36
Juste pour les vacances et comme quoi Windev peut faire des trucs inutiles,
voici une fonction permettant de créer un CARRE MAGIQUE d'ordre impaire
oui je sais c'est strictement inutile mais bon, sous cette chaleur que faire
d'autre..........quant on est pas en vacances

PS
Si quelqu'un à une méthode pour l'ordre pair j'suis curieux de nature

// Syntaxe :
//[ <Résultat> = ] CalculCm (<pOrdre>)
//
// Paramètres :
// pOrdre : nombre de case du carré magique en ligne ou colonne 3x3 5x5...
199x199
// ce systéme ne fonctionne que pour les carré d'ordre impaire
3,5,7,...
// J'ai testé jusqu'a Ordre = 199 mais ca doit fonctionner pour plus... a
voir
// Valeur de retour :
// chaîne : Le carré magique sous forme...
// N11 tab N12 tab N13 tab N14 tab N15 crlf
// N21 tab N22 tab N23 tab N24 tab N25 crlf
// N31 tab N32 tab N33 tab N34 tab N35 crlf
// N41 tab N42 tab N43 tab N44 tab N45 crlf
// N51 tab N52 tab N53 tab N54 tab N55 crlf

FUNCTION CalculCm(pOrdre)
Delta, i, j, N, Ligne, Colonne, StartLigne, StartColonne, Ordre sont des
entier
CM est un tableau dynamique
LigneDuCM, TblCM sont des chaînes

Ordre = pOrdre

IF modulo(Ordre,2)=0 THEN RENVOYER "" // ne fonctionne que pour pOrdre
impaire

Delta = PartieEntière(Ordre/2)
N = Ordre + (Delta*2)
CM = allouer un tableau dynamique de N par N entiers

// Maintenant, il faut le remplir

// On rempli le tableau
StartLigne = 1
StartColonne = (N+1)/2
Ligne = StartLigne
Colonne = StartColonne
i=1
WHILE i<=Ordre*Ordre
CM[Ligne,Colonne] = i
i++
Ligne++
Colonne++
IF modulo(i-1,Ordre)=0 THEN
StartLigne++
Ligne = StartLigne
StartColonne--
Colonne = StartColonne
END

END
FOR Ligne = 1 TO Delta
FOR Colonne=1 TO N
IF CM[Ligne+Ordre,Colonne] = 0 THEN
CM[Ligne+Ordre,Colonne] = CM[Ligne,Colonne]
CM[Ligne,Colonne] = 0
END
END
END
FOR Ligne = Delta+Ordre+1 TO N
FOR Colonne=1 TO N
IF CM[Ligne-Ordre,Colonne] = 0 THEN
CM[Ligne-Ordre,Colonne] = CM[Ligne,Colonne]
CM[Ligne,Colonne] = 0
END
END
END
FOR Ligne=1 TO N
FOR Colonne =1 TO Delta
IF CM[Ligne, Colonne+Ordre] = 0 THEN
CM[Ligne, Colonne+Ordre] = CM[Ligne,Colonne]
CM[Ligne,Colonne] = 0
END
END
END
FOR Ligne=1 TO N
FOR Colonne = Delta+Ordre+1 TO N
IF CM[Ligne,Colonne-Ordre] = 0 THEN
CM[Ligne,Colonne-Ordre] = CM[Ligne,Colonne]
CM[Ligne,Colonne] = 0
END
END
END

// C'est fini on purge
TblCM = ""
FOR i=Delta+1 TO N-Delta
LigneDuCM = ""
FOR j=Delta+1 TO N-Delta
IF LigneDuCM <> "" THEN LigneDuCM += TAB
LigneDuCM += NumériqueVersChaine(CM[i,j])
END
TblCM += LigneDuCM +CRLF
END

libérer CM

RENVOYER TblCM
Posté le 22 août 2006 - 10:14
Salut,

Après mon retour de vacances, j'ai lu ton post concernant le carré magique impair. Cela m'a rappellé mes études ou nous avions à réaliser le même programme en pascal et Fortran.

Malheureusement, il paraitrait qu'il n'y a pas d'algoritme pour le carré magique pair.

@+, JF
Posté le 22 août 2006 - 12:46
Salut
j'suis pas si sur.... j'en aurais trouvé un, mais en ce moment plus trop le
temps de tester même si c'est avec Windev

PS
Pas trop dur le retour...

"Jean-François Marschall" <jean-francois@marschall.lu> a écrit dans le
message de news: 44ea99e2$1@news.pcsoft.fr...

Salut,

Après mon retour de vacances, j'ai lu ton post concernant le carré magique
impair. Cela m'a rappellé mes études ou nous avions à réaliser le même
programme en pascal et Fortran.

Malheureusement, il paraitrait qu'il n'y a pas d'algoritme pour le carré
magique pair.

@+, JF

Posté le 23 août 2006 - 08:58
Salut,

Si tu as vraiement trouvé un algo pour les carrés magique pair qui marche, je suis intéressé.

PS: Concernant le retour, c'est toujours trop dur, mais on est vite réassorbé par le quotidien.

@ , JF