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

C++Builder Discussion :

fonction en paramètre


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 93
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 41
    Par défaut fonction en paramètre
    Bonjour.
    Je suis un intermittent de la programmation et plus très jeune (73 ans) Alors soyez indulgents...
    Avant de le porter dans un composant j'essaie de mettre au point un tri de Grille avec la possibilité d'avoir une fonction de comparaison dont je passe le nom en paramètre.
    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
    33
    34
    35
    36
    37
    38
    39
    40
    int compare(TMyGrid *Grille1, int SortCol, int row1, int row2);
    int comparebis(TMyGrid *Grille1, int SortCol, int row1, int row2);
    void __fastcall swap(TMyGrid *Grille1, int SortCol, int row1, int row2);
    void __fastcall quicksort(TMyGrid *Grille1, int col, int bottom, int top,
                   int (&fcomp)(TMyGrid *Grille1, int SortCol, int row1, int row2));
     
    void __fastcall quicksort(TMyGrid *Grille1, int col, int bottom, int top,
                   int (&fcomp)(TMyGrid *Grille1, int SortCol, int row1, int row2))
    { int up, down, pivot;
      String s;
     
      down = top;
      up = bottom;
      pivot = (top + bottom) / 2;
     
      do
       { //while (compare(Grille1, col, up, pivot) < 0) up++;
         while (fcomp(Grille1, col, up, pivot) < 0) up++;
         //while (compare(Grille1, col, down, pivot) > 0) down--;
         while (fcomp(Grille1, col, down, pivot) < 0) down--;
         if (up <= down)
          {swap(Grille1, col, up, down);
           if (pivot == up)
             pivot = down;
           else if (pivot == down)
             pivot = up;
           up++;
           down--;
          };
       } while (up<=down); // until up > down;
     
       if (bottom < down)
        quicksort(Grille1,col, bottom, down, fcomp);
     
       if (up < top)
        quicksort(Grille1,col, up, top, fcomp);
    }
     
    Appel du tri:
     quicksort(Grille1,1,1,Grille1->RowCount,compare);
    Quand j'utilise le nom directement "while(compare(Grille1... " le tri s'effectue et le résultat est bon. Quand je le passe en paramètre "while(fcomp(Grille1..." le tri s'effectue mais le résultat n'est pas bon. Et je ne vois pas bien pourquoi. Quand je fais la trace, je passe par la fonction "compare" avec les bons paramètres...

    Merci d'avance pour votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 93
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 41
    Par défaut
    J'ai trouvé mon erreur: un test dans le mauvais sens (<0 au lieu de >0) dans l'instruction "while(fcomp(....) >0 ) down--"

    Bon week-end à tous.

  3. #3
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Cette question m'intéresse. Pouvez-vous nous montrer la façon de déclarer cette fonction passée en paramètres. Je l'ai eu su à une époque mais je n'ai pas retrouvé la syntaxe (je l'avais notée mais en changeant d'ordinateur, je suis revenu en situation antérieure et ai donc perdu ce type de déclaration).

    Merci à vous
    Gilles

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 93
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 41
    Par défaut
    Pour passer une fonction en paramètre il suffit d'utiliser l'opérateur & et de reprendre la définition de la fonction. Par exemple:
    si je veuw passer en paramètre la fonction: int compare(int i, int j)
    je définirai la fonction qui reçoit avec un paramètre ...,int (&fcomp) (int i, int j),...
    et dans cette fonction j'utiliserai fcomp comme j'aurais utilisé la fonction compare.
    Voir sur ce sujet les tutoriels et cours de formation pour apprendre la programmation C++ : http://cpp.developpez.com/cours/

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

Discussions similaires

  1. Passer une fonction en paramètre ...
    Par Freeze dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/10/2005, 16h51
  2. Réponses: 4
    Dernier message: 11/09/2005, 01h21
  3. Création d'une fonction sans paramètre?
    Par falcon dans le forum Oracle
    Réponses: 3
    Dernier message: 13/12/2004, 11h32
  4. [Conception] Passer une fonction en paramètre
    Par pejay dans le forum Langage
    Réponses: 9
    Dernier message: 09/12/2004, 13h58
  5. Réponses: 3
    Dernier message: 17/06/2004, 16h32

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