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 :

Problème des 3 cruches : je n'arrive pas à remplir les cruches


Sujet :

Prolog

  1. #1
    Membre actif Avatar de Nicomart
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 205
    Points : 210
    Points
    210
    Par défaut Problème des 3 cruches : je n'arrive pas à remplir les cruches
    Bonjour à tous,

    débutant en Prolog, je cherche à écrire un programme pour le problème des trois cruches. voici mon code :

    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
    % NB : contenance max : 
    % Grande : 31L
    % Moyenne : 11L
    % Petite : 3L
     
    % 3 Actions possibles :
    arc(X,Y):- jeter(X,Y).
    arc(X,Y):- remplir(X,Y).
    arc(X,Y):- transvaser(X,Y).
     
    % Vrai si X n'appartient pas à la liste
    pasdansliste(_,[]).
    pasdansliste(X,[Y|L]) :- X \= Y, pasdansliste(X,L).
     
    % Fonction chemin :
    % Si un arc existe, on le prend
    chemin(X,Y,[],_) :- arc(Y,X).
    % Sinon, on fait une recherche en évitant les boucles
    chemin(X,Y,R,Deja_passe) :- arc(Z,X), pasdansliste(Z,Deja_passe) , chemin(Z,Y,Etat_int,[Z|Deja_passe]), R = [Z|Etat_int].
     
    %----------------Changements d'états----------------------
     
    jeter((A,B,C),(0,B,C)):- A\=0.
    jeter((A,B,C),(A,0,C)):- B\=0.
    jeter((A,B,C),(A,B,0)):- C\=0.
     
    remplir((A,B,C),(31,B,C)):- A\=31.
    remplir((A,B,C),(A,11,C)):- B\=11.
    remplir((A,B,C),(A,B,3)):- C\=3.
     
    transvaser1(A,B,Bmax,Afin,Bfin):- B+A<Bmax,
    				Afin is 0,
    				Bfin is B+A.
    transvaser1(A,B,Bmax,Afin,Bfin):- B+A>=Bmax,
    				Afin is A-(Bmax-B),
    				Bfin is Bmax.
     
    transvaser((A,B,C),(Af,Bf,C)):- A\=0, B\=11, transvaser1(A,B,11,Bf,Af).
    transvaser((A,B,C),(Af,B,Cf)):- A\=0, C\=3, transvaser1(A,C,3,Af,Cf).
    transvaser((A,B,C),(Af,Bf,C)):- B\=0, A\=31, transvaser1(B,A,31,Bf,Af).
    transvaser((A,B,C),(A,Bf,Cf)):- B\=0, C\=3, transvaser1(B,3,C,Bf,Cf).
    transvaser((A,B,C),(Af,B,Cf)):- C\=0, A\=31, transvaser1(C,2,31,Cf,Af).
    transvaser((A,B,C),(A,Bf,Cf)):- C\=0, B\=11, transvaser1(B,C,11,Cf,Bf).
     
    %---------------Appel principal => plantage---------------
     
    % chemin((0,0,0),(7,X,Y),[],L).
    Lors de l'appel (dernière ligne du code), SWI semble ne pas trouver la fonction chemin. Message d'erreur en mode debuggage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR : Undefined procedure: chemin((0,0,0),(7,X,Y),[],L). /_G202
    Je n'arrive pas à trouver mon erreur...

    Merci d'avance

    Nicolas

  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
    Tiens, ça me rappelle quelque chose ...
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    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
    Bon, un petit conseil, mais tu en fais ce que tu veux :
    Pour ce problème, je pense que tu dois essayer de travailler avec des listes d'états. Qu'est-ce qu'un état : une liste de cruches : [cruche(3, V1), cruche(11, V2), cruche(31, V3)]

    Maintenant, à partir de cet état, tu cherches tous les états pouvant être obtenus par transvasement, remplissage ou vidage, et tu construis ainsi des chemins partant de l'état initial en explorant l'arbre des possibilités, tous les chemins de longueur 1, puis tous les chemins de longueur 2 etc jusqu'à trouver un chemin qui te conduise à l'état recherché, à savoir une certaine quantitié d'eau dans la cruche de 31 L je crois.

    Bon courage.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Membre averti Avatar de Shivaneth
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 349
    Points : 341
    Points
    341
    Par défaut
    Nicolas, c'est pas bien de chercher de l'aide sur les forums, travaille tout seul sinon je vais le dire à Peter :p
    Shiv@ Skunk

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par Trap D
    Tiens, ça me rappelle quelque chose ...
    Tiens, c'est bizarre, moi aussi...
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  6. #6
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509
    Par défaut
    ça me rappelle aussi quelquechose... Ah oui le TP noté de prolog

    Sinon nico, tu as réglé ton problème depuis ?

  7. #7
    Membre actif Avatar de Nicomart
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 205
    Points : 210
    Points
    210
    Par défaut
    Je n'ai pas remis les mains dans le code depuis mon post, mais je crois que je comprends la solution de Trap.

    Hélène, si ils ne veulent pas qu'on cherche de l'aide extérieure, ils n'ont qu'à nous le faire en conds d'exams, comme Lex/Yakk l'an dernier De plus, je ne demande pas un code prémaché et prédigéré, mais juste un coup de pouce débloqueur, ce que Trap semble bien avoir compris

  8. #8
    Membre actif Avatar de Nicomart
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 205
    Points : 210
    Points
    210
    Par défaut
    Bon, solution trouvée par mon binôme préféré : le code est bon. C'est juste l'appel qui ne l'est pas...

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

Discussions similaires

  1. [XL-2007] Probl formule avec des intervales de dates
    Par alexandrek dans le forum Excel
    Réponses: 0
    Dernier message: 09/02/2011, 11h56
  2. Réponses: 1
    Dernier message: 11/11/2009, 14h08
  3. Réponses: 12
    Dernier message: 11/04/2006, 17h36
  4. RS 232 envoyer des donnees
    Par psyko_flex dans le forum C
    Réponses: 2
    Dernier message: 22/11/2005, 18h49
  5. utiliser des classes dont on n'a pas le source
    Par kocin dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/08/2004, 16h05

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