Visual Prolog

Тема в разделе "Другие", создана пользователем ChuckNorris7, 29 ноя 2013.

  1. ChuckNorris7

    ChuckNorris7 New Member

    Регистрация:
    29 ноя 2013
    Сообщения:
    1
    Симпатии:
    0
    В экспертной системе Finansovyy Sovetnik, создать цель, при реализации которой будут собраны данные о финансовых возможностях двух семьей и, попутно, будет решен вопрос у какой из них накопленния достаточны а у какой нет. Вводимые данные, в закоментированном виде, разместите в разделе goal, при проверке они будут использованы для ввода.


    domains
    s=string
    i=integer
    r=real

    facts
    semya(s,i)
    nakopleno(s,r)
    dohody(s,r)
    pitanie_raskh_chel_den(s,r)
    odezhda_raskh_chel_god(s,r)
    obuv_raskh_chel_god(s,r)
    transport_raskh_chel_den(s,r)
    medicina_raskh_chel_god(s,r)
    otpusk_raskh_chel_god(s,r)
    drugie_raskh_chel_mesyac(s,r)

    predicates
    sovet(s,s)
    ocenka_nakopleniy(s,s)
    ocenka_dohodov(s,s)
    raskh_chel_mesyac(s,r)
    run
    dialog(s,s)
    p

    clauses

    run:-

    p,
    write("Esly zhelaete ppsovetovatsya, nazhmite klavishu <y>, esli net - <Enter>"),nl,
    p,readln(Z),
    dialog(Z,Klient),
    sovet(Klient,Sovet),
    nl,p,write("Sovet: ",Sovet,"."),nl,p,write("Do svidaniya"),nl.

    dialog(Z,_):-
    Z<>"y",write("Do svidaniya"),!,fail.

    dialog(_,K):-
    nl,p,write("Vvedite Imya"),nl,
    readln(K),

    nl,p,write("Vvedite chislo chenov v semye"),nl,
    readint(I),
    assertz(semya(K,I)), %semya(K,I)

    %dobavlenie novyh factov
    nl,p,write("Vvedite nakoplennuyu summu"),nl,
    readreal(Zh),
    assertz(nakopleno(K,Zh)),

    nl,p,write("Vvedite summu dohodov"),nl,
    readreal(AP),
    assertz(dohody(K,AP)),

    nl,p,write("Vvedite summu raskhodov na pitanie, na 1 cheloveka v den"),nl,
    readreal(TK),
    assertz(pitanie_raskh_chel_den(K,TK)),

    nl,p,write("Vvedite summu raskhodov na odezhdu, na 1 cheloveka v god"),nl,
    readreal(KiiZh),
    assertz(odezhda_raskh_chel_god(K,KiiZh)),

    nl,p,write("Vvedite summu raskhodov na obuv, na 1 cheloveka v god"),nl,
    readreal(AyqZh),
    assertz(obuv_raskh_chel_god(K,AyqZh)),

    nl,p,write("Vvedite summu raskhodov na transport, na 1 cheloveka v den"),nl,
    readreal(TrKu),
    assertz(transport_raskh_chel_den(K,TrKu)),

    nl,p,write("Vvedite summu raskhodov na medicinu, na 1 cheloveka v god"),nl,
    readreal(MeZh),
    assertz(medicina_raskh_chel_god(K,MeZh)),

    nl,p,write("Vvedite summu raskhodov v otpuske, na 1 cheloveka v god"),nl,
    readreal(DeZh),
    assertz(otpusk_raskh_chel_god(K,DeZh)),

    nl,p,write("Vvedite summu drugih raskhodov , na 1 cheloveka v mesyac"),nl,
    readreal(TurmAy),
    assertz(drugie_raskh_chel_mesyac(K,TurmAy)).


    p:-write("**********************************************************************"),nl.


    %sovet(Klient,Sovet)
    %Ecli nakoplennogo nedostatochno, to nuzhno kopit

    sovet(K,"kopit"):-
    ocenka_nakopleniy(K,"nedostatochno").

    sovet(K,"ispolsovat v biznese"):-
    ocenka_nakopleniy(K,"dostatochno"),
    ocenka_dohodov(K,"dostatochno").

    sovet(K,"dopolnitelnyy sovet"):-
    ocenka_nakopleniy(K,"dostatochno"),
    ocenka_dohodov(K,"nedostatochno").

    %ocenka_nakopleniy(Klient,Ocenka)
    ocenka_nakopleniy(K,"dostatochno"):-
    raskh_chel_mesyac(K,A),
    semya(K,I),
    A6I=A*6*I,
    nakopleno(K,Zh),
    Zh>=A6I.

    ocenka_nakopleniy(K,"nedostatochno"):-
    raskh_chel_mesyac(K,A),
    semya(K,I),
    A6I=A*6*I,
    nakopleno(K,Zh),
    Zh<A6I.

    %ocenka_dohodov(Klient,Ocenka)
    ocenka_dohodov(K,"dostatochno"):-
    raskh_chel_mesyac(K,A),
    semya(K,I),
    AI=A*I,
    dohody(K,P),
    R=P-AI,
    T=1500000/12,
    R>=T.

    ocenka_dohodov(K,"nedostatochno"):-
    raskh_chel_mesyac(K,A),
    semya(K,I),
    AI=A*I,
    dohody(K,P),
    R=P-AI,
    T=1500000/12,
    R<T.

    %raskh_chel_mesyac(Klient,raskhod)
    raskh_chel_mesyac(K,A):-
    pitanie_raskh_chel_den(K,TaKu),TaA=TaKu*30,
    odezhda_raskh_chel_god(K,KiiZh),KiiA=KiiZh/12,
    obuv_raskh_chel_god(K,AyqZh),AyqA=AyqZh/12,
    transport_raskh_chel_den(K,TrKu),TrA=TrKu*30,
    medicina_raskh_chel_god(K,MedZh),MedA=MedZh/12,
    otpusk_raskh_chel_god(K,DemZh),DemA=DemZh/12,
    drugie_raskh_chel_mesyac(K,TutmA),
    A=TaA+KiiA+AyqA+TrA+MedA+DemA+TutmA.

    semya("X",3).
    semya("Y",3).
    semya("Z",3).

    nakopleno("X",4000000).
    nakopleno("Y",4000000).
    nakopleno("Z",1500000).

    dohody("X",450000).
    dohody("Y",400000).
    dohody("Z",200000).

    pitanie_raskh_chel_den("X",1500).
    pitanie_raskh_chel_den("Y",1500).
    pitanie_raskh_chel_den("Z",1500).

    odezhda_raskh_chel_god("X",70000).
    odezhda_raskh_chel_god("Y",70000).
    odezhda_raskh_chel_god("Z",70000).

    obuv_raskh_chel_god("X",40000).
    obuv_raskh_chel_god("Y",40000).
    obuv_raskh_chel_god("Z",40000).

    transport_raskh_chel_den("X",240).
    transport_raskh_chel_den("Y",240).
    transport_raskh_chel_den("Z",240).

    medicina_raskh_chel_god("X",50000).
    medicina_raskh_chel_god("Y",50000).
    medicina_raskh_chel_god("Z",50000).

    otpusk_raskh_chel_god("X",100000).
    otpusk_raskh_chel_god("Y",100000).
    otpusk_raskh_chel_god("Z",100000).

    drugie_raskh_chel_mesyac("X",20000).
    drugie_raskh_chel_mesyac("Y",20000).
    drugie_raskh_chel_mesyac("Z",20000).

    %Sovety:
    %"X" - ispolsovat v biznese
    %"Y" - dopolnitelnyy sovet
    %"Z" - kopit

    goal
    Что необходимо написать в Goal?
     
Загрузка...

Поделиться этой страницей