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

Delphi Discussion :

Boucle FOR et incrément + 2


Sujet :

Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Par défaut Boucle FOR et incrément + 2
    Bonjour, j'aimerais simplement faire un double incrément de ma variable j dans une boucle FOR.
    J'ai essayé un j := j + 2 mais le compilateur me refuse cette commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        SetKeyCode(EdtKeyCode.Text);
        LibraryList := Decode(CryptCode.Text);
        for j := 1 to Length(LibraryList) do
        begin
          if (StrScan(Alphanum2,LibraryList[j]) <> nil) and 
             (StrScan(Alphanum2,LibraryList[j+1]) <> nil) and 
             (not (j+1) <= Length(LibraryList)) then
          begin
            SetLength(LibOFML,j);
            LibOFML[j-1] := LibraryList[j] + LibraryList[j+1];
    //        inc(j);
    //        j := j +2;
          end;
    Existe il une solution autre que de mettre une variable additionnelle dans ma boucle?

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Tu peux faire directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    j := 1;
    while j <= Length(LibraryList) do
    begin
      ...
      Inc(j, 2);
    end;
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut
    Bonjour,

    Il existe une autre solution sans intérêt.

    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
        SetKeyCode(EdtKeyCode.Text);
        MonBooleanSansInteret := False;
        LibraryList := Decode(CryptCode.Text);
        for j := 1 to Length(LibraryList) do
        begin
          if MonBooleanSansInteret then
          begin
            MonBooleanSansInteret := False;
            continue;
          end;
          if (StrScan(Alphanum2,LibraryList[j]) <> nil) and
             (StrScan(Alphanum2,LibraryList[j+1]) <> nil) and
             (not (j+1) <= Length(LibraryList)) then
          begin
            SetLength(LibOFML,j);
            LibOFML[j-1] := LibraryList[j] + LibraryList[j+1];
            MonBooleanSansInteret := true;
          end;
        end;
    a+

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Par défaut
    J'ai essayé mais j'ai l'erreur suivante :

    [Pascal Error]unit1.pas(329): E2081 Assignement to FOR-Loop variable 'j'

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Par défaut
    Citation Envoyé par Yurck
    Bonjour,

    Il existe une autre solution sans intérêt.

    Code ...

    a+
    Ta solution n'est pas sans intéret mais c'est justement ce que j'aimerais éviter ... de mémoire, je me souvenais que c'était possible
    Pour info, je suis sur Delphi 2006 (bien que je doute que ce soit un prob de version!)

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 079
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 079
    Par défaut
    Ça a déjà été discuté il y a 10 jours environ...
    http://www.developpez.net/forums/sho...d.php?t=201152
    HTH,
    --
    jp

  7. #7
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Je prendrais la solution de Pedro

    Sinon, il y a également celle ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i := 0 to Longueur div 2 do
      begin
      ...
      // utiliser comme indice uniquement (i*2)
      end;
    Ton code initial est de toute facon ambigue car:
    tu tentes d'incrémenter de 2, alors que la boucle incrémente déjà de 1
    l'incrémentation de 2 de j est conditionnelle est pas systématique...

    bon code !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 477
    Par défaut
    salut


    il n'y as pas de step dans le language delphi pour les boucle for
    il te faut utiliser la boucle while d'ailleur pour info la boucle for n'est rien d'autre qu'une boucle while specialisée

    @+ Phil

  9. #9
    Blue_Strike
    Invité(e)
    Par défaut
    salut,
    c'est logique que tu aura cet erreur, tu as incrémenté la variable utilisée en meme temps dans la boucle FOR c'est qui est faux !
    ou bien tu change la variable qui présente le step de la boucle FOR, ou bien tu change le type de la boucle (vers WHILE par exemple) pour pouvoir le faire ce truc.
    ++

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Par défaut
    D'après un de mes collègues, forcer l'incrément de la boucle FOR aurait disparu depuis la version 2 ...

    J'ai changé la boucle en While et maitenant ca fonctionne

    PS : il parait qu'il y a un paramètre qui permet de désactiver l'incrémentation manuelle d'une boucle FOR

    Edit : 4 réponses le temps entre le temps ou j'ai ouvert le post et répondu MDRRRR

  11. #11
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Citation Envoyé par anapurna
    d'ailleur pour info la boucle for n'est rien d'autre qu'une boucle while specialisée
    Pour info, ce n'est pas tout à fait vrai. Les boucles for sont plus optimisées que les while. La variable de contrôle est souvent remplacée (dans la mesure du possible) par le registre eax (ce qui donne lieu aux fameux avertissements "La variable de contrôle de la boucle for peut être indéfinie à sa sortie). D'autre part, si la variable de contrôle n'est pas utilisée dans la boucle, le compilateur optimise pour décrémenter et finir à l'indice 0, indice qui se teste plus rapidement que tout autre
    C'est dans un cas comme ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for I := 0 to 10 do
      WriteLn('Bonjour :-)');
    dec(I, 10); // on croirait que I a été initialisé
    Cela se traduira en assembleur par qqch comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      mov eax, 10
    debut_boucle :
      // Traduction de WriteLn
      dec eax
      jnz debut_boucle
      dec dword ptr I, 10 // en fait I n'a jamais été initialisé
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  12. #12
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 477
    Par défaut
    salut

    je parlai d'un point de vu algoritmique et pas code assembleur
    j'ai meme dit qu'elle etait specialisé ce qui sous entend optimisé

    mais bon quand tu represente un algo a l'aide des logigraph tu ne voit que tres peu de diference meme avec les graph de type nsd

    @+ Phil

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

Discussions similaires

  1. Boucle for avec incrément supérieur à 1
    Par bremer dans le forum Langage
    Réponses: 19
    Dernier message: 22/04/2024, 12h41
  2. Double boucle for avec incrémentation
    Par dubis dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 12/04/2013, 13h29
  3. Boucle for avec incrémentation de variable en shell
    Par Ariania dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 09/08/2012, 11h27
  4. [XL-2003] VBA boucle for - problème incrémentation
    Par HankMoody dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/07/2012, 17h31
  5. [Smarty] Boucle FOR avec incrémentation
    Par HwRZxLc4 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 28/07/2010, 20h31

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