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 :

incrementation de boucle for


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 57
    Points : 40
    Points
    40
    Par défaut incrementation de boucle for
    bonjour à tous,

    certain vont peut-etre m'en vouloir mais je n'arrive pas à modifier l'incrementation dans une boucle.

    je cherche à faire un controle sur une TStringlist. Les valeur des ligne impairs ne doivent pas contenir de doublons et des ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
         for i := 0 to TStrinlist.Count-2 do
           begin
      for j :=i+2 to TStrinlist.Count do
      begin
        if TStrinlist.Strings[i] = TStrinlist.Strings[j] then
          raise Exception.Create('Le fichier "TStrinlist" contient plusieur fois le même code')
        else
          j:= j+1;
      end;
      i := i+1;
           end;
    je cherche à incrementer des 2 i et j mais j'ai les messages d'erreur suivant:

    [Erreur] U_Principale_Import.pas(94): Affectation à variable de boucle FOR 'j'
    [Erreur] U_Principale_Import.pas(96): Affectation à variable de boucle FOR 'i'

    je pense comprendre que je ne peut utiliser i et j car ils sont verouillés

    quelqu'un aurait une solution?

    PS : j'ai cherché dans la faq
    [Balises CODE rajoutées par Pedro. Merci d'y penser à l'avenir]

  2. #2
    Membre averti Avatar de Bejaia-In
    Inscrit en
    Avril 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 365
    Points : 392
    Points
    392
    Par défaut
    certain vont peut-etre m'en vouloir
    pas beaucoup...
    je pense comprendre que je ne peut utiliser i et j car ils sont verouillés
    ...puisque tu as compris le systeme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
          for i := 0 to TStrinlist.Count-2 do
           begin
             for j :=i+2 to TStrinlist.Count do
               begin
                 if TStrinlist.Strings[i] = TStrinlist.Strings[j] then
                   raise Exception.Create('Le fichier "TStrinlist" contient plusieur fois le même code');
                 //else
                  // j:= j+1; a supprimer
     
               end;
           //i := i+1; a supprimer
           end;
    ....................................................................
    Aidez-vous... Dieu vous aideras et nous aussi..
    ....................................................................

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 57
    Points : 40
    Points
    40
    Par défaut
    y'a de l'idée dans la réponse mais c'est pas vraiment ca (heureusement parce que sinon c'est moi qui m'en serait voulu)

    en fait les boucles incrementent naturellement de 1 et je voudrais qu'elles incrementent de 2, c'est pour ca que j'ai voulu forcer l'incrementation de i et j
    et j'ai les messages d'erreurs...

    je suis sur qu'il existe une solution relativement simple mais je n'arrive pas à mettre le doigt dessus

    merci pour ton aide

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut Une boucle style "for i := 0 to un_nombre step 2" ?
    Ben j'ai jamais trouvé.
    J'ai ça qui fonctionne (c'est pas beau, hein !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    var i: integer; r: real;
    begin
      memo1.Clear;
      r := 0;
      for i := 0 to 5 do begin
        r := i;
        if IntToStr(i div 2) <> FloatToStr(r / 2) then continue;
        memo1.Lines.Add(inttostr(i));
      end;
    end;
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Pour avoir la main sur ces compteurs, tu peux utiliser soit une boucle repeat...until, soit un boucle while.

    Il faut dans les 2 cas correctement initialiser le compteur qui sera la condition de sortie de la boucle (sous peine de ne pas y rentrer pour un while) et bien l'incrémenter sous peine de ne pas en sortir.
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 951
    Points
    3 951
    Par défaut
    Tu peux itérer par pas de 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    For i := 0 to StringList.Count-1 step 2 do
    ...
    Attention tu ne dois pas dépasser Count-1 comme indice de ta liste de chaîne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       for i := 0 to TStrinlist.Count-3  step 2 do
           begin
             for j :=i+2 to TStrinlist.Count-1  step 2 do
               begin
    ...
    cela devrait sonner plus juste.

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut !

    @E-ric: step ???

    Ca me rappelle le bon vieux basic , mais en pascal point de step.

    Mais de toute façon qi130 a donné la solution le while ou repeat c'est le seul moyen de controler l'incrémentation des tes variables.

    @+ Claudius.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Le moindre coup d'oeil sur un cours/bouquin/tuto de pascal ou delphi t'aurait donné la réponse, et t'aurait évité de tenter ce que tu as essayé de faire.

    En l'occurrence, la réponse a déjà été donnée par qi130.
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 57
    Points : 40
    Points
    40
    Par défaut
    merci qi130 et les autres.
    thewho on peut avoir des faiblesses

    voici donc LE code qui fonctionne comme je voulais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
          while i < TSringlist.Count-2 do
            begin
              j:= i+2;
              while j <= TSringlist.Count-2 do
                begin
                  if TSringlist.Strings[i] = TSringlist.Strings[j] then
                    raise Exception.Create('Le fichier TSringlist contient plusieurs fois le même code de départ : ' + TSringlist.Strings[i]);
                  j := j+2;
                end;
              i := i+2;
            end;
    en tous cas merci de m'avoir répondu et réorienté
    bon dev à tous

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

Discussions similaires

  1. [Débutant] Probleme incrementation boucle for
    Par preto91 dans le forum MATLAB
    Réponses: 3
    Dernier message: 20/01/2014, 11h46
  2. [Débutant] Boucle for - Incrementer un nom de variable
    Par titus2709 dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/05/2011, 12h51
  3. Réponses: 2
    Dernier message: 11/07/2007, 10h40
  4. Réponses: 12
    Dernier message: 15/05/2007, 16h34
  5. incrementation de 2 dans une boucle for
    Par scorpion.os dans le forum Flash
    Réponses: 4
    Dernier message: 26/01/2007, 16h09

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