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

Pascal Discussion :

[Débutant] Fonction retournant un booléen


Sujet :

Pascal

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut [Débutant] Fonction retournant un booléen
    Bonjour,

    Je débute en programmation Pascal et j'aurais besoin d'aide sur les booléens(boolean) :

    Voici un exercice d'entraînement que je n'arrive pas à résoudre :
    Ecrire une fonction (a,b,x:real):boolean qui détermine si x est dans un intervalle [a;b] : elle prendra la valeur true si x appartient à [a,b],false sinon.
    Tester dans un programme (on demande à l'utilisateur de saisir a,b, on vérifie a<=b si ce n'est pas le cas on redemande la saisie jusqu'à ce qu'elle soit correcte).
    Pourriez-vous maider à établir ce programme svp

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut
    Voilà, j'ai réussi à une erreur près : le logiciel me met :"Fatal : syntax error ,; expected but ELSE found"
    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
    program ex4a;
    uses console; {$R+}
     
    function point(a,b,x:real):boolean;
    begin
    if (a<x) and (x<b) then point := true
                       else point := false
    end;
     
    var x,a,b :real;
     
    begin
     writeln('entrer les bornes de l"interval a et b :');
     readln(a,b);
    while a>b do
          begin
          writeln('Saisie incorrecte car a>b, recommencez :');
          readln(a,b);
          end;
     writeln('Entrer un nombre réel x :');
     readln(x);
     if point (a,b,x) then writeln('Le réel ' , x:1:2 ,' est compris dans l"interval [',a:1:2, ';',b:1:2,']');
                      else writeln('le réel ' , x:1:2 ,' n"est pas compris dans l"interval [',a:1:2,';',b:1:2,']');
     
     
    end.
    Apparemment le else de l'avant-dernière ligne ne convient pas mais je ne comprends pas pourquoi. Quelqu'un pourrait-il m'aider svp ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Par défaut
    c'est bon j'ai réussi j'ai remplacé else par if not point (a,b,x) then et sa a marché a+++

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 972
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 972
    Par défaut
    Woe,
    Citation Envoyé par sam343 Voir le message
    c'est bon j'ai réussi j'ai remplacé else par if not point (a,b,x) then et sa a marché a+++
    Ce n'est pas la seule modification, elle n'aurait pas suffit pour résoudre ton problème, qui vient en fait du point-virgule qui termine l'instruction juste avant le else.

  5. #5
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function IsInRange(const aValue, aMin, aMax: real): boolean;
    var R : boolean;
    begin
      R := (aValue > aMin) and (aValue < aMax);
      IsInRange := R;
    end;
    il pourrait être possible de faire egalement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function IsInRange(const aValue, aMin, aMax: real): boolean;
    begin
      IsInRange := (aValue > aMin) and (aValue < aMax);
    end;
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 972
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 972
    Par défaut
    Coa,
    Citation Envoyé par Dr.Who Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function IsInRange(const aValue, aMin, aMax: real): boolean;
    var R : boolean;
    begin
      R := (aValue > aMin) and (aValue < aMax);
      IsInRange := R;
    end;
    il pourrait être possible de faire egalement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function IsInRange(const aValue, aMin, aMax: real): boolean;
    begin
      IsInRange := (aValue > aMin) and (aValue < aMax);
    end;
    Pour que ce soit utilisable sans contrainte, j'aurais vérifié que

    aMax >= aMin

    sinon il faut penser à le faire avant chaque appel de la fonction.

  7. #7
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    c'etait surtout pour montrer qu'on avait pas besoin de definir implicitement True ou False sur le booléen.

    faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if quelquechose then truc := true else false;
    est mauvais.

    tout comme faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if quelquechose = true then ...

    maintenant il est vrai que la fonction ne verifie pas que la borne aMin soit bien inferieure à aMax.

    dans ce cas cela rend la fonction un peu plus complexe :
    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
     
    function IsInRange(const aValue, aMin, aMax: real): boolean;
    var vMin, vMax : real;
    begin
      if aMin < aMax then
      begin
        vMin := aMin;
        vMax := aMax;
      end
      else
      begin
        vMax := aMin;
        vMin := aMax;
      end;
     
      IsInRange := (aValue > vMin) and (aValue < vMax);
    end;
    de plus dans son code il à déjà une boucle qui verifie que Min soit < à Max donc la modif est inutile dans ce cas.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 972
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 972
    Par défaut
    Peo,
    Citation Envoyé par Dr.Who Voir le message
    de plus dans son code il à déjà une boucle qui verifie que Min soit < à Max donc la modif est inutile dans ce cas.
    Oui, mais c'est une bonne habitude de créer des fonctions qui soulagent le travail répétitif en amont.

  9. #9
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    Citation Envoyé par droggo Voir le message
    Peo,

    Oui, mais c'est une bonne habitude de créer des fonctions qui soulagent le travail répétitif en amont.

    c'est bien certain!

    moi j'ai plutôt pris l'habitude de forcer le développeur à vérifier les paramètres qu'il rentre dans mes fonctions ... non mais ...
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

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

Discussions similaires

  1. Créer une fonction qui retourne un booléen
    Par Dereck07 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/02/2008, 23h22
  2. Fonction qui retourne un booléen
    Par racoboss dans le forum Langage
    Réponses: 16
    Dernier message: 08/01/2008, 08h01
  3. [JUnit] Comment tester une fonction qui retourne un booléen
    Par Raiden1234 dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 15/12/2007, 19h29
  4. [SQL] Fonction retournant le booléen false qui se transforme en true!
    Par fayred dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/09/2007, 12h37
  5. [Débutant] Fonction qui retourne un objet (classe)
    Par in dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/08/2007, 09h32

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