Incompréhension boucle for [Résolu]

Signaler
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007
-
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007
-
Dans un code que je dois traduire, il y a une ambiguïtée, je ne sais pas comment interprêter cette ligne de code :
For a = i + 1 To x + 1 Step -1

Doi-je comprendre :
for

(a = i + 1 ; a < x + 1 ; i--)

Où :
for

(a = i ; 1 < a < x + 1 ; i--)

?
Je pense savoir quelle est la bonne(je ne le dis pas pour ne pas vous influencer) mais un gros doute persiste.
Merci

Woot
Alias Wouter Tjon.

11 réponses

Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
Dans un For, en deuxième position, tu places la condition qui te permet de rester dans la boucle.
a vaut tout d'abord (i+1), et tu décrémentes a jusqu'à atteindre (x+1).


Donc tu restes dans la boucle tant que a>=(x+1)

Dès que tu as la condition a<(x+1), tu sors de la boucle.









Manu


--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
2
Oui mais a diminue, donc c'est tant que a est supérieur (ou egal??) à la limite, sinon tu sors direct de ta boucle.

f.colo
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
55
Salut,
Je ne connaît pas (plus) trop VB, mais je dirais que c'est la première possibilité.
Mais quelque chose me dit que tu penses l'inverse lol
Faut attendre qu'une personne qui connaisse bien VB passe par ici...

<hr size= "2" /> VC# forever
=13319
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Pour être honnête, je pensais à la première aussi, mais je n'en suis pas sûr parce-que je connaît VB mais je n'ai jamais vu ce genre de syntaxe.

Woot
Alias Wouter Tjon.
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
Ni l'un ni l'autre en fait, çà donnerait plutôt ceci :




for (a= i+1; a>=x+1; a--)

a défile de (i+1) à (x+1) inclus, tout en se décrémentant de 1.

Donc à priori, (i+1) > = a >= (x+1)







Manu


--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Alors là, je doit t'avouer que je ne comprend pas le a>=x+1 car dans le code de départ c'est bien 'To x' donc a<x+1, voir a <=x+1non?

Woot
Alias Wouter Tjon.
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
2
me suis fait avoir .... :'(

f.colo
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
La preuve par l'exemple. Ces deux codes affichent "6" "5" puis "4"




Tu peux tester ceci en C# :


        private void test()

        {

            int i = 5;

            int x = 3;

            for (int a = (i + 1); a >= (x + 1); a--)

                MessageBox.Show(a.ToString());

        }


Tu peux tester ceci en VBA (sous Excel par exemple) :


    Sub test()

        i = 5

        x = 3

        For a = (i + 1) To (x + 1) Step -1

            MsgBox a

        Next a

    End Sub

Manu

--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

Effectivement vous avez raison. Mais alors je ne comprend pas ce que fait mon traducteur.
Aller sur ce lien : http://www.ellkay.com/ConvertVB2Csharp_demo.htm, pui entrer ceci :"For a = (i + 1) To (x + 1) Step -1" dans le champs text.
Et il traduit en ceci :
for(a=(i+1);a<=(x+1);a--)
!?

Woot
Alias Wouter Tjon.
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
Exact, le site renvoit n'importe quoi.
D'ailleurs, si tu exécutes la conversion qu'ils proposent, tu vois bien
que çà ne fonctionne pas. Il faut un signe > au lieu de <

Manu

--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
Messages postés
393
Date d'inscription
mercredi 8 mars 2006
Statut
Membre
Dernière intervention
23 mars 2007

C'est vrai, merci pour votre aide.

Woot
Alias Wouter Tjon.