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

Langage Pascal Discussion :

Affecter une procédure à une variable


Sujet :

Langage Pascal

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 87
    Points
    87
    Par défaut Affecter une procédure à une variable
    Bonjour à tous,

    Est-il possible d'affecter une procédure à une variable de manière à pouvoir réaliser des constructions de ce type:

    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
    PROCEDURE hello;
    BEGIN
      WRITELN('Hello')
    END;
     
    PROCEDURE repeter(action: procedure;n: INTEGER)
    VAR
      i: INTEGER;
    BEGIN
      FOR i:=1 TO n DO action
    END;
     
    BEGIN
      repeter(hello,3)
    END.
    Et sinon, quelle solution permettrait d'aboutir au même résultat ?

    Merci d'avance,

    Gauthier

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    oui mais sous cette forme (pour Delphi)

    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
    program Project1;
     
    {$apptype console}
     
    type
      tprocedure = procedure;
     
    PROCEDURE hello;
    BEGIN
      WRITELN('Hello')
    END;
     
    PROCEDURE repeter(action: tprocedure;n: INTEGER);
    VAR
      i: INTEGER;
    BEGIN
      FOR i:=1 TO n DO action
    END;
     
    BEGIN
      repeter(hello,3);
      readln;
    END.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    oui mais sous cette forme (pour Delphi)
    Merci pour cette piste. Je suis sous FreePascal, et en cherchant dans la doc, ça m'a amené aux «types procéduraux», sur base de quoi j'ai trouvé ce qui suit. Il semble donc qu'une procedure doive d'abord être affectée à une variable de type procedure avant que cette variable - elle - puisse être passée en argument à une autre.

    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
    PROGRAM test;
    TYPE
      Tproc = PROCEDURE;
     
    PROCEDURE hello;
    BEGIN
      WRITELN('Hello')
    END;
     
    PROCEDURE repeter(action: tproc;n: INTEGER);
    VAR
      i: INTEGER;
    BEGIN
      FOR i:=1 TO n DO action
    END;
    VAR
      thello: Tproc;
    BEGIN
      thello := @hello;
      repeter(thello,3)
    END.
    Merci,

    Gauthier

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 87
    Points
    87
    Par défaut Affecter une procédure avec paramètres à une variable
    Bonjour à tous,

    Dans un message précédent, je pensais avoir trouvé une solution au fait de passer une procédure comme paramètre à une autre. Malheureusement, ça ne semble pas fonctionner pour des procédures demandant des paramètres.

    Par rapport à l'exemple précédent, j'ajoute une procédure helloqui, et bien que j'utilise exactement la même syntaxe, je reçois ce message d'erreur:

    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
    PROGRAM test;
    TYPE
      Tproc = PROCEDURE;
     
    PROCEDURE hello;
    BEGIN
      WRITELN('Hello')
    END;
     
    PROCEDURE helloqui(s: STRING);
    BEGIN
      WRITELN('Hello ,',s)
    END;
     
    PROCEDURE repeter(action: tproc;n: INTEGER);
    VAR
      i: INTEGER;
    BEGIN
      FOR i:=1 TO n DO action
    END;
    VAR
      thello, thelloqui: Tproc;
      s: STRING;
    BEGIN
      thello := @hello;
      thelloqui := @helloqui;
      repeter(thello,3);
      repeter(thelloqui('Monsieur'),3);
    END.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    repeter.pas(25,16) Error: Incompatible types: got "<address of procedure(ShortString);Register>" expected "<procedure variable type of procedure;Register>"
    repeter.pas(31) Fatal: There were 1 errors compiling module, stopping
    Fatal: Compilation aborted
    Est-ce quelqu'un a une explication et une solution ? Je rappelle que j'utilise FreePascal.

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Il vous faut utiliser des types convenables.
    Une procédure de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Type tproc = Procedure;
    ne peux pas être affectée à une procédure de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Type tproc2 = procedure(param : String);
    ces deux types ne sont pas compatibles

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 87
    Points
    87
    Par défaut Merci
    Je vais tester ça

Discussions similaires

  1. [Débutant] Variable d'une procédure à une autre
    Par Jonathan628 dans le forum C#
    Réponses: 7
    Dernier message: 17/01/2013, 12h45
  2. [XL-2010] affecter valeur d'une collection à une variable
    Par JulienLeno dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/11/2011, 19h28
  3. [XL-2003] garder une valeur de variable d'une procédure à une autre
    Par mathioustone dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/03/2011, 17h24
  4. Affecter résultat d'une fonction à une variable ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 07/09/2006, 15h45
  5. Réponses: 3
    Dernier message: 22/03/2006, 16h38

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