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 :

Changer un tableau de A en tableau de B


Sujet :

Prolog

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 29
    Par défaut Changer un tableau de A en tableau de B
    Bonjour,

    Cela fait plus d'une semaine que je lis et regarde des videos partout pendant des heures pour essayer de comprendre comment ecrire le programme suivant en prolog:

    Un tableau de 6x6. le tableau contient que des A. et le but est de change A en B. a chaque fois que la valeur d'une case change(A devient B) les cases qui l'entourent changent aussi (les cases suivantes : celle du dessus, du dessous, a droite et a gauche).
    Le but et resultat final est de convertir le tableau de A en B en respectant cette contrainte.
    J'ai ecris des dizaines de testes et aucun fonctionne. Je ne cherche pas a ce qu'on fasse le boulot pour moi. tout ce je veux c'et qu'on m'explique le raisonnement a suivre si possible.

    Je vous remercie d'avance de votre temps et aide,

    Merci,

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 947
    Par défaut
    Bonjour
    Le plus simple est de montrer les essais qui ont été faits. On pourra juger de ce qui est nécessaire de modifier pour arriver au bon résultat.
    "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 averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 29
    Par défaut
    D'accord, j'ai essayé plusieurs choses, à vrai dire je ne sais même pas comment déclarer une matrice. J'ai commencé par des lignes séparées mais ça ne marche pas des variables sur liste. Je voudrais savoir si c'est comme ça qu'on déclare une matrice sur Prolog :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    matrix([
      [A1,A2,A3,A4,A5,A6],
      [B1,B2,B3,B4,B5,B6],
      [C1,C2,C3,C4,C5,C6],
      [D1,D2,D3,D4,D5,D6],
      [E1,E2,E3,E4,E5,E6],
      [F1,F2,F3,F4,F5,F6]
    ]).
    Je vais attacher toutes les manières que j'ai essayé et qui marchent pas.

    Merci

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 29
    Par défaut
    Bonjour,

    Je viens d'attacher deux exemples des listes et matrice que j'ai essaye mais qui marche pas.
    test list.pltest2.pl

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 947
    Par défaut
    Le premier exemple est parfait, c'est une bonne méthode pour déclarer une matrice. Les deux autres exemples (test2.pl et test list.pl sont faux).
    Je vous donne un exemple d'accès aux lignes et aux colonnes des matrices:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    matrix([
        [1,2,3],
        [4,5,6],
        [7,8,9]
    ]).
     
    ligne(Num, Ligne) :-
       matrix(M),
       nth0(Num, M, Ligne).
     
    colonne(Num, Colonne) :-
        matrix(M),
        maplist(nth0(Num), M, Colonne).
    Resultat:
    ?- ligne(2, Ligne).
    Ligne = [7, 8, 9].

    ?- colonne(2, Colonne).
    Colonne = [3, 6, 9].
    Je vous conseille de bien étudier comment fonctionne le code de colonne/2 !
    "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

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 29
    Par défaut
    Merci pour votre réponse,

    Est-ce la bonne manière d'attaquer ce problème? 4AIT-Project.pdf

    Je pense au raisonnement suivant (en me basant sur mon début de programme copié ci-dessous):

    1-Sélectionner X = 0 (donc je commence par le 'a').
    2-Déterminer la ligner et la colonne de 'a'.
    3-Sélectionner les cell suivante : 'a+1' & 'a-1' horizontalement ET 'a+1' & 'a-1' verticalement
    Maintenant que les cellule voisines sont sélectionnée :
    4-changer 'a' en 'b'
    5-changer les cellules voisines de 'a' en 'b' aussi.
    6- enregistrer la valeur de X.
    7- changer la valeur de X de X a X+1.
    8- Faire appel au prédicat 3.
    9- Faire appel a la règle 4 et 5
    Ainsi de suite.

    Ce raisonnement convient-il au Prolog ?

    Merci pour votre aide.

    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
    :- dynamic ligne/2.
     
    matrix([
        [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]
    ]).
     
    ligne(X, Ligne) :-
       matrix(M),
       nth0(X, M, Ligne),
        assert(ligne(X, Ligne)).
     
    colonne(X, Colonne) :-
        matrix(M),
        maplist(nth0(X), M, Colonne).
     
    voi_vert(X, Y, Z) :-
        ligne(X, Ligne),
        Y is X+1,
        nth0(Y, Ligne, Z), !.
    .
    .
    .

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 947
    Par défaut
    Tout raisonnement est adaptable en Prolog. Il y a des méthodes plus "Prologuienne" que d'autres.
    Si j'ai bien compris, il faut donner la liste des cases à modifier pour passer de l'état "Tout a" à l'état "Tout b".
    Une possibilité est de faire une recherche en largeur jusqu'à trouver la bonne solution, (ce sera forcement la plus courte) mais si la grille n'a pas de solution cela risque d'être très long.
    "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

  8. #8
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2013
    Messages : 29
    Par défaut
    Je viens d'attacher le pdf, si vous avez une seconde pourriez vous me dire comment faut il proceder/raisonner afin d'obtenir le resultat demande.

    VF-MP:VF-MP.pdf

    Merci pour votre aide, ca m'a fait avancer plus que les 10 jorus de recherches sur le Net,
    N

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 947
    Par défaut
    Avez-vous le droit d'utiliser les bibliothèques de contraintes (clp(fd) pour SWI-Prolog, ou clp(b)) .
    Si oui, le problème devient beaucoup plus aisé à résoudre.
    En effet on peut convertir votre problème A vers B en 0 vers 1.
    Une action sur une case pouvant être considérée comme une bascule de 0 vers 1 ou de 1 vers 0, donc en XOR de 1;
    On est ramené à l'arithmétique binaire.
    Réfléchissez au codage de cette version : je vous donne un exemple.
    En supposant que la case (0,0) soit a 0 on doit trouver (A1 + A2+ B1) mod 2 #= 1;
    Il faut aussi que (A1 + A2 + A3 + B2) mod 2 #= 1;
    etc etc ...
    avec tous les Ai Bi Ci ... ayant 0 ou 1 pour valeur.
    "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. Changer un tableau en tableau d'objets
    Par jc313131 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/10/2018, 22h54
  2. Réponses: 10
    Dernier message: 11/01/2017, 18h00
  3. Changer background tableau généré dynamiquement sur rollover
    Par jobo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/01/2009, 20h07
  4. Changer la taille d'un tableau déjà initialisé
    Par totofweb dans le forum C++
    Réponses: 2
    Dernier message: 25/07/2004, 16h55

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