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 :

Opérateur comme paramètre de procédure


Sujet :

Langage Pascal

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Opérateur comme paramètre de procédure
    Bonjour à tous,
    je souhaiterai, je sais pas si je vais m'exprimer correctement, considérer un opérateur comme un paramètre de procédure.
    Voilà, j'ai écris une procédure qui effectue un travail sur des nombres.
    exemple tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure addition (nombre1 : integer; nombre2 : integer; var resultat : integer);
    begin
     resultat := nombre1 + nombre2;
    end;
    Si j'ai besoin de faire la même procédure mais au lieu de faire une addition, je veux faire une multiplication. Y'a-t-il possibilité d'ajouter un paramètre de procédure qui spécifie l'opérateur désiré?
    Le problème d'un opérateur est qu'il n'a pas de type (comme une variable).

    exemple souhaité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure deux (nombre1 : integer; nombre2 : integer; operateur : ? ; var resultat : integer);
    begin
    resultat := nombre1 operateur nombre2;
    end;
    Merci par avance du temps que vous pourrez accorder à mon problème.
    Xuyvox.

  2. #2
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    deux possibilité :
    - soit tu définis chaque opérateur comme une constante, que tu peux ensuite passer à ta fonction, puis faire un Case... of. par ex :
    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
     
    const
      OpAdd = 01;
      OpSoust = 02;
      OpMul = 03;
      OpDiv = 04;
     
    procedure Operation(nb1, nb2, operation : Integer ; var Resultat : Integer);
    begin
      Case Operation of
        OpAdd : Resultat := nb1 + nb2;
        OpSoust : Resultat := nb1 - nb2;
        OpMul : Resultat := nb1 * nb2;
        OpDiv : Resultat := nb1 / nb2;
      end;
    end;
    - ou alors tu peux passer l'opération sous forme de pointeur de fonction (et là je t'indique juste une marche à suivre, je ne me souviens plus de la syntaxe exacte). ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    type
      TFuncOp : function(nb1, nb2 : Integer) : Integer;
     
    function Addition(nb1, nb2 : Integer) : Integer;
    begin
      Addition := nb1 + nb2;
    end;
     
    procedure Operation(nb1, nb2 : Integer ; var Resultat : Integer ; FuncOp : TFuncOp);
    begin
      Resultat := FuncOp(nb1, nb2);
    end;
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  3. #3
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Denokan a fourni les seules solutions viables.

    Le Pascal n'est pas un langage fonctionnel. Les opérateurs ne sont pas considérés comme des fonctions, et encore moins comme des éléments de première classe.

    Certains langages permettent ça : Lisp, Smalltalk, ...

    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Je vous remercie de votre réponse aussi rapide.

  5. #5
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    tiens voilà un exemple de comment implémenter la seconde solution :
    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
    41
    42
    43
    44
    45
    46
    47
     
    Program Operations;
     
    {$F+} {directive nécessaire pour utiliser une fonction comme paramètre}
     
    uses
      Crt;
     
    function IntToStr(Int : Integer) : String;
    var Result : String;
        i : Integer;
        Negat : Boolean;
    begin
      Str(Int, Result);
      IntToStr:=Result;
    exit;
      Result:='';
      Negat:=Int<0;
      Int:=Abs(Int);
      while Int<>0 do begin
      end;
      If Negat Then Result:='-' + Result;
      IntToStr:=Result;
    end;
     
    type
      TFuncOp = function(nb1, nb2 : Integer) : Integer;
     
    function Addition(nb1, nb2 : Integer) : Integer;
    begin
      Addition := nb1 + nb2;
    end;
     
    function Operation(nb1, nb2 : Integer ;
                         FuncOp : TFuncOp) : Integer; far;
    begin
      Operation := FuncOp(nb1, nb2);
    end;
     
    var
      a : Integer;
     
    BEGIN
      ClrScr;
      a := Operation(5, 74, Addition);
      WriteLn(IntToStr(a));
    END.
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  6. #6
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    La fonction IntToStr est totalement inutile ici
    WriteLn sait très bien afficher un entier

    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  7. #7
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    effectivement je me permet de poster dans le forum pascal alors que je ne plus que du delphi depuis plusieurs mois et que j'ai perdu quelques automatismes
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/08/2009, 11h54
  2. Réponses: 2
    Dernier message: 12/06/2009, 18h56
  3. Réponses: 2
    Dernier message: 03/12/2006, 13h37
  4. [VBA-A]procédure avec comme paramètre une propriété
    Par eultartuffe dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/04/2006, 14h49
  5. Un fichier .bmp comme paramètre d'une Procédure stockée
    Par FONKOU dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/10/2004, 18h56

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