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

Langage Delphi Discussion :

sortir d'une boucle spécifique dans boucles imbriquées


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut sortir d'une boucle spécifique dans boucles imbriquées
    Bonjour,

    Dans les boucles suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for i:= 0 to A.Count-1 do
      for j:= 0 to B.Count-1 do
        for k:= 0 to C.Count -1 do
        begin
           if True then
           begin
              // fait quelquechose
             break;
           end;
        end;
    Dans cet exemple le break interrompt la dernière boucle soit la boucle k.
    Comment faire pour que ce soit la première boucle (boucle i) qui soit interrompue ?

    Une réponse rapide serait la bienvenue.

    A+

    Colorid

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Comme dirait un de mes collèges de travail en voyant un break dans un for : ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh !!!

    Pourquoi n'utilises tu pas plutôt des while ou repeat ?

    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
     
    Var 
      i,j,k : Integer;
      bNotEnd : Boolean;
    begin
      i := 0;
      j := 0;
      k := 0;
     bNotEnd  := True;
      while (i <= A.Count -1) and bNotEnd do
      begin
        While (j <= B.Count -1) and bNotEnd do
        begin
          While (k <= C.Count -1) and bNotEnd do
          begin
            if True then
              bNotEnd := False;
            inc(k);
          end;
          inc(j);
        end; // while j
        inc(i);
      end;// while i
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Excellente solution
    Ok et mille merci

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 745
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    Et pourquoi pas de Break dans une boucle

    Sinon, ceci irait aussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try
      for i:= 0 to A.Count-1 do
        for j:= 0 to B.Count-1 do
          for k:= 0 to C.Count -1 do
          begin
             if True then
             begin
                // fait quelquechose
               Exit;
             end;
          end;
    finally
      //Suite du code
    end;

  5. #5
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    Dans le même genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var
      i,j ,k : integer;
    label suite;
    begin
      for i := 0 to 1000 do
        for j := 0 to 1000 do
          for k := 0 to 1000 do
          begin
            if true
            then goto suite;
          end;
    suite: // La suite du code.
    end;
    Et on peut sauter pour sortir de n'importe quelle boucle et remonter dans celle qu'on veut...
    Je crois que c'est un des rares cas où le goto peut encore avoir une utilité aujourd'hui.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Génial
    Car on peut retourner à n'importe quel niveau de boucle imbriquée !
    Bravo et merci

  7. #7
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Et pourquoi pas de Break dans une boucle

    Sinon, ceci irait aussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try
      for i:= 0 to A.Count-1 do
        for j:= 0 to B.Count-1 do
          for k:= 0 to C.Count -1 do
          begin
             if True then
             begin
                // fait quelquechose
               Exit;
             end;
          end;
    finally
      //Suite du code
    end;
    meme chose avec Abort

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 745
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    Citation Envoyé par Montor Voir le message
    meme chose avec Abort
    Ah non ! Abort va nous faire remonter jusqu'à ce que l'exception (Abort) soit gérée

  9. #9
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Ah non ! Abort va nous faire remonter jusqu'à ce que l'exception (Abort) soit gérée
    Si, il suffit de remplacer ton try...finally par un try...except...

    Par contre, ça sera moins performant que l'exit avec le finally.

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 745
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    Exact ! Je réagissais juste sur le fait qu'il n'est pas possible d'uniquement remplacer Exit par Abort
    Comme il n'est pas possible de simplement remplacer finally par except. "Suite du code" doit aussi être déplacé à l'extérieur du bloc.

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

Discussions similaires

  1. Erreur d'index sur une List<int> dans boucle for
    Par popoliline dans le forum C#
    Réponses: 13
    Dernier message: 16/06/2010, 11h03
  2. Lire une ligne spécifique dans un fichier texte
    Par ZRemi dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/04/2010, 13h58
  3. [AC-2007] Mise à jour d'une donnée spécifique dans la BD
    Par christophe31 dans le forum VBA Access
    Réponses: 4
    Dernier message: 23/03/2010, 11h23
  4. Réponses: 55
    Dernier message: 16/11/2008, 17h32
  5. Réponses: 10
    Dernier message: 16/05/2006, 14h13

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