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 :

low d un array of record : pb ds boucle FOR


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    Par défaut low d un array of record : pb ds boucle FOR
    Bonjour

    J ai un pb dans ma boucle de tri due au low, enfin je pense.
    Je ne comprends pas.J imagine que je dois attribuer .value mais si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For ii:=Low(Tab.value) To High(Tab.value)-1 Do
    j ai le meme message....
    J ai le message d erreur operateur ou point virgule manquant
    merci de votre aide.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    procedure TForm2.Test_Spearman(T: Integer);
    var
      tab : array[1..100]  of record
            id : integer;
            value : double;
            end;
     
       I,J,ii,jj: integer;
      temp  : double;
    begin
     
      for I := T+1 to compteur do
      begin
        //---remplir tableau
        for j := (I-T)+1 to I do
          begin
          Tab[j].id:=j;
          Tab[j].value:=open[i];
          end;
     
        //---trier le tableau
        For ii:=Low(Tab) To High(Tab)-1 Do
    	    For jj:=ii+1 To High(Tab) Do
    		    If Tab[ii].value>Tab[jj].value Then
      			  Begin
        				temp:=Tab[ii].value;
        				Tab[ii].value:=Tab[jj].value;
        				Tab[jj].value:=temp;
      			  End;
       end;
    end;

  2. #2
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    La syntaxe du code est correcte. Quels sont les problèmes? Le tri est mal fait?

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 496
    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 496
    Par défaut
    Salut


    Citation Envoyé par sp2308 Voir le message
    Bonjour

    J ai un pb dans ma boucle de tri due au low, enfin je pense.
    Je ne comprends pas.J imagine que je dois attribuer .value mais si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For ii:=Low(Tab.value) To High(Tab.value)-1 Do
    j ai le meme message....
    J ai le message d erreur operateur ou point virgule manquant
    merci de votre aide.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    procedure TForm2.Test_Spearman(T: Integer);
    var
      tab : array[1..100]  of record
            id : integer;
            value : double;
            end;
    
       I,J,ii,jj: integer;
      temp  : double;
    begin
    
      for I := SUCC(T) to compteur do // C'est quoi compteur ?
    // Toujours plus grand que t ?
      begin
        //---remplir tableau
        for j := SUCC(I-T) to I do 
        begin
          Tab[j].id:=j;
          Tab[j].value:=open[i];// C'est quoi open[i]
        end;
    
        //---trier le tableau
        For ii:=Low(Tab) To Pred(High(Tab)) Do
    	    For jj:=succ(ii) To High(Tab) Do
    		    If Tab[ii].value>Tab[jj].value Then
      			  Begin
        				temp:=Tab[ii].value;
        				Tab[ii].value:=Tab[jj].value;
        				Tab[jj].value:=temp;
      			  End;
       end;
    end;
    en fait j'ai peur que tes bornes ne soient pas correctement défini
    mise a part cela la syntaxe parait correct

    @+ Phil

  4. #4
    Membre éclairé
    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
    Par défaut
    mon pb vient du low(tab).
    Je ne sais pas comment lui attribuer specifiquement tab.value et non tab.id car si on precise rien, que prend il en compte ?

    J ai rempli le tableau je l affiche, il n y a aucun pb mais le tri ne passe pas avec toujours le meme message d erreur :
    operateur ou point virgule manquant

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 969
    Par défaut
    Low renverra toujours la limite inférieure du tableau et High la limite supérieure. Peu importe la structure des records qui constituent le tableau.

    Dans ton cas:
    Low(Tab) = 1
    High(Tab) = 100

    Et puisque ton tableau n'est pas dynamique, tu pourrais simplement les remplacer par 1 et 100.

    Maintenant, ton erreur est pour le moins surprenante puisque ce message est renvoyé à la compilation lorsqu'un ligne de code n'a pas été terminée par un ";" et non à l'exécution .

  6. #6
    Membre éclairé
    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
    Par défaut
    bon je me suis sans doute expliqué comme un âne.

    C est effectivement à la compilation que j ai ce message....

    par contre je ne comprends pas, si je remplace low et high par des valeurs ou des variables declarees je n ai plus aucun probleme, ça compil...

  7. #7
    Membre très actif
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Par défaut
    par contre je ne comprends pas, si je remplace low et high par des valeurs ou des variables declarees je n ai plus aucun probleme, ça compil...
    peut-etre que la réponse d'Annapurna^^
    en fait j'ai peur que tes borne ne sont pas correctement définies
    mise a part cela la syntaxe parait correcte
    EDIT :
    Si le code est bon c'est que la virgule manquante est dans la fonction low ou hight non ?

    Y a ça aussi à voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for I := SUCC(T) to compteur do // C'est quoi compteur ?
    Et les autres remarques sur le code de Annapurna.

    EDIT :
    A quelle ligne il te fait le problème ?
    Faut le noter.

    Et pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Tab[ii].value>Tab[jj].value Then
      			  Begin
    Si tu mettait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Tab[jj].value<Tab[ii].value Then
      			  Begin
    Parce que c'est jj qui varie dans la boucle et ii qui sert de controle, c'est un essai à faire.

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

Discussions similaires

  1. Manipulation des pointeurs sur des array of record
    Par kracter56 dans le forum Débuter
    Réponses: 8
    Dernier message: 13/04/2012, 10h58
  2. syntaxe boucle for (was : array.filter : différence ie / fx)
    Par Peanut dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/02/2009, 10h28
  3. Réponses: 7
    Dernier message: 16/05/2008, 17h55
  4. Réponses: 2
    Dernier message: 14/07/2006, 19h37
  5. [Record] Utilisation en boucle
    Par CanardJM dans le forum Langage
    Réponses: 3
    Dernier message: 20/06/2004, 13h41

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