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

ActionScript 3 Discussion :

Pb avec les fonctions recursives


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut Pb avec les fonctions recursives
    Bonjour,

    Je suis entrain de developper une simulation de circuit electrique.
    J'essai de creer une fonction qui permet le branchement, par des cables, entre des prises (noeuds).

    les cables sont représenté par des fiches :
    fiche1 et fiche2 => cable1
    fiche3 et fiche4 => cable2
    ...

    Si je connecte le noeud1 à un noeud2, tous les noeuds lié a noeud1 doivent se connecter au noeud2 et tous les noeuds connecté au noeud2 doivent se connecter au noeud1.

    exemple :
    etape 1. je branche prise1 avec prise3 (par nimporte quel cable)
    etape 2. je branche prise3 avec prise5
    etape 3. je branche prise3 avec prise6

    avec ces etapes je dois avoir a la fin les prises 1,3,5,6 sont lié entre eux !

    j'ai pensé à faire une fonction récursive, voila le code :

    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
    function branche(fiche1:Number,fiche2:Number){
    	if (getEtat(fiche2)!=0 ) {
    		prise_1=getEtat(fiche1);
    		prise_2=getEtat(fiche2);		
    		InsertCable(prise_1,prise_2);		
    		trace("debut branchement:"+prise_1+"-"+prise_2);
     
    		for(i=1;i<=nbre_fiche;i++){				
    			trace("for"+i);
    				if( i!=fiche1 && i!=fiche2 ){					
    					if(getEtat(i)==prise_1){
    						ext=extremite(i);
    						branche(fiche2,ext);						
    					}
     
    					if(getEtat(i)==prise_2){
    						ext=extreme(i);
    						branche(fiche1,ext);						
    					}
    				}			
    		}			
    		trace("fin for");
    	} 	
    }
    fonction getEtat(fiche) : permet de donner le num de la prise à laquel la fiche est connecté.

    fonction extrimite(fiche) : permet de retourner le num de la fiche de lautre bout du cable.


    le problème c'est qu'il ya interruption de la boucle for.

    voila ce que j'obtient :

    etape1 :

    debut branchement:3-1
    for1
    for2
    for3
    for4
    for5
    for6
    for7
    for8
    finfor

    etape2:

    debut branchement:5-3
    for1
    for2
    for3
    for4
    debut branchement:5-1
    for1
    for2
    for3
    for4
    for5
    for6
    for7
    for8
    finfor
    finfor ( pb !!!!!!!)

    etape 3:

    debut branchement:6-3
    for1
    for2
    for3
    for4
    debut branchement:6-1
    for1
    for2
    for3
    for4
    for5
    for6
    for7
    for8
    finfor
    finfor ( pb !!!!!!!)


    là ou j'ai mis (pb !!!!!), il devait y avoir for5,for6,... mais la boucle for ne s'est pas terminé comme prévu.

    J'espère que vous pouvez m'aider sur ce coup. J'arrive pas a trouver l'origine du probleme.

    Merci davance.

  2. #2
    Membre chevronné Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Par défaut
    ajoute un trace nbre_fiche

    assure toi que ce dernier soit invariable

    verifie dans le cas contraire ta fonction te renvoyant nbre_fiche

    car techniquement c'est pas un probleme qui viens de i ce dernier ne pouvant pas etre modifier par pointeur au travers d'une autre fonction comme sa aurait pu etre le cas en c++.

    J'espere que sa t'aide

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut
    Citation Envoyé par IP-Fix Voir le message
    ajoute un trace nbre_fiche

    assure toi que ce dernier soit invariable

    verifie dans le cas contraire ta fonction te renvoyant nbre_fiche
    nbre_fiche est invariable. J'ai mis un trace(nbre_fiche) dans la boucle for, et il affiche toujour la meme valeur initiale (= 8 fiches) !

  4. #4
    Membre chevronné Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trace('debug : '+nbre_fiche+' '+i)
    a la fin de ta fonction c'est a dire apres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if( i!=fiche1 && i!=fiche2 ){					
    					if(getEtat(i)==prise_1){
    						ext=extremite(i);
    						branche(fiche2,ext);						
    					}
     
    					if(getEtat(i)==prise_2){
    						ext=extreme(i);
    						branche(fiche1,ext);						
    					}
    				}
    Car c'est les deux variable dont depend ta boucle for s'il y a aucun break ( ce qui semble etre le cas )

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut
    j'ai ajouté la ligne a la fin (juste avant la fin de la boucle for).
    J'ai effectué un premier branchement entre prise4 et prise1. Pas de pb pour le moment, voila le resultat :

    debut branchement:4-1
    debug : 8 1
    debug : 8 2
    debug : 8 3
    debug : 8 4
    debug : 8 5
    debug : 8 6
    debug : 8 7
    debug : 8 8

    j'ai ajouté un branchement prise4 et prise5, et par recursivité, le code doit faire le branchement 5-1. ça marche au début sauf a la fin, la valeur du compteur i a dépassé nbre_fiche=8 (condition de la boucle i<=nbre_fiche)

    debut branchement:5-4
    debug : 8 1
    debug : 8 2
    debug : 8 3
    debug : 8 4
    debug : 8 5
    debut branchement:5-1
    debug : 8 1
    debug : 8 2
    debug : 8 3
    debug : 8 4
    debug : 8 5
    debug : 8 6
    debug : 8 7
    debug : 8 8
    debug : 8 9

    je comprends pas pkoi ça dépasse 8.

  6. #6
    Membre chevronné Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Par défaut
    Pourquoiton i est pas déclarer dans la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i=1;i<=nbre_fiche;i++){
    alors que sa devrait etre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(var i=1;i<=nbre_fiche;i++){
    ??

    c'est pour ça qu'il y a un probleme , si tu as deja déclarer i dans ta class alors crée une variable j interne a la boucle plutot que de réutilisé i.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(var j=1;i<=nbre_fiche;j++){

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 03/05/2006, 01h24
  2. problème avec les fonctions MidStr et LeftStr
    Par timsah dans le forum C++Builder
    Réponses: 1
    Dernier message: 07/02/2006, 10h07
  3. Réponses: 2
    Dernier message: 10/05/2005, 10h58
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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