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 :

Calculs en boucle incorrects mais correct si affichage avant d'une variable


Sujet :

Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut Calculs en boucle incorrects mais correct si affichage avant d'une variable
    Bonjour

    Bon je ne sais pas si mon titre est explicite mais je rencontre un pb que je ne parviens pas à resoudre..

    J ai la boucle suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for I := 1 to List.Count do
        begin
          //memo1.Lines.Add(inttostr(i)+#9+inttostr(coups_g[i]));
          CalculEF(i);
          memo1.Lines.Add(floattostr(ef[i]));
        end;
    elle fait appel à la procedure suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.CalculEF(Coup : Integer);
    var
      Pg, Pp : Double;
    begin
      Pg:=strtofloat(ed_Pg.Text);
      Pp:=strtofloat(ed_Pp.Text);
      EF[coup] := (coups_G[coup] - (coup * Pg)) / sqrt((coup * Pg * Pp));
    end;
    Si j execute tel quel l appel à CalculEF, le resultat est faux car coups_G n a pas les valeurs qu il contient avant l appel, comme s il s agissait d une variable locale non initialisee !

    per contre si j affiche la ligne en com (//memo1.....) et que j execute ensuite l appel à calculEF, le resultat est correct.

    J ai essayé de modifier l appel en ajoutant coups_G[I] en paramentre mais quand j affiche ce parametre dans ma proc Calcul_Ef il est faux comme s il s agissait d une variable locale non initialisée... Par contre si j ai affiché cette variable avant, il est correct...

    J ai utilisé une variable que je n ai jamais utilisé ailleurs dans mon code...

    mon tableau coups_G est dynamique, global et initialisé d'apres une premiere TstringList, avant, comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    initialize(Coups_G);
      SetLength(Coups_G, list.Count);

    je ne sais pas comment faire pour y remedier et le pire je ne comprends pas d ou cela peut venir !!!

    Merci pour votre aide

    stephane

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Si ton tableau est dynamique, le premier index est 0

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Ok, c est vrai c est la premiere fois que j utilise des tableaux dynamiques mais je
    ne fais aucune boucle sur la taille du tableau.
    Je le remplis comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for I := 0 to List.Count - 1 do
        begin
          J:=I+1;
          Rapport[J]:=strtofloat(list[I]);
          if Rapport[J]>0 then
            Temp:=Temp+1;
          Coups_G[J]:=Temp;
        end;
    donc mon Coups_G[0] contient bien 0, d ailleurs je n utilise jamais 0 puisque je debute toutes mes boucles à 1

    Je ne comprends pas pkoi le simple fait d afficher la valeur avant de la passer empeche l' erreur de calcul ?

    Si c est lié à cet index 0, peux tu m en dire plus pke je ne comprends vriament pas...

    Merci

  4. #4
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    J'ai eu le meme probleme que toi, c'est a dire que rajouter une ligne d'affichage rendait un calcul juste, alors que sans cette ligne ca marchait pas. Je sais que ca va pas forcément t'aider, mais comme je trouvais pas de solution, j'ai éffacé le code qui posait probleme, et je l'ai retapé, mais pas exactement pareil. Et depuis, plus de probleme. Peut etre devrais tu modifier ton code pour un code équivalent ...

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Je ne peux pas te dire pourquoi ça fonctionne après un affichage, mais tes boucles sont définitivement fausses. SetLength(Coups_G, list.Count) crée un tableau allant de 0 à list.Count -1. La boucle de ton premier post est donc incorrect ainsi que ce J:=I+1. Dans les deux cas, tu dépasses les limites du tableau.


    Et que fait ce initialize(Coups_G) ?

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/03/2012, 15h40
  2. [MySQL] affichage aleatoire d'une variable avec changement au bout d'un temps donné
    Par spokito dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/07/2011, 20h02
  3. [W3C] Validation w3c ok mais pas d'affichage correct en local
    Par dragonno dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/02/2009, 22h10
  4. [Système] Affichage résultat d'une variable
    Par herveD dans le forum Langage
    Réponses: 7
    Dernier message: 06/07/2007, 16h05
  5. Affichage contenu d'une variable dans JS
    Par tangjuncn dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/05/2006, 13h38

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