p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 986
    Points : 5 706
    Points
    5 706
    Billets dans le blog
    1

    Par défaut Adaptation de la fonction freeBasic IIf

    Bonjour !

    J'ai voulu écrire en Pascal l'équivalent d'une fonction très commode du langage FreeBASIC, à savoir la Fonction IIf. Cette fonction permet de remplacer
    If ceci=vrai then n=A else n=B
    par
    n=IIf(ceci, A, B)
    Rien de bien difficile à première vue.
    Cependant, la fonction originale admet plusieurs types d'argument : nombre entier, nombre réel, pointeur. Elle peut servir à composer une chaîne de caractères.
    Deuxième chose, les expressions A et B ne sont évaluées que si la condition est vraie.

    Cette fonction existe-t-elle dans le langage Pascal sous un autre nom ?
    Si elle n'existe pas, comment pourrait-on l'écrire ?

    En attendant voici mon essai, qui se limite à un argument de type Integer :

    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
    48
    49
    50
    51
     
    { Extrait du manuel FreeBASIC:
      ----------------------------
     
      IIf
     
      Fonction conditionnelle qui retourne une des deux valeurs.
     
      Syntaxe
     
        IIf ( condition, expr_if_true, expr_if_false )
     
      Paramètres
     
        condition
          La condition à tester.
     
        expr_if_true
          Une expression à évaluer et à retourner si la condition est vraie.
          Elle doit retourner une valeur numérique, qui peut être un nombre entier,
          un nombre à virgule flottante ou un pointeur.
     
        expr_if_false
          Une expression à évaluer et à retourner si la condition est fausse.
          Elle doit avoir le même type de nombre que expr_if_true.
    }
     
    Program FonctionIIf;
     
    Function IIf(condition: boolean; a,b: Integer): Integer;
    Begin
      If condition Then IIf:=a Else IIf:=b;
    End;
     
    Var
      i: Byte;
      s: Integer;
     
    Begin
      s:=0;
     
      For i:=0 To 99 Do
        Begin
     
          s := s + IIf ( Odd(i), i, 0 );
     
        End;
     
      Write('La somme des nombres impairs compris entre 0 et 99 est ‚gale … ');
      WriteLn(s,'.');
    End.
    L'Art est long et le Temps est court.

  2. #2
    Expert Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 083
    Points : 17 856
    Points
    17 856

    Par défaut

    Bonjour,

    non cette fonction n'existe pas en Pascal, tout comme la syntaxe suivante (C, PHP, JavaScript...) n'est pas disponible

    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
     
     Var
      i: Byte;
      s: Integer;
     
    Begin
      s:=0;
     
      For i:=0 To 99 Do
        Begin
     
          s := s + ( Odd(i) ? i : 0 );
     
        End;
     
      Write('La somme des nombres impairs compris entre 0 et 99 est ‚gale … ');
      WriteLn(s,'.');
    End.
    on lui substituera soit une expression mathématique Ord(Odd(i)) * i, soit un appel de fonction OddOrZero(i).

    Avec un compilateur Pascal suffisamment récent tu peux déclarer des "overload" pour décliner la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    function iif(cond: Boolean; A, B: Integer): Integer; overload;
    function iif(cond: Boolean; A, B: string): string; overload;
    mais ça risque de créer beaucoup de cas de figure.

    Note qu'avec ce genre d'idées ont été créés dans Préprocesseurs Pascal, une sorte de compilateur qui prend un code Pascal "amélioré" pour le traduire en Pascal standard, tu tapes iff() et le préprocesseur le remplace par un if/then/else qui sera compilé de façon classique.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 986
    Points : 5 706
    Points
    5 706
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par Paul TOTH Voir le message
    on lui substituera soit une expression mathématique Ord(Odd(i)) * i, soit un appel de fonction OddOrZero(i).
    Je cherchais ce petit morceau de code sans le trouver. Merci !


    Citation Envoyé par Paul TOTH Voir le message
    Avec un compilateur Pascal suffisamment récent tu peux déclarer des "overload" pour décliner la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    function iif(cond: Boolean; A, B: Integer): Integer; overload;
    function iif(cond: Boolean; A, B: string): string; overload;
    Ça aussi, c'est noté ! Tiens, je vais essayer de le faire.


    Citation Envoyé par Paul TOTH Voir le message
    tu tapes iff() et le préprocesseur le remplace par un if/then/else qui sera compilé de façon classique.
    Le compilateur FreeBasic a cette fonction. Je me demandais si Turbo Pascal l'avait. Donc c'est un outil à part. Ou alors il faut écrire la procédure qui modifie le fichier... Intéressant !
    L'Art est long et le Temps est court.

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

Discussions similaires

  1. adaptation de la fonction pow
    Par Ptinéwik dans le forum MATLAB
    Réponses: 2
    Dernier message: 29/07/2009, 12h19
  2. Adapter JPanel en fonction de la taille du bureau
    Par skyangel dans le forum Fenêtres/Dialogues
    Réponses: 2
    Dernier message: 09/07/2008, 15h13
  3. Adapter la fonction de recherche de Plone/Zope
    Par StarNab dans le forum Zope
    Réponses: 2
    Dernier message: 07/04/2005, 16h04
  4. [VB.NET] Difficulté de construction... fonction IIF
    Par Pleymo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/02/2005, 21h28
  5. Fonction IIF
    Par ParisMath dans le forum SQL
    Réponses: 2
    Dernier message: 16/01/2004, 22h18

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