Aller au contenu

Programmation Java/Générer un carré magique

Un livre de Wikilivres.

Ce programme permet de générer des carrés magiques d'ordre impair.

import java.io.*; /* Nom : Carre.java Rôle : Construction d'un carré magique d'ordre impair. Compilation : javac Carre.java Exécution : java Carre.java <ordre> avec <ordre> : entier impair > 1 Résultat : dans un fichier texte nommé carre_ordre.txt */ public class Carre { public static void main(String args[]) throws Exception { int ordre, ligne, colonne; int maxValue = (int)Math.sqrt((double)Integer.MAX_VALUE);  System.out.println("Début du programme."); // test du paramètre obligatoire : > 1 et impair if (args == null || args.length == 0) { System.out.println("Usage : java Carre <ordre>\n"+ "\tavec <ordre> : entier > 1 et impair."); System.exit(1) ; } ordre = Integer.parseInt(args[0]); if (ordre <= 1 || (ordre%2) == 0 || ordre > maxValue ) { System.out.println(ordre + " n'est pas impair ou n'est pas supérieur a 1" +  " ou est trop grand : > " + maxValue) ; System.exit(1) ; } System.out.println("Le paramètre " + ordre + " est correct : > 1 et impair");  // Création du tableau int carre[][] = new int[ordre][ordre] ;  System.out.println("Début du calcul"); // Rangement 1er nombre n au milieu de la première ligne // Puis rangement des autres nombres. ligne = 0 ; colonne = ordre/2 ; for (int n=1; n<=(ordre*ordre); n++) { // Écriture dans le tableau dans la case calculée carre[ligne][colonne] = n ; // Détermination de la position de la prochaine case à écrire if ((n%ordre) == 0) { // Si débordement à gauche du tableau // Écriture dans la case sous le dernier nombre ligne++ ; } else { // Écriture dans la case en haut à gauche ligne = ((ligne == 0) ? ordre-1 : ligne-1); colonne = ((colonne == 0) ? ordre-1 : colonne-1); } } // for (int n=1; n<=ordre*ordre; n++) int sommeMagique = ordre * ( ordre * ordre + 1) / 2; // Création du fichier résultat String nomFic = "carre_" + ordre + ".txt"; System.out.println("Fin du calcul, écriture du fichier "+ nomFic + "..."); PrintWriter hFic = new PrintWriter(new BufferedWriter(new FileWriter(nomFic))); // Impression du tableau hFic.println("Carre magique d'ordre " + ordre); for (ligne=0; ligne<ordre; ligne++) { for (colonne=0; colonne<ordre; colonne++) { hFic.print(carre[ligne][colonne] + " "); } hFic.println("") ; } hFic.println("La somme magique est " + sommeMagique); hFic.close(); System.out.println("fin écriture, programme terminé."); } // public static void main(String args[]) } // public class Carre