Advertisement
Guest User

Untitled

a guest
Apr 4th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 4.02 KB | None | 0 0
  1. domains
  2. marks = mark*
  3. students = student*
  4. numgroups = numgr*
  5. student = s(fam,name,otch,military,marks)
  6. fak,fam,name,otch,subj = string
  7. kod,numgr,military,mk = integer
  8. mark = m(subj,mk)
  9. facts
  10. q11(fak,integer)
  11. q21(fak,numgr,integer)
  12. dq31(string,string,string)
  13. dq4(numgr)
  14. dq5(subj,numgr)
  15. predicates
  16. group(fak,kod,numgr,students)
  17. q12(fak)
  18. q1(fak)
  19. q2
  20. q33(integer)
  21. q22
  22. q41(subj,numgr,students)
  23. q42(subj,numgr,marks,students)
  24. q44(subj)
  25. q5(numgr)
  26. q51(students,numgr)
  27. q52(marks,numgr)
  28. count1(students,integer,integer)
  29. find(marks,integer,integer,integer)
  30. count(students,integer,integer)
  31. q331(students)
  32. q312(marks,string,string,string)
  33.  
  34. clauses
  35. group("6f",604,2,[s("Glyanko","Vitaly","Sergeevich",1,[m("Matanaliz",5),m("Matlog",3),m("Fizika",3),m("Elteh",3)]),
  36. s("Dmitriev","Dmitri","Mihailovich",0,[m("Matanaliz",5),m("Matlog",5),m("Fizika",4),m("Elteh",4)]),
  37. s("Botan","B","b",0,[m("Matanaliz",5),m("Matlog",5),m("Fizika",5),m("Elteh",5)]),
  38. s("Kuznecov","Slavik","Sergeevich",1,[m("Matanaliz",4),m("Matlog",4),m("Fizika",4),m("Elteh",2)]),
  39. s("Zahvatkin","Danil","Vicheslavovich",1,[m("Matanaliz",3),m("Matlog",4),m("Fizika",2),m("Elteh",2)])]).
  40. group("5f",505,5,[s("Otlichnic","Otlich","Otlichnevich",1,[m("matan",5),m("fizika",5),m("elteh",5),m("shemoteh",5)]),
  41. s("Ivanov","Ivan","Ivanovich",0,[m("matan",4),m("fizika",4),m("elteh",3),m("shemoteh",4)]),
  42. s("Sahin","Sasha","Alexsandrovich",1,[m("Algebra",4),m("Fizika",2),m("elteh",3),m("shemoteh",4)]),
  43. s("Kukushkin","Anatoli","Petrovich",0,[m("matan",5),m("fizika",3),m("elteh",4),m("shemoteh",4)]),
  44. s("Petrov","Petr","Petrovich",1,[m("matan",2),m("fizika",4),m("elteh",3),m("shemoteh",4)])]).
  45. group("3f",405,4,[s("Sidorov","Anton","Antonovich",1,[m("English",5),m("History",5),m("Algebra",5),m("Graphics",5)]),
  46. s("Balbesov","Balbes","Balbesovich",1,[m("English",4),m("History",4),m("Algebra",2),m("Graphics",3)]),
  47. s("Samaravcev","Krasava","Kras",0,[m("English",5),m("History",5),m("Algebra",4),m("Graphics",4)]),
  48. s("Nevezuchi","Vasil","Vasil",1,[m("English",4),m("History",4),m("Algebra",2),m("Graphica",3)]),
  49. s("Saharov","Ilia","Viktorovich",0,[m("English",5),m("History",5),m("Algebra",5),m("Graphics",5)])]).
  50. group("6f",603,3,[s("Glyanko","Vitaly","Sergeevich",1,[m("Matanaliz",2),m("Matlog",3),m("Fizika",3),m("Elteh",3)]),
  51. s("Krasava","K","K",0,[m("Matanaliz",5),m("Matlog",5),m("Fizika",5),m("Elteh",5)]),
  52. s("Dmitriev","Dmitri","Mihailovich",0,[m("Matanaliz",2),m("Matlog",5),m("Fizika",4),m("Elteh",4)]),
  53. s("durakov","durachok","durakovich",0,[m("Matanaliz",2),m("Matlog",2),m("Fizika",2),m("Elteh",2)]),
  54. s("Zahvatkin","Danil","Vicheslavovich",1,[m("Matanaliz",2),m("Matlog",4),m("Fizika",2),m("Elteh",2)])]).
  55. %1
  56. q12(F):-not(q11(F,_)),assert(q11(F,0)),q1(F).%normal
  57. q1(F):-group(F,_,_,S), q11(F,M), count(S,M,N), retract(q11(F,M)), assert(q11(F,N)), fail.
  58. count([], N, N).
  59. count([A|H], M, N):-M1=M+1, count(H,M1,N).
  60. %2
  61. q22:-assert( q21("",0,0)),q2.%normal
  62. q2:- group(F, _, Q, S), q21(R1, R, N), count1(S, 0, M), N<M, retract(q21(R1, R, N)), assert(q21(F, Q, M)), fail.
  63. count1([], N, N).
  64. count1([s(_, _, _, _, Z)|H], M, N):-find(Z, 0 ,0, 1), M1=M+1, count1(H, M1, N); count1(H, M, N).
  65. find([], N, N, 1).
  66. find([], M, M, 0).
  67. find([m(A,B)|H], N, Z, M):- B=5, N1=N+1, Z1=Z+1, find(H, N1, Z1, M).
  68. find([m(A,B)|H], N, Z, M):- Z1=Z+1, find(H, N, Z1, M).
  69. %5
  70. q44(Sub):-dq4(Gr),write('*',Gr),nl,fail.
  71. q44(Sub):-not(dq4(_)),group(_,_,G,L),q41(Sub,G,L),fail.
  72. q41(_,_,[]).
  73. q41(Sub,G,[H|T]):-H=s(_,_,_,_,Ma),q42(Sub,G,Ma,T).
  74. q42(Sub,G,[],S):-q41(Sub,G,S).
  75. q42(Sub,G,[H|T],S):-H=m(Subj,_),Subj=Sub,write(G),nl,assert(dq4(G)),!.
  76. q42(Sub,G,[H|T],S):-H=m(Subj,_),Subj<>Sub,q42(Sub,G,T,S).
  77. %3
  78. q5(Gr):-dq5(Sub,Gr),write('$',Sub),nl,fail.%normal
  79. q5(Gr):-not(dq5(_,Gr)),group(_,_,N,L),Gr=N,q51(L,Gr),fail.
  80. q51([H|T],Gr):-H=s(_,_,_,_,P),q52(P,Gr).
  81. q52([],_).
  82. q52([H|T],Gr):-H=m(S,_),write(S),nl,assert(dq5(S,Gr)),q52(T,Gr).
  83. %4
  84. q33(NG):-dq31(F,I,O),write('*',F,I,O),nl,fail.
  85. q33(NG):-not(dq31(_,_,_)),group(_,_,NUM,ListStudents), NUM = NG, q331(ListStudents), fail.
  86. q331([H|T]):- H = s(F,I,O,_,Marks),
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement