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

MATLAB Discussion :

Quitter une double boucle while


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Quitter une double boucle while
    Bonjour.
    Dans un programme d'optimisation, il se trouve que je suis obligée d'imbriquer deux boucles while l'une dans l'autre.
    Rencontrant des problèmes de boucles infinies, j'ai décidé de m'amuser avec tic toc. Sauf que je n'arrive pas à quitter les deux boucles while.
    La hiérarchie de mon programme est du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    tic (déjà déclenché dans un programme appelant cette fonction)
    tps=toc;   (comme ça on récupère le tps au début de ce programme)
    if (respect des hypothèses)
    ...
    else
       while (non condition1)||(non condition2)
          while(non condition1)
             blablabla
          end
          if (non condition2)
             blabla
          end
       end
    end
    Mon idée était de mettre, dans le deuxième while (c'est lui qui tourne infiniment)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (toc>tps+10)
       SORTIR DE LA PREMIERE BOUCLE WHILE
    else
       blablabla
    end
    sauf que dans ce cas, on ne sort pas du deuxième while, et on a des fenêtres d'erreur qui s'affichent une infinité de fois (parce que j'ai mis un errordlg. Le problème étant que cette fonction doit nous retourner une valeur, et quand il dépasse un temps de 10sec on veut tout court-circuité.
    Une idée?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir et bienvenue sur le forum,

    Pour sortir de la 2ème boucle while, un break suffit
    Ensuite en mettant la même condition dans le premier while, tu pourras en sortir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while (toc>tps+10) && (autres conditions)
        while (...)
            if (toc>tps+10) 
                break
            else
                ...
            end
        end
    end
    Ou d'une manière plus générale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    flag = false;
    while (~flag) && (autres conditions)
        while (...)
            if (condition de sortie) 
                flag = true;
                break
            else
                ...
            end
        end
    end

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour, merci de ton aide.

    SI j'utilise le premier code que tu me propose, l'erreur tourne en boucle. Pcq avant le break j'ai une fenetre errordlg qui s'affiche. Donc quand le temps est dépassé elle s'affiche, et la première boucle while continue, et l'erreordlg s'affiche une infinité de fois, et mon main.m plante.
    Et si on rajoute la condition du toc dans la première boucle while, le programme va retourner la dernière valeur qu'il avait trouvé, avant de dépasser le temps. Et cette valeur n'est pas correcte, donc cette technique ne peut pas marcher.. (mes programmes sont assez compliqué, donc pas facil à expliquer)
    J'ai résolu mon problème tout simplement en relançant mon main après avoir fait apparaitre la fenètre d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while (...)
        while (...)
            if (toc>tps+10) 
                errordsl('...');
                main;
            else
                ...
            end
        end
    end
    Merci de ton idée =)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il te faut rajouter un uiwait comme ceci uiwait(errordlg(...)); afin d'attendre que l'utilisateur appuis sur le bouton OK avant de continuer le code.
    Ensuite je ne vois pas de break à la fin de ton if, qui te fait sortir de la boucle dans laquelle il est.

Discussions similaires

  1. [PHP 5.3] Soucis avec le résultat d'une requête (double boucles while)
    Par beegees dans le forum Langage
    Réponses: 7
    Dernier message: 31/05/2010, 23h26
  2. [PHP 5.3] Double boucles while, problème d'accès au données de la première
    Par beegees dans le forum Langage
    Réponses: 3
    Dernier message: 09/11/2009, 09h44
  3. [PIL] temps perdu sur une double boucle
    Par graminou dans le forum Calcul scientifique
    Réponses: 10
    Dernier message: 08/12/2008, 14h27
  4. Portée d une variable (boucle while)
    Par racoboss dans le forum Langage
    Réponses: 4
    Dernier message: 11/12/2007, 10h37
  5. Sortir d'une double boucle FOR-END
    Par azboul dans le forum MATLAB
    Réponses: 4
    Dernier message: 05/12/2007, 12h07

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