IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Boucle imbriquées ?


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 129
    Par défaut Boucle imbriquées ?
    Je cherche a faire une fonction qui renvoie dans l'ordre les produits de substitutions d'un produit qu'on lui envoie.

    Par exemple:
    Le produit NA a comme produits de substitutions les produits NB, NC, ND et NE
    Le produit NC a comme produits de substitutions les produits NB, NE, NF, NG et NI
    Le produit NF a comme produits de substitutions les produits NC, NH, NI et NJ
    Le produit NI a comme produits de substitutions les produits NL, NM et NN.
    Les produits NB, ND, NE,etc n'ont pas de substitu.

    Ce que je veux c'est qu'a chaque fois que la fonction trouve un subsitu elle aie vérifier si ce produit n'a pas lui aussi des produits de substitutions.

    Et donc la réponse dans mon exemple si l'on envoie NA a la fonction serait : NB (qui n'a pas de produit de subsitution on passe donc au produit de substitution suivant de NA), NC (qui lui a des substitu donc on les liste avant de continuer les autres subsituts de NA), (on passe le premier substitu de NC qui est B car il a déjà été listé) NE, NF(qui a des substitut donc on les liste avant de finir NC et ainsi de suite), NH, NI, NL, NM, NN, NJ, NG, ND...

    J'arrive a prendre les substituts si je connais jusqu'a quel degré je dois aller hors je ne le connais pas...

    Si quelqu'un peut m éclairer: un grand MERCI.

  2. #2
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Tu dois utiliser la récursivité, mais prends garde aux cycles, parce que dans ton système de substitus, tu as très probablement des cycles.

  3. #3
    Membre expérimenté Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    Salut,

    Je pense aussi que dans ton cas vaut mieux faire un algo récursif.
    Imaginons que ta fonction qui fait le calcul à comme signature ProduitSubs(Produit p, listeDeProduit lp)
    Le code de la fonction pourrai être de la forme suivante en pseudo algorithme(Vérifie l'algo avant de l'implémenter ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ListeProduit produits = rechercheSubstitutionProduit(p);
    Si produits vide alors ajouter p a la liste lp
    sinon
         pour chaque Produit ptmp de ta liste de produit
              Ajouter résultat de ProduitSubs(ptmp) dans la liste lp
         fin pour
    fin si
    Pour commencer le calcul tu passes à la fonction un produit et une liste vide.
    A la fin de ta fonction tu auras la liste des substituts de ton produit.
    Attention comme indiqué par davcha il ne faut pas avoir de cycle sinon le code boucle indéfiniment.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 129
    Par défaut
    Tout d'abbord merci pour votre intéret à mon problemes et vos réponses.

    Mais j'avoue que j'ai du mal... voici le code que j'ai fait suivant vos explications:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     public Stack GetMainSubstitutes(int iin){
    		    Stack AnswerStack = new Stack();
     
    	        //get main substitues
    	        Session session = HibernateUtil.getSessionFactory().openSession();
    			List result = null;
    			session.beginTransaction();
     
    			result  = session.createQuery("from ArtSub where iin= ?")
    			.setInteger(0,iin).list();
    			session.getTransaction().commit();
    			session.close();
     
    			if (result.size()>0) {
    			    for(int i=0; i<result.size(); i++){
    			        ArtSub as = (ArtSub)result.get(i);
    					AnswerStack.push(new Integer(as.getSub()));
    			    }
    			}	
    			return AnswerStack;
    	 }
     
    	public GetSubstitutes(int p, Stack lp) {
    	    Stack produits = GetMainSubstitutes(p);
    	    if(produits.empty()){
    	        lp.push(new Integer(p));
    	    }else{
    	        while(!produits.empty()){
    	            Integer iin2 = (Integer) produits.pop();
    	            lp.push(new Integer(GetSubstitutes(iin2,lp)));
    	        }
    	    }
    J'ai mal compris quelque chose?
    Et plus particulièrement, "Ajouter résultat de ProduitSubs(ptmp) dans la liste lp" le resultat de ProduitSubs c'est quoi? la liste lp??

  5. #5
    Membre expérimenté Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    J'ai fait l'algo un peu vite, c'était juste pour donner une idée.
    Si j'ai bien compris tes produits sont des entiers.
    J'écrirait la méthode getSubstitute de cette façons (vérifie la )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public void getSubstitutes(int p, Stack lp)
    {
    	Stack produits = getMainSubstitutes(p);
    	if (produits.empty())
    	{
    		//p n'a pas de substitue donc on l'ajoute à la pile
    		lp.push(new Integer(p));
    	}
    	else
    	{
    		while (!produits.empty())
    		{
    			Integer iin2 = (Integer) produits.pop();
    			getSubstitutes(iin2, lp);
    		}
    	}
    }
    Pourquoi utilise tu une pile au lieu d'une liste?
    Sinon par convention les noms de méthode commence par des minuscules.
    Autre conseil pour ta méthode getMainSubstitutes il faudrait mettre en place un système de cache pour éviter de faire à chaque fois une requête sur ta base de donnée.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 129
    Par défaut
    MErci

    tu conseillerais quel type de liste alors?

  7. #7
    Membre expérimenté Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    Je conseillerai une ArrayList.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. boucle imbriquée
    Par zhoom dans le forum C
    Réponses: 4
    Dernier message: 07/11/2005, 13h10
  3. [Débutant]Boucle imbriquée avec des bornes différentes
    Par Hayato dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/08/2005, 16h23
  4. Boucles imbriquées
    Par Immobilis dans le forum ASP
    Réponses: 28
    Dernier message: 14/01/2005, 13h17
  5. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo