Carré magique d'ordre pair sous applet java

Contenu du snippet

ce code source explique comment calculer le carré magique d'un nombre paire en utilisant les applet java

Source / Exemple :


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class FirstApplet extends JApplet {

	private JLabel label = new JLabel();
	private JTextField numero_entre=new JTextField();
	private JLabel labelt_result = new JLabel("le total des lignes s'affiche ici");
	private JButton bouton = new JButton("Calculer");
	private JTextArea resultat_trouve=new JTextArea();
	private int count = 0;
	/**

  • Méthode d'initialisation de l'applet
  • C'est cette méthode qui fait office de constructeur
  • /
public void init(){ this.setSize(400, 400); this.setLayout(new BorderLayout()); resultat_trouve.setSize(400, 400); //this.add(labelt_result); //On centre le texte du JLabel et on écrit en bleu... // label.setHorizontalAlignment(JLabel.CENTER); label.setLocation(40, 20); //numero_entre.setHorizontalAlignment(JTextField.CENTER); numero_entre.setText("numero de colone ??"); label.setText("entrer le numero de colone et cliquer sur calculer"); resultat_trouve.setRows(1); //C'est plus zoli. label.setForeground(Color.blue); // numero_entre.setText("entrez le numero de cologne du carré magique"); //Allez, une classe anonyme... Just for the fun ;) this.bouton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { // label.setText("Vous avez cliqué " + (++count) + " fois sur le bouton"); int valeur_lecture; int x[][]; int total = 0; try{ valeur_lecture=Integer.parseInt(resultat_trouve.getText()); if ((valeur_lecture <= 0) || (valeur_lecture % 2 != 0)){ JOptionPane.showMessageDialog(null,"Taille impossible, entrer un nombre pair"); }else{ // JOptionPane.showMessageDialog(null,"Valeur accéptée."); x= cPair(valeur_lecture); //imprimer(x); int taille=x.length; float floay; floay=Float.parseFloat("0.5"); resultat_trouve.setText(null); resultat_trouve.setAlignmentX(floay); resultat_trouve.setRows(taille); for(int ii=0;ii<taille;ii++){ total=0; for (int jj=0;jj<taille;jj++){ //jTextArea1.setText(jTextArea1.getText()+) ; //JOptionPane.showMessageDialog(null, x[ii][jj]); resultat_trouve.setText(resultat_trouve.getText()+(x[ii][jj])); if (x[ii][jj]>99){ resultat_trouve.setText(resultat_trouve.getText()+" "); }else if ((x[ii][jj]>9)){ resultat_trouve.setText(resultat_trouve.getText()+" "); }else if ((x[ii][jj]<10)){ resultat_trouve.setText(resultat_trouve.getText()+" "); } total=total+x[ii][jj]; } resultat_trouve.setText(resultat_trouve.getText()+"\n"); } // jTextField1.setText(total); //JOptionPane.showMessageDialog(null, total); label.setText("le total des lignes est de :"+String.valueOf(total)) ; } } catch (Exception e){ JOptionPane.showMessageDialog(null,"Vous devez entrer un entier."); } } }); //On ajoute nos composants //this.getContentPane().add(bouton, BorderLayout.SOUTH); //'this.getContentPane().add(resultat_trouve, nulll.SOUTH); this.getContentPane().add(label, BorderLayout.NORTH); this.getContentPane().add(resultat_trouve, BorderLayout.CENTER); this.getContentPane().add(bouton, BorderLayout.SOUTH); //Et le tour est joué ! } static int [][] cImpair(int n) { int c[][]=new int [n][n]; int i,j,k,m,v; i=1; j=n/2-1; for(v=0, m=0; m<n; m++) { for(k=0; k<n; k++) { // -1 en ligne, +1 en colonne i=(i==0)?n-1:i-1; j=(j==n-1)?0:j+1; c[i][j]=++v; } // Avant la collision i+=2; if(i>=n) i=i-n; j=(j==0)?n-1:j-1; } return c; } static int [][] cPair(int n) { // utilise: // la constante c4 // les méthodes: cPAir, cImpair, complement, isoLiDi, symetrieLigne // if(n<6) { return c4;} // ta, tb, tc, td sontdes carrés d'ordre n/2 // ta ne contient que des 0 et des 3; ta et tc sont complémentaires // tb ne contient que des 1 et des 2; tb et td sont complémentaires // cm est un carré magique d'ordre n/2; cn est symétrique-ligne de cm // Le carré est | ta tb | | ca cm | // (n/2)^2 * | | + | | // | tc td | | cs cs | int nn=n/2, n2=nn*nn; int ta[][], tc[][]; int tb[][], td[][], tt[][]; tb = new int[nn][nn]; tc = new int[nn][nn]; tc = new int[nn][nn]; // m2=nb.de 2 par ligne dans tb; m1= nb.de 1 dans tb // m3=nombre de 3 par ligne dans ta; // à vérifier: 3*m3+m2 = nn // Générer ta et tc int m3=nn/2, d3=nn-m3; ta = isoLiDi(m3,d3,nn,3,0); tc = complement(ta,nn,3); // Générer tb et td int m2=2*nn-3*m3,m1=nn-m2; // dans tb m2=nn-m2;m1=nn-m1; // dans td int d2=nn-m2,d1=nn-d2; td = isoLiDi(m1,d2,nn,1,2); tb = complement(td,nn,3); // Un carré magique,et son "symétrique ligne" int cm[][], cc[][]; if(nn%2==0) cm=cPair(nn); else cm=cImpair(nn); int cs[][] = symetrieLigne(cm,nn); // Carré complet int i,ip,j,jp, c[][] = new int [n][n]; for(tt=ta, cc=cm, ip= 0, jp= 0, i=0; i<nn; i++) for(j=0; j<nn; j++) c[i+ip][j+jp]=tt[i][j]*n2+cc[i][j]; for(tt=tb, cc=cm, ip= 0, jp=nn, i=0; i<nn; i++) for(j=0; j<nn; j++) c[i+ip][j+jp]=tt[i][j]*n2+cc[i][j]; for(tt=tc, cc=cs, ip=nn, jp= 0, i=0; i<nn; i++) for(j=0; j<nn; j++) c[i+ip][j+jp]=tt[i][j]*n2+cc[i][j]; for(tt=td, cc=cs,ip=nn, jp=nn, i=0; i<nn; i++) for(j=0; j<nn; j++) c[i+ip][j+jp]=tt[i][j]*n2+cc[i][j]; return c; } static int[][] isoLiDi( int p, int q, int n, int vp,int va) { // Construction de matrice en 0/1 contenant p fois vp par ligne // et q fois vp sur la diagonale principale // les autres elements contiennent va // Le matrice construite est symétrique par rapport au point n/2,n/2: // t[i][j] == t[n-1-i][n-1-j] // CONDITION: (0<p<n && 0<=q<=n) || (p==0 && q<n) || (p==n && q==n) int t[][] = new int[n][n]; int i,iip1,j,md, ml; // p fois vp et n-p fois va par ligne ou diag.princ // iip1 vaut 0 ou 1 suivant qu'on place vp sur la diagonale ou non // md nombre de vp sur la diagonale; ml nombre de vp par ligne for(i=0, md=0; i<n; i++) { iip1=0; if(md<q) md++; else iip1=1; // p fois vp à partir de [i][i] ou [i][i+1] for(ml=0,j=i+iip1; ml<p; ml++,j++) { if(j>=n) j-=n; t[i][j]=vp; } // va pour les autres positions de la ligne i for( ; ml<n; ml++,j++) { if(j>=n) j-=n; t[i][j]=va; } } return t; } static int[][] complement( int a[][], int n, int vc) { // Construit le complément du carré a // c est rempli de haut en bas d'après les lignes de a, utilisées // de bas en haut // si a[i][j]==v, alors c[n-1-i][j]==vc-v int i,j,ii, c[][] = new int[n][n]; // c est rempli de haut en bas; les lignes de a de bas en haut for(i=0, ii=n-1; i<n; i++, ii--) { // ligne i de c: échange v1 <--> v2 par rapport à ligne ii de a for(j=0; j<n; j++) c[i][j] = vc-a[ii][j]; } return c; } static int[][] symetrieLigne(int a[][], int n) { int i,j, c[][] = new int[n][n]; for(i=0; i<n; i++) { // ligne i de cs = ligne symétrique de cm for(j=0; j<n; j++) c[i][j] = a[n-1-i][j]; } return c; } static void imprimer(int x[][]){ int taille=x.length; System.out.println(taille); for(int ii=0;ii<taille;ii++){ for (int jj=0;jj<taille;jj++){ System.out.print(x[ii][jj]); if (x[ii][jj]>99){ System.out.print(" "); }else if ((x[ii][jj]>9)){ System.out.print(" "); }else { System.out.print(" ");} } System.out.println(); } } }

Conclusion :


a fin de tester cette applet il faut creer une page html quit doit etre dans le meme répertoire que la claase FirsteApplet dont le code est :

<html>

<body style="margin:auto;">

<div style="width:320px;margin:auto;margin-top:100px;border:5px solid black">
<applet code="FirstApplet.class" height="400" width="400" hspace="10" vspace="10">
<param name="message" value="carré magique d'ordre pair">
</applet>
</div>

</body>
</html>

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.