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

Prolog Discussion :

Boucle while avec 2 conditions OU


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Boucle while avec 2 conditions OU
    Bonjour à tous,

    Voila je cherche à imiter ce programme en prolog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    L'utilisateur entre une valeur i
    TANT QUE i<1 OU i>5
    L'utilisateur doit re-rentrer une valeur i
    FIN TANT QUE
    Cela me donne ça en prolog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    orientation(O) :- read(O), verifO(O).
    verifO(O) :- O < 1, write('Entrez une valeur comprise entre 1 et 4 : '), orientation(O).
    verifO(O) :- O > 5, write('Entrez une valeur comprise entre 1 et 4 : '), orientation(O).
    verifO(O).
    Cela ne fonctionne pas voila le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    orientation(O).
    10.
    Entrez une valeur comprise entre 1 et 4 : 9.
     
    O = 10
     
    (32 ms) yes
    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Si tu es sous SWI-Prolog, tape
    ?- trace.

    ?- orientation(X).
    et tu comprendras ton erreur.
    Tu rentres d'abord 30,
    le test O > 5 réussit, le message "'Entrez une valeur comprise entre 1 et 4 : " s'affiche et tu dois ressaisir une valeur, mais avec ton codage, la variable O est déjà liée à 30, donc, lorsque tu tapes la valeur 2, read(O) échoue puisque O est lié à 30, ,la deuxième règle verif(O) échoue et passe donc à la troisième qui elle réussit mais avec O toujours lié à 30 ! (les joies de l'unification !!! )

    PS : pour t'en sortir, il ne faut pas que tu appelles orientation(O) dans verif(O), tu dois tester le retour de verif dans orientation et agir en conséquence.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci bien Trap D j'ai réussi en corrigeant comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    orientation(h,O) :- read(O), verifO(O).
    orientation(h,O1) :- write('Entrez une valeur comprise entre 1 et 4 : '), orientation(h,O1).
    verifO(O) :- O > 1, O < 5 .

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Ça marche "à moitié", voici ce que j'obtiens avec ton code :
    1 ?- orientation(h, O).
    |: 12.
    Entrez une valeur comprise entre 1 et 4 : 0.
    Entrez une valeur comprise entre 1 et 4 : 3.
    O = 3 ;
    Entrez une valeur comprise entre 1 et 4 : 2.
    O = 2 .

    2 ?-
    Si je tape ';' (après O = 3), le programme continue, mais si je tapes RET (après O = 2) le programme s'arrête.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Un p'ti cut bien placé derrière derrière la nuque de verifO(O):

    orientation(h,O) :- read(O), verifO(O),!.

    Et sa fonctionne à merveille

    Merci encore.

Discussions similaires

  1. Boucle While avec nombre variable de conditions
    Par jazzybluesy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/09/2012, 20h05
  2. boucle while avec Or qui ne marche pas
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/01/2009, 00h33
  3. Boucle while avec base de données
    Par bremer dans le forum Langage
    Réponses: 9
    Dernier message: 08/09/2008, 16h59
  4. Boucle do while avec des conditions multiples
    Par UrSuS AmErIcAnUs dans le forum C
    Réponses: 4
    Dernier message: 19/06/2008, 17h13
  5. Boucle while avec action sur table SQL
    Par kamikazbe dans le forum JDBC
    Réponses: 4
    Dernier message: 01/06/2007, 12h46

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