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 :

Probleme avec cycle "for"


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut Probleme avec cycle "for"
    Bonjour, ceci est mon premier message sur le site et il est du a un probleme avec des cycles for.
    En gros je lance un cycle de genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     for i:=0 to 1 do
       begin
       ...
       end
    le proleme est que il commence avec i=2 pour continuer ensuite avec i=1 et i=0 !

    D'ou peut venir cette erreur?

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 592
    Billets dans le blog
    65
    Par défaut
    Houlà ? faudrait un peu plus de code

    i ne serait pas utilisé à l'interieur de la boucle ?

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 083
    Par défaut
    C'est tout à fait normal !
    Citation Envoyé par SergioMaster
    i ne serait pas utilisé à l'interieur de la boucle ?
    Effectivement, vu que tu n'utilise pas i ... le compilateur modifie la boucle pour remplacer un test de comparaison lent (i <> x) contre un test plus rapide (i = 0) ... c'est de l'optimisation ...

    Ensuite, il ne faut pas faire confiance au Debugger Delphi pour les variables de boucle for, un log (outputDebugString, showmessage, TMemo, fichier ...) te donneras les vrais valeurs ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut
    Merci de vos reponses.

    Mes excuses pour le premier message trop sommaire.
    Voici le code plus detailee:

    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 1 do          
        begin           
          VectSurf[i,0]:=0;
          VectSurf[i,1]:=0;
          VectSurf[i,2]:=0;
          for k:=0 to 7 do                    
          begin
            VectSurf[i,0]:=VectSurf[i,0]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].x;
            VectSurf[i,1]:=VectSurf[i,1]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].y;
            VectSurf[i,2]:=VectSurf[i,2]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].z;
          end;
        end;

    J'ai en effet le meme souci avec k, qui commence avec 8 et apres continue avec 7 ... jusqu'a 0.

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 083
    Par défaut
    Dans ton cas, je pense que c'est juste un problème d'affichage de debugger ... qui pense avoir une variable optimisée alors qu'elle ne l'est pas et donc affiche une valeur fausse (un truc du genre)

    test comme ci :
    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
    for i:=0 to 1 do 
    begin 
      VectSurf[i,0]:=0;
      VectSurf[i,1]:=0;
      VectSurf[i,2]:=0;
      ShowMessage(IntToStr(i)); // ou Memo1.Lines.Add('i : ' + IntToStr(i));
     
      for k:=0 to 7 do 
      begin
        VectSurf[i,0]:=VectSurf[i,0]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].x;
        VectSurf[i,1]:=VectSurf[i,1]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].y;
        VectSurf[i,2]:=VectSurf[i,2]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].z;
       ShowMessage(IntToStr(k)); // ou Memo1.Lines.Add(Format('i: %d, k: %d', [i, k]));
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut
    Citation Envoyé par ShaiLeTroll
    Dans ton cas, je pense que c'est juste un problème d'affichage de debugger ... qui pense avoir une variable optimisée alors qu'elle ne l'est pas et donc affiche une valeur fausse (un truc du genre)

    test comme ci :
    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
    for i:=0 to 1 do 
    begin 
      VectSurf[i,0]:=0;
      VectSurf[i,1]:=0;
      VectSurf[i,2]:=0;
      ShowMessage(IntToStr(i)); // ou Memo1.Lines.Add('i : ' + IntToStr(i));
     
      for k:=0 to 7 do 
      begin
        VectSurf[i,0]:=VectSurf[i,0]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].x;
        VectSurf[i,1]:=VectSurf[i,1]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].y;
        VectSurf[i,2]:=VectSurf[i,2]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].z;
       ShowMessage(IntToStr(k)); // ou Memo1.Lines.Add(Format('i: %d, k: %d', [i, k]));
      end;
    end;
    Merci,

    Je vais l'essayer tout de suite.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut
    Citation Envoyé par ShaiLeTroll
    Dans ton cas, je pense que c'est juste un problème d'affichage de debugger ... qui pense avoir une variable optimisée alors qu'elle ne l'est pas et donc affiche une valeur fausse (un truc du genre)

    test comme ci :
    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
    for i:=0 to 1 do 
    begin 
      VectSurf[i,0]:=0;
      VectSurf[i,1]:=0;
      VectSurf[i,2]:=0;
      ShowMessage(IntToStr(i)); // ou Memo1.Lines.Add('i : ' + IntToStr(i));
     
      for k:=0 to 7 do 
      begin
        VectSurf[i,0]:=VectSurf[i,0]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].x;
        VectSurf[i,1]:=VectSurf[i,1]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].y;
        VectSurf[i,2]:=VectSurf[i,2]+LocGradSurf[i,k]*Nodes[conn_face[num_face,k]].z;
       ShowMessage(IntToStr(k)); // ou Memo1.Lines.Add(Format('i: %d, k: %d', [i, k]));
      end;
    end;
    Re Bonjour,

    Je n'arrive pas a utiliser "ShowMessage", ni l'autre methode, malheureusemet, car il me renvoit des erreurs du genre:

    [Error] Hex_20.pas(1332): Record, object or class type required

    et je n'ai pas la moindre idee pourquoi.

    Merci pour votre aide et votre temps.

Discussions similaires

  1. Probleme avec vfw(video for windows)
    Par skelletons dans le forum C
    Réponses: 8
    Dernier message: 04/10/2006, 19h38
  2. Probleme avec encodage de simple quote
    Par linkowich dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2005, 13h16

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