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 |