Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. % Vasilenko V. IVBO-06-16   Variant 15
  2.  
  3. domains
  4. i = integer
  5. s = string
  6. il = i*
  7. pr = pair(i, i)
  8. pair_list = pr*
  9. bi_t = tree_b(bi_t, i, bi_t); nil
  10. avl=avl(bt,i);nil
  11. bt=bt(avl,i,avl);nil
  12.  
  13. predicates
  14.     nondeterm smpl(i, i, il)
  15.     nondeterm solve(i)
  16.     nondeterm do(i) % Меню
  17.     nondeterm translate(il, real, real)
  18.     nondeterm checkLists(il, il)
  19.     nondeterm checkLength(il, il) % Проверка двух списков на одинаковую длину
  20.     nondeterm find(il, i, i)
  21.     nondeterm checkList_47(il, il, il)
  22.     nondeterm cutList(il, i, i, il) % Возвращает спискок, вырезая из него нужные числа
  23.     nondeterm checkP(i, il)
  24.     nondeterm getDiagram(il, i) % Рисует горизонтальную диаграмму для списка чисел
  25.     nondeterm writeLine(i, i)
  26.     nondeterm setWeight(il, i, i)
  27.     nondeterm run(avl)
  28.     nondeterm getMulti(il, il, pair_list)
  29.     nondeterm checkIdentity(i, il, pair_list, pair_list, pair_list)
  30.     nondeterm addPair(i, il, pair_list, i, pair_list)
  31.     nondeterm checkPair(i, pr, i)
  32.     nondeterm map(bi_t, i) % Функция для отрисовки дерева
  33.     nondeterm tab(i) % Функция для отрисовки табов (Используется при отрисовке дерева)
  34.     nondeterm create_tree(bi_t, bi_t) % Функция для создания бинарного дерева
  35.     nondeterm insert(i, bi_t, bi_t) Функция для вставки дерева
  36.     nondeterm insertA(i,avl,avl)
  37.     nondeterm getPath(i, bi_t, s, s) % Возвращает путь в дереве до указанной вершины
  38.     nondeterm unionA(avl,i,avl,i,avl,avl)
  39.     nondeterm map_86(avl, i) % Функция для отрисовки АВЛ дерева
  40.     nondeterm findMax(avl, i)
  41.     nondeterm findMin(avl, i)
  42.     nondeterm getMax(i,i, i) % Return max count
  43.     nondeterm getMin(i, i, i) % Return min count
  44.    
  45.     max(i,i,i) Возвращает наибольшее из двух чисел
  46.     add(pair_list, i, i, pair_list)
  47.     writePairList(pair_list) выводит лист пар чисел на экран
  48.     writePair(pr) Выводит пару чисел на экран
  49.     getL(il, i, i)
  50.     add(i,il,il)
  51.     divide(il, il, il)
  52.     divide(il, i, il, il)  
  53.     divideList(il, i, i, il, il)
  54.     doubleArrays(il, il, il)
  55.     checkList_29(il, i, i)
  56.     numbersList(il, il)
  57.     length(il, i) % Возвращает длину листа
  58.     readlist(il) % Функция для заполнения листа
  59. clauses
  60. % Меню для работы с программой
  61. % 99 - код для перезапуска меню
  62. do(I):-
  63.     I=99,
  64.     write("***Enter current program***"),nl,nl,
  65.     write("-1) Number 4"),nl,
  66.     write("-2) Number 6"),nl,
  67.     write("-3) Number 13"),nl,
  68.     write("-4) Number 20"),nl,
  69.     write("-5) Number 22"),nl,
  70.     write("-6) Number 29"),nl,
  71.     write("-7) Number 38"),nl,
  72.     write("-8) Number 45"),nl,
  73.     write("-9) Number 47"),nl,
  74.     write("-10) Number 54"),nl,
  75.     write("-11) Number 56"),nl,
  76.     write("-12) Number 72"),nl,
  77.     write("-13) Number 84"),nl,
  78.     write("-14) Number 86"),nl,nl,
  79.    
  80.     write("--or enter empty string for quit--"),nl,
  81.     readint(Number),
  82.     do(Number).
  83. do(I):-
  84.     I=1,
  85.     write("Current number = "), readint(N), write("Prime factors = "),
  86.     solve(N),nl,
  87.     do(99).
  88.  
  89. do(I):-
  90.     I=2,
  91.     readlist(EnteredList),nl,
  92.         translate(EnteredList, _, K),
  93.         write(K),nl,nl,
  94.     do(99).
  95. do(I):-
  96.     I=3,
  97.     readlist(EnteredList),
  98.         numbersList(EnteredList, SignList),
  99.         write(SignList),nl,nl,
  100.     do(99).
  101. do(I):-
  102.     I=4,
  103.     readlist(EnteredList),
  104.         doubleArrays(FirstList, SecondList, EnteredList),
  105.         write("First list: ", FirstList),nl,
  106.         write("SecondList: ", SecondList),nl,nl,
  107.         do(99).
  108. do(I):-
  109.     I=5,
  110.     readlist(EnteredList),
  111.         divide(EnteredList, NegativePos, PositivePos),
  112.         write("Negative pos: ", NegativePos),nl,
  113.         write("Positive pos: ", PositivePos),nl,nl,
  114.         do(99).
  115.    
  116. do(I):-
  117.     I=6,
  118.     readlist(EnteredList),nl,
  119.     write("Write current number: "),readint(CurrentNumber),
  120.         checkList_29(EnteredList, CurrentNumber, Count),
  121.         write("Result: ", Count),nl,nl,
  122.         do(99).
  123. do(I):-
  124.     I=7,
  125.     readlist(EnteredList),nl,
  126.     write("Write current element: "),readint(CurrentNumber),
  127.         divideList(EnteredList, CurrentNumber, 0, FirstList, SecondList),
  128.         write("FirstList: ", FirstList),nl,
  129.         write("SecondList: ", SecondList),nl,nl,
  130.         do(99).
  131. do(I):-
  132.     I=8,
  133.     write("***Enter first list***"),nl,
  134.     readlist(FirstList),nl,
  135.     write("***Enter second list***"),nl,
  136.     readlist(SecondList),nl,
  137.     checkLength(FirstList, SecondList),nl,
  138.     do(99).
  139. do(I):-
  140.     I=9,
  141.     write("***Enter list***"),nl,
  142.     readlist(EnteredList),nl,
  143.     checkList_47(EnteredList, EnteredList, []),nl,
  144.     do(99).
  145.    
  146. do(I):-
  147.     I=10,
  148.     write("***Enter list***"),nl,
  149.     readlist(EnteredList),nl,
  150.     write("***Enter current position***"),nl,
  151.     readint(Pos),
  152.     checkP(Pos,EnteredList),
  153.     write("***Enter length***"),nl,
  154.     readint(Length),   
  155.     cutList(EnteredList, Pos, Length, []),nl,
  156.     do(99).
  157. do(I):-
  158.     I=11,
  159.     write("***Enter list***"),nl,
  160.     readlist(EnteredList),nl,
  161.     setWeight(EnteredList, 0, Weight),
  162.     getDiagram(EnteredList, Weight),nl,
  163.     do(99).
  164. do(I):-
  165.     I=12,
  166.     write("***Enter list***"),nl,
  167.     readlist(EnteredList),nl,
  168.     getMulti(EnteredList, EnteredList, []),nl,
  169.     do(99).
  170. do(I):-
  171.     I=13,
  172.     write("***Enter binary tree***"), nl,
  173.     create_tree(nil, Tree),nl,
  174.     write("Enter current: "),nl,
  175.     readint(Cur),
  176.     getPath(Cur, Tree, " ", Result),
  177.     write("Result: ", Result),nl,nl,
  178.     do(99).
  179. do(I):-
  180.     I=14,
  181.     run(avl(nil,0)),nl,
  182.     do(99).
  183.    
  184.     %******************Number 4**************
  185.     % Func return prime factors of current count
  186.     smpl(1,2,[1]):-!.
  187.     smpl(A,A,[A]):-!.
  188.     smpl(A,B,[B|C]):-
  189.         A mod B=0,!,
  190.         E=A div B,
  191.         smpl(E,B,C).
  192.     smpl(A,2,B):-!,
  193.         smpl(A,3,B).
  194.     smpl(A,B,C):-
  195.         D=B+2,
  196.         smpl(A,D,C).
  197.     solve(A):-
  198.         A<0,
  199.         A1 = -A,
  200.         smpl(A1,2,L),
  201.         L1 = [-1|L],
  202.         write(L1).
  203.     solve(A):-
  204.         A>0,
  205.         smpl(A,2,L),
  206.         write(L).
  207.     solve(0):-write(0).
  208.    
  209.     %***************************************
  210.    
  211.     %************Number 6************
  212.     % Func is used for translate number from decimal to binary
  213.     translate([], 0.5, 0.0).
  214.     translate([X|List1], Y, K):-
  215.         translate(List1, Y1, K1),
  216.         Y=Y1*2,
  217.         K=K1+Y*X.
  218.     %********************************
  219.    
  220.     %***********Number 13************
  221.     % Func is used for change sign of counts in current list
  222.     numbersList([], []):-!.
  223.         numbersList([Head|Tail], [SignHead|SignTail]):-
  224.             SignHead = -Head,
  225.             numbersList(Tail, SignTail).
  226.        %**********************************
  227.        
  228.        %**************Number 20***********
  229.        % Func is used by divide current list for two lists
  230.        % 1 - With positive positions
  231.        % 2- With negative positions
  232.         doubleArrays([X], [ ], [X]):-!.
  233.     doubleArrays([ ], [Y], [Y]):-!.
  234.     doubleArrays([ ], [ ], [ ]):-!.
  235.     doubleArrays([X | Xs], [Y | Ys], [X, Y | Zs]) :- % X for negative, Y for Positive list
  236.             doubleArrays(Xs, Ys, Zs). % And call this func again with new params
  237.         %************************************
  238.        
  239.         %************Number 22***************
  240.         divide(List, Negative, Positive):-
  241.             divide(List, 1, Negative, Positive).
  242.    
  243.     divide([], _, [], []):-!.
  244.  
  245.     divide([Head|Tail], Pos, [Pos|TailNegative], Positive):-
  246.             Head < 0, !, NextPos = Pos + 1,
  247.         divide(Tail, NextPos, TailNegative, Positive).
  248.  
  249.     divide([Head|Tail], Pos, Negative, [Pos|TailPositive]):-
  250.         Head > 0, !, NextPos = Pos + 1,
  251.         divide(Tail, NextPos, Negative, TailPositive).
  252.  
  253.     divide([_|Tail], Pos, Negative, Positive):-
  254.             NextPos = Pos + 1, % Head = 0
  255.             divide(Tail, NextPos, Negative, Positive).
  256.         %***************************************
  257.        
  258.         %***************Number 29****************
  259.         checkList_29([A|B],A,X):-!,checkList_29(B,A,Y), X = Y+1.
  260.     checkList_29([_|B],C,X):-checkList_29(B,C,X).
  261.     checkList_29([],_,0).  
  262.     %****************************************
  263.    
  264.     %****************Number 38***************
  265.     divideList([],_,_,[],[]):-!.
  266.         divideList([H|T],CurrentNumber,CurrentPos,[H|Tb],Lm):-
  267.             CurrentNumber+1 > CurrentPos+1,
  268.             NextPos = CurrentPos + 1,
  269.             divideList(T,CurrentNumber,NextPos, Tb,Lm),!.
  270.         divideList([H|T],CurrentNumber,CurrentPos,Lb,[H|Tm]):-
  271.             divideList(T,CurrentNumber, CurrentPos, Lb,Tm).
  272.     %*****************************************
  273.    
  274.     %*****************Number 45***************
  275.     checkLists([], []):-
  276.         write("Lists equals!"),nl,!.
  277.     checkLists([], _):-
  278.         write("Lists equals!"),nl,!.
  279.        
  280.     checkLists([H|T], L):-
  281.         find(L, H, Count),
  282.         Count<>0,
  283.         checkLists(T, L).  
  284.        
  285.     checkLists([H|_], L):-
  286.         find(L, H, Count),
  287.         Count=0,
  288.         write("Lists not equals!"),nl,!.   
  289.    
  290.     checkLength(List1, List2):-
  291.         length(List1, L1),
  292.         length(List2, L2)
  293.         L1<>L2,
  294.         write("Lists not equals!"),nl,!.
  295.        
  296.     checkLength(List1, List2):-
  297.         length(List1, L1),
  298.         length(List2, L2)
  299.         L1=L2,
  300.         checkLists(List1, List2).
  301.     %********************************************
  302.    
  303.     %****************Number 47*******************
  304.     checkList_47([],[],[]):-!.
  305.     checkList_47([H|T], EnteredList, Result):-
  306.         find(EnteredList, H, Count),
  307.         Count>1,
  308.         find(Result, H, Count2),
  309.         Count2=0,
  310.         add(H, Result, NewR),
  311.         checkList_47(T, EnteredList, NewR).
  312.     checkList_47([H|T], EnteredList, Result):-
  313.         find(EnteredList, H, Count),
  314.         Count < 2,
  315.         checkList_47(T, EnteredList, Result).
  316.     checkList_47([H|T], EnteredList, Result):-
  317.         find(EnteredList, H, Count),
  318.         Count >1,
  319.         find(Result, H, Count2),
  320.         Count2<>0,
  321.         checkList_47(T, EnteredList, Result).
  322.  
  323.     checkList_47([], _, Result):-
  324.         write("Result: "),
  325.         write(Result),nl.
  326.    
  327.     %******************************************
  328.    
  329.     %*****************Number 54****************
  330.     cutList([], _, _, Result):-write("Result: ", Result),nl.
  331.     cutList([H|T], P, L, Result):-
  332.         P > 1,
  333.         NewP = P - 1,
  334.         add(H, Result, NewR),
  335.         cutList(T, NewP, L, NewR).
  336.     cutList([_|T], P, L, Result):-
  337.         P < 2,
  338.         L > 0,
  339.         NewL = L - 1,
  340.         cutList(T, P, NewL, Result).
  341.     cutList([H|T], P, L, Result):-
  342.         P < 2,
  343.         L < 1,
  344.         add(H, Result, NewR),
  345.         cutList(T, P, L, NewR).
  346.    
  347.     checkP(Pos, List):-
  348.         Pos>0,
  349.         getL(List, 0, Result),
  350.         NewR = Result + 1,
  351.         Pos<NewR.
  352.     checkP(Pos, List):-
  353.         Pos>0,
  354.         getL(List, 0, Result),
  355.         Pos>Result,
  356.         write("Invalid position!"),nl,fail.
  357.     checkP(Pos, _):-
  358.         Pos<1,
  359.         write("Invalid position!"),nl,fail.
  360.    
  361.     getL([], L, Result):-Result = L.
  362.     getL([_|T], L, Result):-
  363.         NewL = L + 1,
  364.         getL(T, NewL, Result).
  365.     %**************************************************
  366.    
  367.     %*******************Number 56**********************
  368.     getDiagram([], _).
  369.     getDiagram([H|T], W):-
  370.         write(" "),
  371.         writeLine(H, W),
  372.         getDiagram(T, W).
  373.        
  374.     writeLine(E, I):-
  375.         E < 0,
  376.         I = E,
  377.         write(E),write(" "),
  378.         NewI = I + 1,
  379.         writeLine(E, NewI).
  380.     writeLine(E, I):-
  381.         E < 0,
  382.         I < E,
  383.         write(" "),
  384.         NewI = I + 1,
  385.         writeLine(E, NewI).
  386.     writeLine(E, I):-
  387.         E < 0,
  388.         I > E,
  389.         I <> 1,
  390.         write("!"),
  391.         NewI = I + 1,
  392.         writeLine(E, NewI).
  393.     writeLine(E, I):-
  394.         E < 0,
  395.         I > E,
  396.         I = 1,
  397.         write("|"),nl. 
  398.     writeLine(E, I):-
  399.         E > 0,
  400.         I < 0,
  401.         write(" "),
  402.         NewI = I + 1,
  403.         writeLine(E, NewI).
  404.     writeLine(E, I):-
  405.         E > 0,
  406.         I = 0,
  407.         write("    "),
  408.         write("|"),
  409.         NewI = I + 1,
  410.         writeLine(E, NewI).
  411.     writeLine(E, I):-
  412.         E > 0,
  413.         I > 0,
  414.         I < E,
  415.         write("!"),
  416.         NewI = I + 1,
  417.         writeLine(E, NewI).
  418.     writeLine(E, I):-
  419.         E > 0,
  420.         I > 0,
  421.         I = E,
  422.         write("!"),
  423.         NewI = I + 1,
  424.         writeLine(E, NewI).
  425.     writeLine(E, I):-
  426.         E > 0,
  427.         I > 0,
  428.         I > E,
  429.         write(E),nl.
  430.        
  431.     writeLine(E, I):-
  432.         E = 0,
  433.         I < 1,
  434.         write(" "),
  435.         NewI = I + 1,
  436.         NewI <> E,
  437.         writeLine(E, NewI).
  438.     writeLine(E, I):-
  439.         E = 0,
  440.         I < 1,
  441.         write(" "),
  442.         NewI = I + 1,
  443.         NewI = E,
  444.         write(E),
  445.         writeLine(E, NewI).
  446.     writeLine(E, I):-
  447.         E = 0,
  448.         I = 1,
  449.         write("|"),nl.
  450.  
  451.     setWeight([], W, Result):-Result = W.
  452.     setWeight([H|T], W, Result):-
  453.         H < W,
  454.         NewW = H,
  455.         setWeight(T, NewW, Result).
  456.     setWeight([H|T], W, Result):-
  457.         H > W,
  458.         setWeight(T, W, Result).
  459.     setWeight([H|T], W, Result):-
  460.         H = W,
  461.         setWeight(T, W, Result).
  462.     %*****************************************
  463.    
  464.     %*****************Number 72***************
  465.     getMulti([], _,Result):-writePairList(Result),nl,write(Result),nl,nl.
  466.     getMulti([H|T], List, Result):-
  467.         checkIdentity(H, List, Result, Result, NewR),
  468.         getMulti(T,List, NewR).
  469.    
  470.     writePairList([]).
  471.     writePairList([H|T]):-
  472.         writePair(H),
  473.         writePairList(T).
  474.     writePair(pair(E,C)):-
  475.         write("Element: ", E),
  476.         write("  Count: ", C),nl.
  477.  
  478.     addPair(E, [], PairL, Count, Result):-
  479.         add(PairL, E, Count, NewR),
  480.         Result = NewR
  481.     addPair(E, [H|T], PairL, Count, Result):-
  482.         E<>H,
  483.         addPair(E, T, PairL, Count, Result).   
  484.     addPair(E, [H|T], PairL, Count, Result):-
  485.         E = H,
  486.         NewC = Count + 1,
  487.         addPair(E, T, PairL, NewC, Result).
  488.        
  489.     add([],E,C,Res):-
  490.         Res = [pair(E,C)].
  491.     add([H|T],E,C,[H|Res]):-
  492.             add(T,E,C,Res).
  493.  
  494.     checkIdentity(E, List, ListForReturn, [], Result):-
  495.         addPair(E, List, ListForReturn, 0, NewR),
  496.         Result = NewR.
  497.     checkIdentity(E, List, ListForReturn, [H|T], Result):-
  498.         checkPair(E,H, Res),
  499.         Res=1,
  500.         checkIdentity(E, List, ListForReturn, T, Result).  
  501.     checkIdentity(E, _, ListForReturn, [H|_], PairList):-
  502.         checkPair(E,H, Res),
  503.         Res=0,
  504.         PairList = ListForReturn.
  505.        
  506.     checkPair(E, pair(E2,_), Res):-
  507.         E=E2,
  508.         Res = 0.
  509.     checkPair(E, pair(E2,_), Res):-
  510.         E<>E2,
  511.         Res = 1.
  512.     %********************************************
  513.    
  514.     %******************Number 84*****************
  515.     getPath(_, nil, _, _).     
  516.     getPath(Current, tree_b(_, E, _), Path, Result):-
  517.         Current = E,
  518.         concat(Path, "->", NewP),
  519.         str_int(S, E),
  520.         concat(NewP, S, Res),
  521.         Result = Res,!.
  522.     getPath(Current, tree_b(Left, E, Right), Path, Result):-
  523.         Current <> E,
  524.         Path <> " ",
  525.         concat(Path, "->", NewP),
  526.         str_int(S, E),
  527.         concat(NewP, S, Res),
  528.         getPath(Current, Left, Res, Result),
  529.         getPath(Current, Right, Res, Result).
  530.     getPath(Current, tree_b(Left, E, Right), Path, Result):-
  531.         Current <> E,
  532.         Path = " ",
  533.         str_int(Res, E),
  534.         getPath(Current, Left, Res, Result),
  535.         getPath(Current, Right, Res, Result).      
  536.  
  537.     create_tree(Tree, NewTree):-
  538.         readint(C), !,
  539.         insert(C, Tree, TempTree),
  540.         nl, map(TempTree, 0), nl, nl,
  541.         create_tree(TempTree, NewTree).
  542.     create_tree(Tree, Tree).
  543.    
  544.     insert(N, nil, tree_b(nil, N, nil)).
  545.     insert(E, tree_b(Left, E, Right), tree_b(Left, E, Right)).
  546.    
  547.     insert(N, tree_b(Left, E, Right), tree_b(NLeft, E, Right)):-
  548.         N < E,
  549.         insert(N, Left, NLeft).
  550.     insert(N, tree_b(Left, E, Right), tree_b(Left, E, NRight)):-
  551.         E < N,
  552.         insert(N, Right, NRight).
  553.        
  554.     map(nil, _).
  555.     map(tree_b(Left, E, Right), D):-
  556.         NewD = D + 1,
  557.         map(Right, NewD),
  558.         tab(D), write(E), nl,
  559.         map(Left, NewD).
  560.        
  561.     tab(0).
  562.     tab(D):-
  563.         write("     "),
  564.         NewD = D - 1,
  565.         tab(NewD).
  566.     %********************************************
  567.    
  568.     %*****************Number 86******************
  569.     findMax(avl(bt(avl(nil,0), E, avl(nil,0)),_), E).
  570.     findMax(avl(bt(avl(nil,0), E, R), _), Max):-
  571.         findMax(R, RMax),
  572.         getMax(E, RMax, Max).
  573.     findMax(avl(bt(L, E, avl(nil,0)), _), Max):-
  574.         findMax(L, LMax),
  575.         getMax(E, LMax, Max).
  576.     findMax(avl(bt(L, E, R), _), Max):-
  577.         findMax(L, LMax),
  578.         findMax(R, RMax),
  579.         getMax(RMax, LMax, Res),
  580.         getMax(Res,E,Max).
  581.    
  582.     findMin(avl(bt(avl(nil,0), E, avl(nil,0)),_), E).
  583.     findMin(avl(bt(avl(nil,0), E, R), _), Min):-
  584.         findMin(R, RMin),
  585.         getMin(E, RMin, Min).
  586.     findMin(avl(bt(L, E, avl(nil,0)), _), Min):-
  587.         findMin(L, LMin),
  588.         getMin(E, LMin, Min).
  589.     findMin(avl(bt(L, E, R), _), Min):-
  590.         findMin(L, LMin),
  591.         findMin(R, RMin),
  592.         getMin(RMin, LMin, Res),
  593.         getMin(Res,E,Min).
  594.  
  595.    
  596.     getMax(E1,E2,Res):-E1>=E2,Res = E1.
  597.     getMax(E1,E2,Res):-E1<E2, Res = E2.
  598.     getMin(E1,E2,Res):-E1>=E2,Res = E2.
  599.     getMin(E1,E2,Res):-E1<E2, Res = E1.
  600.  
  601.  
  602.     insertA(New,avl(nil,0),avl(bt(avl(nil,0),New,avl(nil,0)),1)).
  603.     insertA(E,avl(bt(Left,E,Right),H),avl(bt(Left,E,Right),H)).
  604.  
  605.     insertA(New,avl(bt(Left,E,Right),_),NewA):-
  606.         New < E,
  607.         insertA(New,Left,avl(bt(LT,X,RT),_)),
  608.         unionA(LT,X,RT,E,Right,NewA).
  609.    
  610.     insertA(New,avl(bt(Left,E,Right),_),NewA):-
  611.         New > E,
  612.         insertA(New,Right,avl(bt(LT,X,RT),_)),
  613.         unionA(Left,E,LT,X,RT,NewA).
  614.    
  615.     unionA(avl(T1,H1),A,avl(bt(L2,C,R2),H2),B,avl(T3,H3),avl(bt(avl(bt(avl(T1,H1),A,L2),HA),C,avl(bt(R2,B,avl(T3,H3)),HB)),HC)):-
  616.         H2>H1,H2>H3,
  617.         HA=H1+1,HB=H3+1,HC=HA+1.
  618.    
  619.     unionA(avl(T1,H1),A,avl(T2,H2),B,avl(T3,H3),avl(bt(avl(T1,H1),A,avl(bt(avl(T2,H2),B,avl(T3,H3)),HB)),HA)):-
  620.         H1>=H2,H1>=H3,
  621.         max(H2,H3,Hb), max(H1,HB,HA).
  622.    
  623.     unionA(avl(T1,H1),A,avl(T2,H2),B,avl(T3,H3),avl(bt(avl(bt(avl(T1,H1),A,avl(T2,H2)),HA),B,avl(T3,H3)),HB)):-
  624.         H3>=H2,H3>=H1,
  625.         max(H1,H2,HA),max(HA,H3,HB).
  626.    
  627.     max(X,Y,Z) :- X>Y, !, Z=X+1.
  628.     max(X,Y,Z) :- X<=Y,!, Z=Y+1.
  629.  
  630.     map_86(avl(nil, _), _).
  631.     map_86(avl(bt(Left, E, Right), _), D):-
  632.         NewD = D + 1,
  633.         map_86(Right, NewD),
  634.         tab(D), write(E), nl,
  635.         map_86(Left, NewD).
  636.     run(A):-
  637.         write("***Enter next element***"),nl,nl,
  638.         readint(C), !,write("___"),nl,nl,
  639.         insertA(C,A,An),
  640.         map_86(An, 0),nl,nl,
  641.         run(An);
  642.         write("*************************"),nl,
  643.         findMax(A, MaxElement),nl,
  644.         write("Max element: ", MaxElement),nl,
  645.         findMin(A, MinElement),nl,
  646.         write("Min element: ", MinElement),nl.
  647.     %*******************************************
  648.    
  649.     add(E,[],[E]).
  650.     add(E,[H|T],[H|T1]):-
  651.         add(E,T,T1).
  652.        
  653.     find([A|B],A,X):-!,
  654.         find(B,A,Y),
  655.         X = Y+1.
  656.    
  657.     find([_|B],C,X):-
  658.     find(B,C,X).
  659.     find([],_,0).
  660.    
  661.     length([], L):-L=0.
  662.     length([_|T], L):-
  663.         length(T, L2),
  664.         L = L2 + 1.
  665.        
  666.        
  667. readlist([Head|Tail]):-
  668.     write("Enter next element: "), readint(Head), !,readlist(Tail).
  669.     readlist([]).
  670. goal
  671. do(99),!.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement