FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Un système expert en Panoramic Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Un système expert en Panoramic Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Un système expert en Panoramic Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Un système expert en Panoramic Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Un système expert en Panoramic Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Un système expert en Panoramic Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Un système expert en Panoramic Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Un système expert en Panoramic Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Un système expert en Panoramic Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Un système expert en Panoramic Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Un système expert en Panoramic Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Un système expert en Panoramic Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Un système expert en Panoramic Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Un système expert en Panoramic Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Un système expert en Panoramic Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-25%
Le deal à ne pas rater :
PC Portable Gamer 16,1” HP Victus 16 – 16 Go /512 Go
749.99 € 999.99 €
Voir le deal

 

 Un système expert en Panoramic

Aller en bas 
3 participants
AuteurMessage
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Un système expert en Panoramic Empty
MessageSujet: Un système expert en Panoramic   Un système expert en Panoramic EmptyJeu 26 Jan 2012 - 2:04

Pour m'amuser, j'ai écrit un petit programme ressemblant u, peu à un système expert. Je l'ai surtout fait pour tester une nouvelle technique de programmation permettant de simuler des fenêtres de message et de saisie s'ouvrant en mode modal, c'est-à-dire rendant impossible de continuer dans l'application tant que la fenêtre de message ou de saisie n'est pas validée.

Cela est réussi. La fenêtre de saisie peut contenir des champs de saisie et des boutons, on traite les données selon les boutons cliqués. La fenêtre de messages contient un memo dans lequel on dépose le texte voulu, selon la situation, et on peut le défiler avec la souris pour le voir en entier. Là encore, le programme "s'arrête" pour ne continuer qu'après la fermeture de la fenêtre de messages par la croix rouge.

De plus, j'ai testé une nouvelle façon de regrouper le code, en pousant un peu plus la modularité. Voici le programme principal:
Code:
label labels : gosub labels
gosub variables
gosub GUI

gosub charger_base

end
Court, non ? Je définis juste un label pour pouvoir faire GOSUB labels. Et dans ce sous-programme, je définie tous les labels du programme. Ensuite, j'appelle le sous-programme variables (dont le label a été défini dans le sous-programme labels) pour définir absolument toutes les variables du programme. Puis, j'appelle GUI qui définit l'interface graphque (GUI=Graphical User Interface), donc tous les objets Panoramic avec leurs attributs. Et finalement, j'appelle charger_base qui charge un fichier contenant des données initiales, en occurence ma base de connaissance.

Maintenant pour les fonctionnalités. Le programme est conçu pour réagir à des pseudo-phrases en français, selon un modèle de phrases préformatées pour chaque fonction. Le programme connait 2 types d'ntités: des "nom" et des "verbes". Et avec ces éléments, on peut faire des "affirmations" du type
<sujet> <verbe> <objet> est <vrai/faux>
Cela donne par exemple: <les chats mangent du fromage> est faux.
Dans cet exemple, "les chats" et "du fromage" sont considérés comme des "nom", et "mangent" comme un "verbe". Bien sûr, le programme ne connaît rien à la syntaxe, à la conjugaison, etc. Il faut donc donner tous ces éléments dans leur forme exacte si l'on veut obtenir un résultat significatif.

Pour cela, il y a 4 grandes fonctions:
"Definitions" permet de "définir" un nom ou un verbe.
"Affirmations" permet de mémoriser une phrase telle que celle ci-dessus, à conditions que les éléments soient connues déjà.
"Questions" permet de savoir si une affirmation supposée est connue ou non, ou si elle est vraie ou non.
"Interrogations" permet de voir la totalité des connaissances du programme, ou savoir ce que le programme sait ou ne sait pas sur un mot, un nom ou un verbe.

Tous les messages sont dans un français textuel. Une petite base de connaissance est ici:

Citation :
== SYSTEME_EXPERT BASE DE CONNAISSANCES
== Noms
les chats
les souris
du fromage
== Verbes
mangent
craignent
== Affirmations
les chats|mangent|les souris#vrai
les souris|mangent|les chats#faux
les souris|craignent|les chats#vrai
les chats|mangent|du fromage#faux
les souris|mangent|du fromage#vrai
== EOF ==
et le code du programme est ici:
Code:
' SYSTEME_EXPERT.BAS
'
' Simulation d'intelligence artificielle

' Ce programme réagit à des phrases en Français
' simplifié, selon une syntaxe rigide pré-définie.

' Ce langage contient différents types de phrases
' Définitions:
'  Une définition est une phrase du type:
'    [Je déclare que] <mot> [est un] [verbe|nom|adjectif] [!]
' Affirmations:
'  Une affirmation est une phrase du type
'    <sujet> <verbe> <objet> [.]
'  Si sujet, verbe ou objet sont inconnus,
'  le programme le signale et arrête.
'  L'affirmation est alors vérifiée. Il y a 3 possibilités:
'  1. elle est connue et vraie, le programme répond vrai.
'  2. elle est connue et fausse, le programme répond faux
'  3  elle est inconnue - le programme demande alors
'      s'il faut l'accepter. Si oui, elle est intégrée
'      dans la base de connaissances.
' Questions:
'  Une question est une phrase du type:
'    [Est-ce que] <sujet> <verbe> <objet> [?]
'  la question est alors vérifiée comme une affirmation.
'  si elle est connue et vraie, le programme répond vrai
'  si elle est connue et fausse, le programme répond faux
'  si elle est inconnue, le programme répond inconnu

' La base de connaissance est une liste de déclarations et d'affirmations.
' format:
'  entête
'  déclarations
'  noms
'  verbes
'  affirmations
'  fin de fichier


label labels : gosub labels
gosub variables
gosub GUI

gosub charger_base

end

labels:
label variables, GUI, charger_base, close0
label b_declaration, b_affirmation, b_question, b_interrogation
label b_abandonner_declaration, b_valider_declaration
label b_abandonner_affirmation, b_valider_affirmation
label b_abandonner_question, b_valider_question
label b_abandonner_interrogation, b_valider_interrogation
label option_interrogation, close11, chercher_nom, chercher_verbe
label decoder_affirmation

return

close0:
    file_open_write can_base%,path_base$+base_fichier$
    ' entête
      file_writeln can_base%, base_entete$
    '  noms
      file_writeln can_base%, "== Noms"
      if count(x_noms%)>0
          for i%=1 to count(x_noms%)
              file_writeln can_base%, item_read$(x_noms%,i%)
          next i%
      end_if
    '  verbes
      file_writeln can_base%, "== Verbes"
      if count(x_verbes%)>0
          for i%=1 to count(x_verbes%)
              file_writeln can_base%, item_read$(x_verbes%,i%)
          next i%
      end_if
    '  affirmations
      file_writeln can_base%, "== Affirmations"
      if count(x_affirmations%)>0
          for i%=1 to count(x_affirmations%)
              file_writeln can_base%, item_read$(x_affirmations%,i%)
          next i%
      end_if
    ' fin de fichier
      file_writeln can_base%, "== EOF =="
      file_close can_base%
    return

variables:
' constantes
    dim id$ : id$ = "Système Expert V1.00"
    dim path_base$ : path_base$ = "C:\Langages\Expert\"
    dim base_entete$ : base_entete$ = "== SYSTEME_EXPERT BASE DE CONNAISSANCES"
    dim base_fichier$ : base_fichier$ = "systeme_expert_base.txt"
    dim crlf$ : crlf$ = chr$(13) + chr$(10)
    dim can_base% : can_base% = 1
    dim x_declarations% : x_declarations% = 51
    dim x_noms%        : x_noms%        = 52
    dim x_verbes%      : x_verbes%      = 53
    dim x_affirmations% : x_affirmations% = 54
' variables
    dim s$, s1$, s2$, s3$, i%, j%, res%, onglet%, bool$, bool1$, flag%
    return

GUI:
    on_close 0,close0
    dlist x_declarations% : dlist x_noms% : dlist x_verbes% : dlist x_affirmations%

    caption 0,"Je suis le "+id$ : width 0,650 : height 0,600
    button 1 : top 1,10 : left 1,10 : caption 1,"Déclaration"
      on_click 1,b_declaration
    button 2 : top 2,10 : left 2,110 : caption 2,"Affirmation"
      on_click 2,b_affirmation
    button 3 : top 3,10 : left 3,210 : caption 3,"Question"
      on_click 3,b_question
    button 4 : top 4,10 : left 4,310 : caption 4,"Interrogation"
      on_click 4,b_interrogation
    form 11 : hide 11 : on_close 11,close11 : left 11,100
      top 11,100 : width 11,400 : border_small 11
    memo 12 : parent 12,11 : top 12,10 : left 12,10
    height 12,height(11)-50 : width 12,width(11) - 50

' <déclaration> == [Je déclare que] <mot> [est un] [verbe|nom] [!]
    container 101 : hide 101 : caption 101,"Déclaration"
    top 101,40 : left 101,10 : width 101,600 : height 101,400
    font_size 101,12
    alpha 102 : parent 102,101 : top 102,30 : left 102,10
    font_size 102,12 : font_bold 102
    caption 102,"Je déclare que"
    edit 103 : parent 103,101 : top 103,60 : left 103,40 : width 103,200
    alpha 104 : parent 104,101 : top 104,90 : left 104,70
    font_size 104,12 : font_bold 104
    caption 104,"est un"
    container_option 105 : parent 105,101 : top 105,120 : left 105,100
    width 105,150 : height 105,80
    option 106 : parent 106,105 : top 106,20 : left 106,10 : caption 106,"verbe"
    option 107 : parent 107,105 : top 107,50 : left 107,10 : caption 107,"nom"
    button 198 : parent 198,101 : top 198,230 : left 198,10 : width 198,100
    caption 198,"Abandonner" : on_click 198,b_abandonner_declaration
    button 199 : parent 199,101 : top 199,230 : left 199,130 : width 199,100
    caption 199,"Valider" : on_click 199,b_valider_declaration
    mark_on 106
   
' <affirmation> == <sujet> <verbe> <objet> [.]
    container 201 : hide 201 : caption 201,"Affirmation"
    top 201,40 : left 201,10 : width 201,600 : height 201,400
    font_size 201,12
    alpha 202 : parent 202,201 : top 202,40 : left 202,10
    caption 202,"J'affirme que"
    alpha 203 : parent 203,201 : top 203,70 : left 203,40
    caption 203,"(sujet)"
    edit 204 : parent 204,201 : top 204,70 : left 204,140
    alpha 205 : parent 205,201 : top 205,100 : left 205,70
    caption 205,"(verbe)"
    edit 206 : parent 206,201 : top 206,100 : left 206,170
    alpha 207 : parent 207,201 : top 207,130 : left 207,100
    caption 207,"(objet)"
    edit 208 : parent 208,201 : top 208,130 : left 208,200
    alpha 209 : parent 209,201 : top 209,160 : left 209,130
    caption 209,"(est Vrai/Faux)"
    combo 210 : parent 210,201 : top 210,160 : left 210,250
      item_add 210,"vrai" : item_add 210,"faux" : text 210,"vrai"
        button 298 : parent 298,201 : top 298,230 : left 298,10 : width 298,100
    caption 298,"Abandonner" : on_click 298,b_abandonner_affirmation
    button 299 : parent 299,201 : top 299,230 : left 299,130 : width 299,100
    caption 299,"Valider" : on_click 299,b_valider_affirmation
' <question> == [Est-ce que] <sujet> <verbe> <objet> [?]
    container 301 : hide 301 : caption 301,"Question"
    top 301,40 : left 301,10 : width 301,600 : height 301,400
    font_size 301,12
    alpha 302 : parent 302,301 : top 302,40 : left 302,10
    caption 302,"Est-ce que"
    alpha 303 : parent 303,301 : top 303,70 : left 303,40
    caption 303,"(sujet)"
    edit 304 : parent 304,301 : top 304,70 : left 304,140
    alpha 305 : parent 305,301 : top 305,100 : left 305,70
    caption 305,"(verbe)"
    edit 306 : parent 306,301 : top 306,100 : left 306,170
    alpha 307 : parent 307,301 : top 307,130 : left 307,100
    caption 307,"(objet)"
    edit 308 : parent 308,301 : top 308,130 : left 308,200
    alpha 309 : parent 309,301 : top 309,160 : left 309,130
    caption 309,"(est Vrai/Faux)"
    combo 310 : parent 310,301 : top 310,160 : left 310,250
      item_add 310,"vrai" : item_add 310,"faux" : text 310,"vrai"
    button 398 : parent 398,301 : top 398,230 : left 398,10 : width 398,100
    caption 398,"Abandonner" : on_click 398,b_abandonner_question
    button 399 : parent 399,301 : top 399,230 : left 399,130 : width 399,100
    caption 399,"Valider" : on_click 399,b_valider_question
' <interrogation> == [QUE CONNAIS-TU ?] | [QUE SAIS-TU SUR] <nom> [?]
    container 401 : hide 401 : caption 401,"Interrogation"
    top 401,40 : left 401,10 : width 401,600 : height 401,400
    font_size 401,12
    container_option 402 : parent 402,401 : top 402,20 : left 402,10
    caption 402,"Type d'interrogation"  : width 402,280
    option 403 : parent 403,402 : top 403,40 : left 403,10 : width 403,250
    caption 403,"[QUE CONNAIS-TU ?]" : on_click 403,option_interrogation
    option 404 : parent 404,402 : top 404,70 : left 404,10 : width 404,250
    caption 404,"[QUE SAIS-TU SUR]" : on_click 404,option_interrogation
    edit 405 : parent 405,401 : top 405,90 : left 405,300
    alpha 406 : parent 406,401 : top 406,90 : left 406,430 : caption 406,"[?]"
    button 498 : parent 498,401 : top 498,230 : left 498,10 : width 498,100
    caption 498,"Abandonner" : on_click 498,b_abandonner_interrogation
    button 499 : parent 499,401 : top 499,230 : left 499,130 : width 499,100
    caption 499,"Valider" : on_click 499,b_valider_interrogation
    inactive 405 : mark_on 403
   
    return
   
option_interrogation:
    if checked(403)=1
        inactive 405
    else
        active 405
    end_if
    return

close11:
    hide 11
    hide onglet%
    active 1 : active 2 : active 3 : active 4
    return

charger_base:
    clear x_declarations%
    if file_exists(path_base$+base_fichier$)=1
        file_open_read can_base%,path_base$+base_fichier$
        ' entête
          file_readln can_base%,s$
          if s$<>base_entete$
              message "La base de connaissance est corrompue !"
              file_close can_base%
              return
          end_if
          file_readln can_base%,s$
          if s$<>"== Noms"
              message "La base de connaissance est corrompue !"
              file_close can_base%
              return
          end_if
          repeat
              file_readln can_base%,s$
              if left$(s$,3)<>"== " then item_add x_noms%,s$
          until left$(s$,3)="== "
          if s$<>"== Verbes"
              message "La base de connaissance est corrompue !"
              file_close can_base%
              return
          end_if
          repeat
              file_readln can_base%,s$
              if left$(s$,3)<>"== " then item_add x_verbes%,s$
          until left$(s$,3)="== "
          if s$<>"== Affirmations"
              message "La base de connaissance est corrompue !"
              file_close can_base%
              return
          end_if
          repeat
              file_readln can_base%,s$
              if left$(s$,3)<>"== " then item_add x_affirmations%,s$
          until left$(s$,3)="== "
        file_close can_base%
    else
        file_open_write can_base%,path_base$+base_fichier$
        ' entête
          file_writeln can_base%, base_entete$
        '  noms
          file_writeln can_base%, "== Noms"
        '  verbes
          file_writeln can_base%, "== Verbes"
        '  affirmations
          file_writeln can_base%, "== Affirmations"
        ' fin de fichier
          file_writeln can_base%, "== EOF =="
        file_close can_base%
    end_if
    return
   
b_abandonner_declaration:
    hide 101
    active 1 : active 2 : active 3 : active 4
    return
   
b_valider_declaration:
    onglet% = 101
    if checked(106)=1 then s1$ = caption$(106) : ' "verbe"
    if checked(107)=1 then s1$ = caption$(107) : ' "nom"
    if trim$(text$(103))=""
        clear 12
        item_add 12,"Tu as oublié de spécifier le mot !"
        show 11
        return
    end_if
    s$ = trim$(text$(103))
    if checked(107)=1
        if count(x_noms%)=0
            item_add x_noms%, s$
        else
            for i%=1 to count(x_noms%)
                if s$=item_read$(x_noms%,i%)
                    clear 12
                    item_add 12,"<"+s$+"> est déjà un nom connu."
                    show 11
                    return
                end_if
            next i%
            for i%=1 to count(x_verbes%)
                if s$=item_read$(x_verbes%,i%)
                    clear 12
                    item_add 12,"<"+s$+"> est déjà connu comme verbe."
                    show 11
                    return
                end_if
            next i%
            item_add x_noms%, s$
        end_if
    end_if
    if checked(106)=1
        if count(x_verbes%)=0
            item_add x_verbes%, s$
        else
            for i%=1 to count(x_verbes%)
                if s$=item_read$(x_verbes%,i%)
                    clear 12
                    item_add 12,"<"+s$+"> est déjà un verbe connu."
                    show 11
                    return
                end_if
            next i%
            for i%=1 to count(x_noms%)
                if s$=item_read$(x_noms%,i%)
                    clear 12
                    item_add 12,"<"+s$+"> est déjà connu comme nom."
                    show 11
                    return
                end_if
            next i%
            item_add x_verbes%, s$
        end_if
    end_if
    message "Je valide la déclaration:"+crlf$+"Je déclare que <"+s$+"> est un "+s1$
    hide 101
    active 1 : active 2 : active 3 : active 4
    return
   
b_abandonner_affirmation:
    hide 201
    active 1 : active 2 : active 3 : active 4
    return

b_valider_affirmation:
    onglet% = 201
    s1$ = trim$(text$(204))
    s2$ = trim$(text$(206))
    s3$ = trim$(text$(208))
    bool$ = text$(210)
    s$ = s1$
    gosub chercher_nom
    if res%=0
        clear 12
        item_add 12,"Je ne connais pas le nom <"+s1$+">."
        show 11
        return
    end_if
    s$ = s2$
    gosub chercher_verbe
    if res%=0
        clear 12
        item_add 12,"Je ne connais pas le verbe <"+s2$+">."
        show 11
        return
    end_if
    s$ = s3$
    gosub chercher_nom
    if res%=0
        clear 12
        item_add 12,"Je ne connais pas le nom <"+s3$+">."
        show 11
        return
    end_if
    s$ = s1$+"|"+s2$+"|"+s3$+"#"+bool$
    if count(x_affirmations%)>0
        for i%=1 to count(x_affirmations%)
            if s$=item_read$(x_affirmations%,i%)
                clear 12
                item_add 12,"Je sais déjà que"
                item_add 12,"  <"+s1$+" "+s2$+" "+s3$+"> est "+bool$+" !"
                show 11
                return
            end_if
        next i%
    end_if
    message "Je valide l'affirmation: <"+s1$+" "+s2$+" "+s3$+"> est "+bool$
    item_add x_affirmations%,s$
    hide 201
    active 1 : active 2 : active 3 : active 4
    return

b_abandonner_question:
    hide 301
    active 1 : active 2 : active 3 : active 4
    return

b_valider_question:
    onglet% = 301
    s1$ = trim$(text$(304))
    s2$ = trim$(text$(306))
    s3$ = trim$(text$(308))
    bool$ = text$(310)
    s$ = s1$
    gosub chercher_nom
    if res%=0
        clear 12
        item_add 12,"Je ne connais pas le nom <"+s1$+">."
        show 11
        return
    end_if
    s$ = s2$
    gosub chercher_verbe
    if res%=0
        clear 12
        item_add 12,"Je ne connais pas le verbe <"+s2$+">."
        show 11
        return
    end_if
    s$ = s3$
    gosub chercher_nom
    if res%=0
        clear 12
        item_add 12,"Je ne connais pas le nom <"+s3$+">."
        show 11
        return
    end_if
    if bool$ = "vrai"
        bool1$ = "faux"
    else
        bool1$ = "vrai"
    end_if
    clear 12
    s$ = s1$+"|"+s2$+"|"+s3$+"#"+bool$
    flag% = 0
    if count(x_affirmations%)>0
        for i%=1 to count(x_affirmations%)
            if s$=item_read$(x_affirmations%,i%)
                item_add 12,"Je sais que "
                item_add 12,"  <"+s1$+" "+s2$+" "+s3$+"> est "+bool$+" !"
                item_add 12,"est vrai."
                flag% = 1
                exit_for
            end_if
        next i%
    end_if
    s$ = s1$+"|"+s2$+"|"+s3$+"#"+bool1$
    if count(x_affirmations%)>0
        for i%=1 to count(x_affirmations%)
            if s$=item_read$(x_affirmations%,i%)
                item_add 12,"Je sais que "
                item_add 12,"  <"+s1$+" "+s2$+" "+s3$+"> est "+bool$+" !"
                item_add 12,"est faux."
                flag% = 1
                exit_for
            end_if
        next i%
    end_if
    if flag%=0
        item_add 12,"L'affirmation"
        item_add 12,"  <"+s1$+" "+s2$+" "+s3$+"> est "+bool$+" !"
        item_add 12,"m'est inconnue."
    end_if
    show 11
    return

b_abandonner_interrogation:
    hide 401
    active 1 : active 2 : active 3 : active 4
    return

b_valider_interrogation:
    onglet% = 401
    hide 401
    clear 12
    if checked(403)=1
        item_add 12,"Mes connaissances:"
        item_add 12,""
        if count(x_noms%)=0
            item_add 12,"Je ne connais aucun nom."
        else
            item_add 12,"Je connais les noms suivants:"
            for i%=1 to count(x_noms%)
                item_add 12,item_read$(x_noms%,i%)
            next i%
        end_if
        item_add 12,""
        if count(x_verbes%)=0
            item_add 12,"Je ne connais aucun verbe."
        else
            item_add 12,"Je connais les verbes suivants:"
            for i%=1 to count(x_verbes%)
                item_add 12,item_read$(x_verbes%,i%)
            next i%
        end_if
        item_add 12,""
        if count(x_affirmations%)=0
            item_add 12,"Je ne connais aucune affirmation."
        else
            item_add 12,"Je connais les affirmations suivantes:"
            for i%=1 to count(x_affirmations%)
                s1$ = "<"+item_read$(x_affirmations%,i%)
                gosub decoder_affirmation
                item_add 12,s1$
            next i%
        end_if
        item_add 12,""
        item_add 12,"C'est tout."
        show 11
        return
    else
        s$ = trim$(text$(405))
        clear 12
        item_add 12,"Ce que je sais sur <"+s$+">"
        if count(x_noms%)=0
            item_add 12,"Je ne connais pas le nom <"+s$+">"
        else
            for i%=1 to count(x_noms%)
                if s$=item_read$(x_noms%,i%)
                    item_add 12,"<"+s$+"> est un nom"
                    i% = 0
                    exit_for
                end_if
            next i%
            if i%>0 then item_add 12,"<"+s$+"> n'est pas un nom"
        end_if
        if count(x_verbes%)=0
            item_add 12,"Je ne connais pas le verbe <"+s$+">"
        else
            for i%=1 to count(x_verbes%)
                if s$=item_read$(x_verbes%,i%)
                    item_add 12,"<"+s$+"> est un verbe"
                    i% = 0
                    exit_for
                end_if
            next i%
            if i%>0 then item_add 12,"<"+s$+"> n'est pas un verbe"
        end_if
        if count(x_affirmations%)=0
            item_add 12,"Je ne connais pas l'affirmation sur <"+s$+">"
        else
            item_add 12,""
            for i%=1 to count(x_affirmations%)
                if instr(item_read$(x_affirmations%,i%),s$)>0
                    s1$ = "<"+item_read$(x_affirmations%,i%)
                    gosub decoder_affirmation
                    item_add 12,s1$
                end_if
            next i%
        end_if
        item_add 12,"Je n'en sais pas plus."
        show 11
        return
    end_if
    active 1 : active 2 : active 3 : active 4
    return

b_declaration:
    inactive 1 : inactive 2 : inactive 3 : inactive 4
    show 101
   
    return
   
b_affirmation:
    inactive 1 : inactive 2 : inactive 3 : inactive 4
    show 201
    return
   
b_question:
    inactive 1 : inactive 2 : inactive 3 : inactive 4
    show 301
    return

b_interrogation:
    inactive 1 : inactive 2 : inactive 3 : inactive 4
    show 401
return

chercher_nom:
    res% = 0
    if count(x_noms%)=0 then return
    for i%=1 to count(x_noms%)
        if s$=item_read$(x_noms%,i%)
            res% = i%
            return
        end_if
    next i%
    res% = 0
    return
   
chercher_verbe:
    res% = 0
    if count(x_verbes%)=0 then return
    for i%=1 to count(x_verbes%)
        if s$=item_read$(x_verbes%,i%)
            res% = i%
            return
        end_if
    next i%
    res% = 0
    return

decoder_affirmation:
    j% = instr(s1$,"#")
    s1$ = left$(s1$,j%-1)+"> est "+mid$(s1$,j%+1,len(s1$))
    j% = instr(s1$,"|")
    s1$ = left$(s1$,j%-1)+" "+mid$(s1$,j%+1,len(s1$))
    j% = instr(s1$,"|")
    s1$ = left$(s1$,j%-1)+" "+mid$(s1$,j%+1,len(s1$))
    return
   

Ah, j'oubliais: il y a des variables à configurer pour l'emplacement du fichier de base de connaissance, et le programme s'exprime à la première personne. Amusez-vous bien...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Un système expert en Panoramic Empty
MessageSujet: Re: Un système expert en Panoramic   Un système expert en Panoramic EmptyJeu 26 Jan 2012 - 10:26

Super, le principe peut servir pour beaucoup de choses .... Smile
Voir peut-être pour intégrer un dictionnaire des synonymes (chat, matou, ... mange, dévore, croque, .... ?)
Revenir en haut Aller en bas
exdragon

exdragon


Nombre de messages : 601
Date d'inscription : 05/01/2012

Un système expert en Panoramic Empty
MessageSujet: Re: Un système expert en Panoramic   Un système expert en Panoramic EmptyJeu 26 Jan 2012 - 10:32

Vraiment bravo !!!
Je savais que tu savais faire ce genre d'expert amusant car tu nous en avais fait un, un jour, mais je ne m'attendais pas à ce que tu nous en sorte un encore plus perfectionné Wink
(Dire que c'est juste pour s'amuser....) Wink

Il va certainement me servir à perfectionner l'intelligence de mon jeu de rôles textuel.
Merci encore Klaus, t'est un crack !!!


EDIT :
Bravo pour ta conception dans la structure du programme, c'est beau à voir !!!
Revenir en haut Aller en bas
Contenu sponsorisé





Un système expert en Panoramic Empty
MessageSujet: Re: Un système expert en Panoramic   Un système expert en Panoramic Empty

Revenir en haut Aller en bas
 
Un système expert en Panoramic
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Système expert.
» MINI SYSTEME EXPERT (Intelligence Artificielle)
» Logithèque : une base de données en Panoramic pour Panoramic
» Panoramix - l'expert en Panoramic !
» Systeme d'onglets PANORAMIC

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: