Forum debian-fr.org

Rechercher:

* Connexion   * M’enregistrer

* FAQ    * Rechercher





Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 
Auteur Message
 Sujet du message: infâme GOTO en JAVA
MessagePosté: 12 Nov 2011 22:29 
Hors ligne
Très bavard(e)!

Inscription: 05 Mai 2009 22:47
Messages: 360
Localisation: Rethel
Bonjour,
je voudrais coder l'organigramme ci-joint en JAVA. Je suis arrivé à l'idée de créer trois boucles while (symbolisées par les pointillés) repérées par trois étiquettes sur lesquelles viendraient se brancher des break.
La démarche me semble quelque peu artificielle, cela vient-il forcément d'une mauvaise conception ?


Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

_________________
2.6.32-5-amd64 Gnome 2.30.2 asus K50IJ SX264V


Haut
 Profil  
 
 Sujet du message: Re: infâme GOTO en JAVA
MessagePosté: 13 Nov 2011 00:07 
Hors ligne
Modérateur du forum
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 6889
Localisation: Grenoble
Woaw ! Je vois pas de moyen de coder ça proprement par contre il me semble qu'il pourrait être écris de manière propre si tu voyais ça comme un automate à état fini.

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
 Sujet du message: Re: infâme GOTO en JAVA
MessagePosté: 22 Nov 2011 20:30 
Hors ligne
Très bavard(e)!
Avatar de l’utilisateur

Inscription: 30 Aoû 2008 18:33
Messages: 359
Localisation: fr
Bonjour,

Je ne comprends pas le schéma, peut-être que si tu postes le code java j'aurais une idée.

_________________
Acheter des jeux vidéos OpenGL, c'est un grand pas pour le Libre.
programming and algorithms & ethalamus & debian gnu/hurd


Haut
 Profil  
 
 Sujet du message: Re: infâme GOTO en JAVA
MessagePosté: 12 Déc 2011 03:27 
Hors ligne
Très bavard(e)!

Inscription: 05 Mai 2009 22:47
Messages: 360
Localisation: Rethel
voilà le code qui marche presque (l'organigramme a un peu changé)
la méthode 'place' refuse simplement que l'on mette la pièce 3 à l'emplacement 2 (pour l'instant), et la 15 en 14.
J'ai bien galéré car j'ai tardé à mettre l'étiquette 'titi', je la croyais inutile. Est-ce parce que continue se trouve dans une boucle for ?
Le 'continue' sans 'titi' est-il considéré comme 'continue la boucle for' ? Il semblerait.
Code:
package pac;


public class dh

{
public static void main(String[] args)
   {
   int [][] resol = new int [18][2]; // contient n° pièce et orientation
   int min [] = {1,1,1,1,1,1,7,7,7,7,7,7,7,7,7,7,7,7};
   int max [] = {6,6,6,6,6,6,18,18,18,18,18,18,18,18,18,18,18,18};
   resol[0][0]=1; resol[0][1]=1;
   int e = 0 ;

   gen : while (e >= 0 && e < 18 )
      {      
      resol[e][1] = matrice.place (e,resol[e][0],resol[e][1]);
      
      if (resol[e][1]<9)
         {
         if (e==17) { System.out.println ("OK"); break;}
         e++;
         
            {resol[e][0] = min [e]; resol [e][1] = 0 ;
            titi : while (true)
               {
               for (int j = (min [e]-1); j < e ; j++){if (resol[e][0] == resol[j][0]){ resol[e][0]++;continue titi;}}
               break;
               }
            }
         }
      else
         {
         toto : while (true)
            {resol[e][0]++;
            if (resol[e][0]>max[e])
               {
               if (e == 0) {System.out.println ("impossible");break gen;}
               e--; resol[e][1]++; break;
               }
            for (int j = min [e]-1; j < e; j++)   {if (resol[e][0] == resol[j][0]) continue toto;}
            break;
            }
         }

      }
         


      
   for (int d=0 ; d<18 ; d++) System.out.println ("empl "+d+" pièce "+resol[d][0]+" pos "+resol[d][1]);
      
      }
}

donne en console
Code:
OK
empl 0 pièce 1 pos 1
empl 1 pièce 2 pos 1
empl 2 pièce 4 pos 1
empl 3 pièce 3 pos 1
empl 4 pièce 5 pos 1
empl 5 pièce 6 pos 1
empl 6 pièce 7 pos 1
empl 7 pièce 8 pos 1
empl 8 pièce 9 pos 1
empl 9 pièce 10 pos 1
empl 10 pièce 11 pos 1
empl 11 pièce 12 pos 1
empl 12 pièce 13 pos 1
empl 13 pièce 14 pos 1
empl 14 pièce 16 pos 1
empl 15 pièce 15 pos 1
empl 16 pièce 17 pos 1
empl 17 pièce 18 pos 1


Qu'en pensez-vous ?

nb : c'est la classe matrice qui s'occupe maintenant de tourner la pièce jusqu'à pouvoir la placer. Ou non.

_________________
2.6.32-5-amd64 Gnome 2.30.2 asus K50IJ SX264V


Haut
 Profil  
 
 Sujet du message: Re: infâme GOTO en JAVA
MessagePosté: 13 Déc 2011 16:47 
Hors ligne
Administrateur du forum
Avatar de l’utilisateur

Inscription: 17 Fév 2006 12:20
Messages: 15345
Localisation: Ile de France
Ben même avec des goto, je vois des variables et des étiquettes non explicites, donne des noms clairs à tes variables ou bien décris un peu mieux ce que fait ton algorithme. En tout cas, tel que c'est quasi incompréhensible quand on ne connaît pas le problème. Tu nous parles de pièces, de places et de retournement, on (moi en tout cas) ne pige rien.

_________________
Debian Squeeze amd64 Linux version 2.6.30-1
Le Dell 1525N a pété après 19 mois, Toshiba A500D Intel Core 2 Duo 4G RAM
Carte Nvidia, XFCE avec compiz (ben si...)

2 mains de 5 doigts chacune, une tête plus options usuelles


Haut
 Profil  
 
 Sujet du message: Re: infâme GOTO en JAVA
MessagePosté: 13 Déc 2011 17:20 
Hors ligne
Modérateur du forum
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 6889
Localisation: Grenoble
J'ai regardé vite fait (en indentant parce que sinon c'est illisible).
Et pour cette partie :
Code:
while (true) {
    for (int j = (min [e]-1); j < e ; j++){
        if (resol[e][0] == resol[j][0]) {
            resol[e][0]++;
            continue titi;
        }
    }
    break;
}

ça devrait pouvoir se remplacer par :
Code:
int j;
do {
    for (j = (min [e]-1); j < e ; j++){
        if (resol[e][0] == resol[j][0]) {
            resol[e][0]++;
            break;
        }
    }
} while(j < e);

ça permet déjà de virer une étiquette et un goto (même si ce n'est pas très très propre).

Pour rire une solution sale serait :
Code:
for (int j = (min [e]-1); j < e ; j++){
    if (resol[e][0] == resol[j][0]) {
        resol[e][0]++;
        j = (min [e]-1)-1; // c'est vraiment pas génial de modifier ainsi j
    }
}

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
 Sujet du message: Re: infâme GOTO en JAVA
MessagePosté: 13 Déc 2011 17:25 
Hors ligne
Modérateur du forum
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 6889
Localisation: Grenoble
Voici la version indentée : http://pastebin.com/Kv9jfKhx

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
 Sujet du message: Re: infâme GOTO en JAVA
MessagePosté: 13 Déc 2011 19:26 
Hors ligne
Modérateur du forum
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 6889
Localisation: Grenoble
Allez pour virer le toto, tu devrais pouvoir remplacer ça :
Code:
toto:
while (true) {
   resol[e][0]++;
    if (resol[e][0]>max[e]) {
      if (e == 0) {
         System.out.println ("impossible");
         break gen;
        }
        e--;
        resol[e][1]++;
        break;
   }
    for (int j = min [e]-1; j < e; j++) {
      if (resol[e][0] == resol[j][0]) continue toto;
    }
    break;
}

par :
Code:
do {
   resol[e][0]++;
    if (resol[e][0]>max[e]) {
      if (e == 0) {
         System.out.println ("impossible");
         break gen;
        }
        e--;
        resol[e][1]++;
        break;
   }
} while(test(resol, min, e));

private boolean test(final int [][] resol, final int [] min, final int e) {
   boolean ret = false;
   for (int j = min [e]-1; j < e; j++) {
      if (resol[e][0] == resol[j][0]) {
         ret = true;
      }
   }
   return ret;
}

Mais je suis d'avis que remplacer des variables pars des attributs serais une bonne idée.

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
 Sujet du message: Re: infâme GOTO en JAVA
MessagePosté: 24 Déc 2011 01:21 
Hors ligne
Très bavard(e)!

Inscription: 05 Mai 2009 22:47
Messages: 360
Localisation: Rethel
Ca y est, le programme trouve la solution. (fichier joint)
Il s'agit d'une masturbation intellectuelle qui me permet de trouver la solution d'un casse-tête.
Je place des pièces jusqu'à ce que ça coince, j'enlève alors pour placer autrement. Il met 2 min pour trouver
Code:
OK
empl 0 pièce 0 pos 4
empl 1 pièce 2 pos 3
empl 2 pièce 3 pos 2
empl 3 pièce 4 pos 6
empl 4 pièce 1 pos 3
empl 5 pièce 5 pos 8
empl 6 pièce 12 pos 1
empl 7 pièce 17 pos 6
empl 8 pièce 10 pos 8
empl 9 pièce 7 pos 1
empl 10 pièce 16 pos 3
empl 11 pièce 9 pos 1
empl 12 pièce 13 pos 7
empl 13 pièce 15 pos 1
empl 14 pièce 8 pos 4
empl 15 pièce 14 pos 4
empl 16 pièce 11 pos 5
empl 17 pièce 6 pos 1


Il ne me reste plus qu'à modifier comme tu me l'as indiqué pour les branchements.
J'aimerais aussi qu'il me dise l'ordre de montage parce que le résultat est assez difficile à transposer.
L'idéal, un petit visuel en Swing ...


Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

_________________
2.6.32-5-amd64 Gnome 2.30.2 asus K50IJ SX264V


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 

Index du forum » Divers » Programmation


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Aller à:  
Flux RSS Flux RSS Liste des flux Liste des flux
Powered by phpBB® Forum Software © phpBB Group
Traduction par: phpBB-fr.com
SEO
[ Time : 0.123s | 11 Queries | GZIP : Off ]