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 :

Dessiner le graphe K_4


Sujet :

Prolog

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 42
    Points
    42
    Par défaut Dessiner le graphe K_4
    Bonjour,
    J'ai une question pour dessiner un graphe K_4

    si le prédicat ka4(N) dessine le graphe dans un rectangle de N*N caractères

    par exemple:

    ka4(6).
    il doit affichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    a----b
    |\  /|
    | \/ |
    | /\ |
    |/  \|
    c----d
    et pour ka4(7)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    a-----b
    |\   /|
    | \ / |
    |  x  |
    | / \ |
    |/   \|
    c-----d
    Vous pouvez m'expliquer comment il faut faire pour ce type de question ?
    Merci

  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
    Bonjour

    Ça doit être dessiné en mode console ou avec XPCE ?

    Si c'est du mode console il faut adapter ce qui serait fait en C par exemple à la manière Prolog, une double récursion sur le numero de ligne et la deuxième sur le caractère affiché.
    "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
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Bonjour

    Ça doit être dessiné en mode console ou avec XPCE ?

    Si c'est du mode console il faut adapter ce qui serait fait en C par exemple à la manière Prolog, une double récursion sur le numero de ligne et la deuxième sur le caractère affiché.
    Merci pour votre répondse.
    Il est en mode console.
    Vous peuvez m'expliquer plus détaillé?

    Est-ce que je doit distinguer le N est impair ou pair, comme je peux faire?
    Je dois séparer le question en :
    ligne 1;
    ligne (2 à N-1) : (si N est impair ,affichier x)
    ligne N

    comment je dois faire pour
    "une double récursion sur le numero de ligne et la deuxième sur le caractère affiché."


    J'ai écrit le ligne 1 et ligne N
    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
     
     
    ka(N):-
        write('a'),
        N > 0,
        N1 is N -2,
        aff_one(N1),
     
        nl,
        write('c'),
        aff_last(N1).
     
    aff_one(X):-
        (   X=0,
            write('b'),!
        ;
            write('-'),
            Y is X -1,
            aff_one(Y)    
        ).
     
    aff_last(X):-
        (   X=0,
            write('d'),!
        ;
            write('-'),
            Y is X -1,
            aff_last(Y)    
        ).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    | ?- ka(7). 
    a-----b
    c-----d
     
    yes
    {8}
    | ?- ka(6). 
    a----b
    c----d
     
    yes

  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
    Je suis désolé mais je t'ai un peu conduit sur une fausse route, tu peux faire un double forall sur Lig, Col : je te donne le début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    afficheKa4(K) :-
    	forall(between(1, K, I),
    	       (   forall(between(1, K, J), affiche(I, J, K)))).
    Reste plus qu'à écrire le affiche(Lig, Col, K) !
    "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

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Je suis désolé mais je t'ai un peu conduit sur une fausse route, tu peux faire un double forall sur Lig, Col : je te donne le début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    afficheKa4(K) :-
    	forall(between(1, K, I),
    	       (   forall(between(1, K, J), affiche(I, J, K)))).
    Reste plus qu'à écrire le affiche(Lig, Col, K) !
    Je ne trouve pas comment il faut faire avec cette méthode.
    Dans différent case_i_j les affichage sont différent, je ne trouve pas les regèle.

    J'ai essayé continue ancien méthode un peu, mais il y a un problème.

    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
    52
    53
    54
    55
    56
     
     
    ka(N):-
        write('a'),
        N > 0,
        N1 is N -2,
        aff_one(N1),
     
        nl,
        ligne_2_Nmoin1(N1),
     
     
        write('c'),
        aff_last(N1).
     
    aff_one(X):-
        (   X=0,
            write('b'),!
        ;
            write('-'),
            Y is X -1,
            aff_one(Y)    
        ).
     
    aff_last(X):-
        (   X=0,
            write('d'),!
        ;
            write('-'),
            Y is X -1,
            aff_last(Y)    
        ).
     
    mid(X):-
        write('|'),
        X > 0,
        aff_mid(X).
     
    aff_mid(X):-
        (   X=0,
            write('|'),!
        ;
            write('-'),
            Y is X -1,
            aff_mid(Y)    
        ).
     
    ligne_2_Nmoin1(X):-
        (   X=0,!
        ;
            mid(X),
            nl,
            Y is X -1,
            ligne_2_Nmoin1(Y)
     
         ).
    Il affiche comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    a----b
    |----|
    |---|
    |--|
    |-|
    c----d

    commet je peux le modifier comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    a----b
    |----|
    |----|
    |----|
    |----|
    c----d
    Merci.

  6. #6
    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
    Il faut remarquer que
    - si le numero du caractère est celui de la ligne ce doit être '\'.
    - si le numero du caractère est K - le numero de ligne + 1 c'est '/'
    - etc etc.
    Pour avoir la croix 'x' pose-toi la question dans quel cas a-t-on la croix ?
    "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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/04/2006, 11h59
  2. dessiner un graphe
    Par SalutMesProfs dans le forum C
    Réponses: 5
    Dernier message: 01/03/2006, 09h47
  3. Dessiner un graphe
    Par log2n dans le forum 2D
    Réponses: 3
    Dernier message: 27/01/2006, 15h23
  4. [GUI]dessiner un graphe
    Par Malo dans le forum 2D
    Réponses: 9
    Dernier message: 13/09/2005, 17h30
  5. [Dessin]dessiner des graphes
    Par mial dans le forum 2D
    Réponses: 4
    Dernier message: 27/04/2004, 19h51

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