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

VB 6 et antérieur Discussion :

Réinitialiser une boucle for en cours d'exécution


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 112
    Points : 98
    Points
    98
    Par défaut Réinitialiser une boucle for en cours d'exécution
    Bonjour à tous,J'essaye de programmer à titre d'exo le pb des 8 reines. euh comme je débute c'est du lourd du point de vue algo

    Voici mon pb qui n'est pas un problème d'algo mais de pile

    Le code est un test de détection d'une reine sur le même ligne

    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
     
     
     
           'test de la présence d'une reine dans une même ligne
       '==========================================================
       ''Calcul du numéro de la première case de la ligne. occup est le numéro de la case occupée par la reine
     result = occup - (occup Mod 8) + 1
     
        For x = result To result + 7
            'on ne teste pas la case ou on est
              If x = occup Then GoTo Xplus
             ' Test si une case est occupée.si oui on change de ligne
              If Not (Not pic(x).Picture) Then
                        MsgBox ("  Reine ligne!!!!")
                         'on enlève l'image
                            pic(occup).Picture = Nothing 'on change de ligne 
                           occup = occup + 8: result = occup - (occup Mod 8) + 1   ICI LE PB J'ai besoin  de relancer la boucle avec de nouveaux paramètres
                            pic(occup).Picture = LoadPicture(App.Path & "\Reine.jpg") 'Affichage
                       GoTo Xplus ' on reteste
             Else
             End If
    Xplus:
         Next

    Suite au test ligne 7 si une reine est détectée on change de ligne.A ce moment là il faut de nouveau retester mais les paramètres qui définissent le for x de la boucle ont changé.
    J'ai essayé de mettre l'étiquette Xplus avant la boucle en faisant un set x =nothing mais cela crée une erreur d'incompatibilité et cela ne décharge pas la pile du next.
    Ma question est
    Y a-t-il un moyen technique de réinitialiser la boucle.

    En espérant ne pas avoir été trop brumeux et en vous remerciant de m'avoir consacré de votre temps.

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Bonjour,
    Dans une boucle For Next, l'instruction next n'est évalué qu'au premier passage.
    C'est l'instruction next qui incrémente la boucle, en conséquence,
    la réinitialisation s'effectue en forçant la valeur de x sur la nouvelle valeur initiale désirée
    et en relançant la boucle immédiatement après l'instruction for
    et non pas avant next sinon la première valeur sera ignorée.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 112
    Points : 98
    Points
    98
    Par défaut Réinitialiser une boucle for en cours d'exécution
    Merci de ta réponse DarkVader,
    Effectivement j'ai modifié mon code et la nouvelle valeur x du compteur suite au test if est bien prise en compte
    sauf que le nombre d'incrémentations détenu par Next ne change pas,
    or dans mon test non seulement x est modifié mais aussi la valeur du nombre de boucles par la variable result .Comme tu as dit que la condition for n'est évaluée qu'une fois , je suppose que le pb vient de là.
    Dois je revoir mon algo ou y a-t-il un moyen d'annuler la pile dans next ou de forcer la valeur de result dans la boucle.

    Encore merci de ton aide

    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
        'test de la présence d'une reine dans une même ligne
       '==========================================================
       ''Calcul du numéro de la première case de la ligne
         result = occup - (occup Mod 8) + 1
     
        For x = result To result + 7
    Xplus:
          'on ne teste pas la case ou on est
           If x = occup Then GoTo Xplusplus
            ' Test si une case est occupée.si oui on change de ligne
           If Not (Not pic(x).Picture) Then
           MsgBox ("  Reine ligne!!!!")
           'on enlève l'image
            pic(occup).Picture = Nothing 'on change de ligne ,on annule l'index
             occup = occup + 8: result = occup - (occup Mod 8) + 1: x = occup - (occup Mod 8) + 1:
            pic(occup).Picture = LoadPicture(App.Path & "\Reine.jpg") 'Affichage
             GoTo Xplus ' on reteste
            Else
            End If
    Xplusplus:
         Next

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Dans ce cas place ton Xplus avant l'instruction for
    mais autant utiliser une boucle Do Loop -
    (voir éventuellement la MSDN en téléchargement dans les outils)

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour,
    De torquemada

    Ma question est
    Y a-t-il un moyen technique de réinitialiser la boucle.
    Pour réinitialiser la boucle,essaie en donnant la nouvelle valeur aussi dans la variable x
    voir ligne 17
    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
     
          'test de la présence d'une reine dans une même ligne
       '==========================================================
       ''Calcul du numéro de la <>première case de la ligne. occup est le numéro de la case occupée par la reine
        result = occup - (occup Mod 8) + 1
     
        For x = result To result + 7
            'on ne teste pas la case ou on est
              If x <> occup Then
             ' Test si une case est occupée.si oui on change de ligne
                   If Not (Not pic(x).Picture) Then
                        MsgBox ("  Reine ligne!!!!")
                         'on enlève l'image
                            pic(occup).Picture = Nothing 'on change de ligne
                            occup = occup + 8
                            result = occup - (occup Mod 8) + 1   'ICI LE PB J'ai besoin  de relancer la boucle avec de nouveaux paramètres
                            x = result
                            pic(occup).Picture = LoadPicture(App.Path & "\Reine.jpg") 'Affichage
                   End If
              End If
         Next
    End Sub

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 112
    Points : 98
    Points
    98
    Par défaut Réinitialiser une boucle for
    Parfait
    merci à tous les deux pour ces éclaircissements

  7. #7
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    Citation Envoyé par torquemada Voir le message
    Parfait
    merci à tous les deux pour ces éclaircissements
    Pour mettre le post en résolu, merci de cliquer sur le bouton en bas de la fenêtre.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

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

Discussions similaires

  1. [PowerShell] Exécution .cmd via une boucle for
    Par powershell dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 19/03/2013, 13h48
  2. Sortir l'info d'une Boucle For en cours
    Par G100T dans le forum LabVIEW
    Réponses: 4
    Dernier message: 01/03/2012, 17h07
  3. Arrêter une boucle (while) en cours d'exécution
    Par Cybberdupont dans le forum Langage
    Réponses: 19
    Dernier message: 26/06/2008, 14h24
  4. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 20h05
  5. Réponses: 3
    Dernier message: 06/07/2004, 10h21

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