Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module rodst2;
  2.  
  3. var $n : tuple of atom := atom[];
  4.  
  5. var $ch : tuple of atom := atom[Иван, Екатерина];
  6.  
  7. var $nikto : integer := 0;
  8. var $win1;
  9. var $wy : integer := 20;
  10.  
  11. rule ввод
  12.    forall $x: Человек( имя: $имя )
  13. =>
  14.    $n := $n + atom[$имя] ;
  15. end;
  16.  
  17. rule ввод1
  18. =>
  19.    var $m1,$m2 : integer;
  20.    $m1 := Menu(400,50," Выберите человека", $n, 1 );
  21.    $ch[1]:= $n[$m1];
  22.    OutText( $win1, 50, $wy, $ch[1]);
  23.    $wy:=$wy+15;
  24.    $m2 := Menu(400,50," Выберите человека", $n, 1 );
  25.    $ch[2]:= $n[$m2];
  26.    OutText( $win1, 50, $wy, $ch[2]);
  27.    $wy:=$wy+30;
  28. end;
  29.  
  30. rule ввод2
  31. exist $x: Человек( имя:$имяx ),
  32.       $y: Человек( имя:$имяy )
  33.   when ( $имяx = $ch[1] ) & ( $имяy = $ch[2] )
  34. =>
  35.   new родств($x, $y);
  36. end;
  37.  
  38. // Правило для остановки
  39. rule Stop
  40. =>
  41.   activate group();
  42. end;
  43.  
  44. rule ДетиРодителей
  45.   forall $x: Человек( родители: $род )
  46.   when #$род != 0
  47. =>
  48.   for $i in $род loop
  49.        edit   $i: Человек( дети:  $i.дети + Человек{$x} );
  50.   end;
  51. end;
  52.  
  53. rule РодителиДетей
  54.   forall $x: Человек(  супруг: $супруг, дети: $дети )
  55.   when (#$дети != 0) & ($супруг != ?)
  56. =>
  57.   if #$супруг.дети = 0
  58.   then edit   $супруг: Человек( дети: $дети );
  59.   end;
  60.   for $ii in $дети loop
  61.       if #$ii.родители != 2
  62.       then edit   $ii: Человек( родители: Человек{$x, $супруг });
  63.       end;
  64.   end;
  65. end;
  66.  
  67. /*----------------------------------------------------------------*/
  68.  
  69. rule Мать_Отец
  70. exist $rod : родств(кто: $x, кому: $y),
  71.       $x: Человек( родители: $род )
  72.       when ( #$род != 0 ) & ( $y in $род  )
  73. =>
  74.       if $y.пол = муж
  75.       then  
  76.            OutText( $win1, 50, $wy, ToString($y.имя)+ "  отец "+ ToString($x.имя) );
  77.       else
  78.            OutText( $win1, 50, $wy,ToString($y.имя)+ "  мать "+ToString($x.имя) );
  79.        end;
  80.      
  81.       $wy := $wy + 15;
  82.  
  83.       if $x.пол = муж
  84.       then  
  85.            OutText( $win1, 50, $wy, ToString($x.имя) + "  сын " + ToString($y.имя) );
  86.       else  
  87.            OutText( $win1, 50, $wy, ToString($x.имя)+"  дочь " + ToString($y.имя) );
  88.       end;
  89.       $wy := $wy + 30;
  90. finish
  91. //      call group(Stop);
  92.     activate group();
  93. end;
  94.  
  95. rule Бабушка_Дедушка
  96. exist $rod : родств(кто: $x, кому: $y),
  97.       $x: Человек( родители: $род ),
  98.       $y: Человек(дети: $дети )
  99.       when ( #($род * $дети) != 0 )
  100. =>
  101.  
  102.       if $y.пол = муж
  103.       then  
  104.           OutText( $win1, 50, $wy, ToString($y.имя) + "  дедушка " + ToString($x.имя) );
  105.       else
  106.           OutText( $win1, 50, $wy, ToString($y.имя) + "  бабушка " + ToString($x.имя) );
  107.       end;
  108.      
  109.       $wy := $wy + 15;
  110.  
  111.       if $x.пол = муж
  112.       then  
  113.           OutText( $win1, 50, $wy, ToString($x.имя) + "  внук " + ToString($y.имя) );
  114.       else  
  115.           OutText( $win1, 50, $wy, ToString($x.имя) + "  внучка " + ToString($y.имя) );
  116.       end;
  117.  
  118.       $wy := $wy + 30;
  119. finish
  120. //      call group(Stop);
  121. //  activate group();
  122.  end;
  123.  
  124. rule Брат_Сестра
  125.   exist $rod : родств(кто: $x, кому: $y),
  126.          $x: Человек( родители: $род ),
  127.          $y: Человек( родители: $род )
  128.          when (#$род != 0 )
  129. =>
  130.  
  131.          if $x.пол = муж
  132.          then  
  133.              OutText( $win1, 50, $wy, ToString($x.имя) + "  брат " + ToString($y.имя) );
  134.          else
  135.              OutText( $win1, 50, $wy, ToString($x.имя) + "  сестра " + ToString($y.имя) );
  136.          end;
  137.  
  138.          $wy := $wy + 15;  
  139.  
  140.          if $y.пол = муж
  141.          then  
  142.              OutText( $win1, 50, $wy, ToString($y.имя) + "  брат " + ToString($x.имя) );
  143.          else  
  144.              OutText( $win1, 50, $wy, ToString($y.имя) + "  сестра " + ToString($x.имя) );
  145.          end;
  146.       $wy := $wy + 30;  
  147. finish
  148. //      call group(Stop);
  149. //  activate group();
  150. end;
  151.  
  152. rule Супруг
  153.   exist $rod : родств(кто: $x, кому: $y ),
  154.         $x: Человек( имя:$имя, супруг: $y )
  155. =>
  156.          if $x.пол = муж
  157.          then  
  158.              OutText( $win1, 50, $wy, ToString($x.имя) + "  муж " + ToString($y.имя) );
  159.          else
  160.              OutText( $win1, 50, $wy, ToString($x.имя) + "  жена " + ToString($y.имя) );
  161.          end;
  162.  
  163.          $wy := $wy + 15;  
  164.  
  165.          if $y.пол = муж
  166.          then  
  167.              OutText( $win1, 50, $wy, ToString($y.имя) + "  муж " + ToString($x.имя) );
  168.          else  
  169.              OutText( $win1, 50, $wy, ToString($y.имя) + "  жена " + ToString($x.имя) );
  170.          end;
  171.  
  172.       $wy := $wy + 30;  
  173. finish
  174. //      call group(Stop);
  175. //  activate group();
  176. end;
  177.  
  178. rule Кузен_Кузина
  179.   exist $rod : родств(кто: $x, кому: $y),
  180.          $x: Человек( родители: $род1 ),
  181.          $y: Человек( родители: $род2 )
  182.          when ( #($род1)!=0 & #($род2) != 0 & $род1!=$род2)
  183. =>
  184.         for $ii in $род1 loop
  185.           for $ij in $род2 loop
  186.             if #$ii.родители!=0 & #$ij.родители!=0 & $ii.родители=$ij.родители
  187.             then
  188.               if $x.пол = муж
  189.               then  
  190.                  OutText( $win1, 50, $wy, ToString($x.имя) + "  кузен " + ToString($y.имя) );
  191.               else
  192.                  OutText( $win1, 50, $wy, ToString($x.имя) + "  кузина " + ToString($y.имя) );
  193.               end;
  194.  
  195.               $wy := $wy + 15;  
  196.  
  197.               if $y.пол = муж
  198.               then  
  199.                   OutText( $win1, 50, $wy, ToString($y.имя) + "  кузен " + ToString($x.имя) );
  200.               else  
  201.                   OutText( $win1, 50, $wy, ToString($y.имя) + "  кузина " + ToString($x.имя) );
  202.               end;
  203.               $wy := $wy + 30;  
  204.             end; //if
  205.           end; //for ij
  206.         end; //for ii
  207. finish
  208. //      call group(Stop);
  209. //  activate group();
  210. end;
  211.  
  212. rule Дядя_Тетя
  213. exist $rod: родств(кто: $x, кому: $y),
  214.       $y: Человек(родители: $r1),
  215.       $x: Человек(родители: $r2)
  216.       when(#($r1)!=0 & #($r2)!=0 & $r1!=$r2)
  217. =>
  218.     $wy := $wy + 15;
  219.     for $i in $r1 loop
  220.             if #$i.родители !=0 & $i.родители = $r2 then
  221.             $wy := $wy + 15;
  222.                 if $y.пол = муж then  
  223.                         OutText( $win1, 50, $wy, ToString($x.имя) + " дядя " + ToString($x.имя));
  224.                 else
  225.                         OutText( $win1, 50, $wy, ToString($x.имя) + " тётя " + ToString($x.имя));
  226.                 end;
  227.                 $wy := $wy + 15;
  228.  
  229.                 if $x.пол = муж then  
  230.                         OutText( $win1, 50, $wy, ToString($y.имя) + " племянник " + ToString($x.имя));
  231.                 else  
  232.                         OutText( $win1, 50, $wy, ToString($y.имя) + " племянница " + ToString($x.имя));
  233.                 end;
  234.             $wy := $wy + 15;
  235.             $nikto := 1;
  236.         end;
  237.     end;
  238. finish
  239. //      call group(Stop);
  240. //  activate group();
  241. end;
  242.  
  243. rule Теща_Тесть
  244. exist $rod : родств(кто: $x, кому: $y),
  245.       $x: Человек(супруг: $s1),
  246.       $y: Человек(дети: $s2)
  247.       when ($s1 in $s2)
  248. =>
  249.     if ($x.пол = муж) then
  250.             if $y.пол = муж then  
  251.                 OutText( $win1, 50, $wy, ToString($y.имя) + " тесть " + ToString($x.имя) );
  252.             else
  253.                 OutText( $win1, 50, $wy, ToString($y.имя) + " тёща " + ToString($x.имя) );
  254.             end;
  255.         $wy := $wy + 15;
  256.         OutText( $win1, 50, $wy, ToString($x.имя) + " зять " + ToString($y.имя) );
  257.         $wy := $wy + 15;
  258.         $nikto := 1;
  259.     end;
  260. finish
  261. //      call group(Stop);
  262. //  activate group();
  263. end;
  264.  
  265. rule Свекр_Свекровь
  266. exist $rod : родств(кто: $x, кому: $y),
  267.       $y: Человек(супруг: $s1),
  268.       $x: Человек(дети: $s2)
  269.       when ($s1 in $s2)
  270. =>
  271.     if ($y.пол = жен) then
  272.             if $x.пол = муж then  
  273.                 OutText( $win1, 50, $wy, ToString($x.имя) + " свёкр " + ToString($y.имя) );
  274.             else
  275.                 OutText( $win1, 50, $wy, ToString($x.имя) + " свекровь " + ToString($y.имя) );
  276.             end;
  277.         $wy := $wy + 15;
  278.         OutText( $win1, 50, $wy, ToString($y.имя) + " невестка " + ToString($x.имя) );
  279.         $wy := $wy + 15;
  280.         $nikto := 1;
  281.     end;
  282. end;
  283.  
  284. rule Сват_Сватья
  285.   exist $rod : родств(кто: $x, кому: $y),
  286.       $x: Человек( дети: $d1),
  287.       $y: Человек( дети: $d2)
  288.       when #($d1 * $d2) = 0
  289. =>
  290.     for $i in $d1 loop
  291.         for $j in $d2 loop
  292.                 if $i.супруг = $j then
  293.  
  294.                     if $y.пол = муж then  
  295.                         OutText( $win1, 50, $wy, ToString($y.имя) + " сват " + ToString($x.имя) );
  296.                     else
  297.                         OutText( $win1, 50, $wy, ToString($y.имя) + " сватья " + ToString($x.имя) );
  298.                     end;
  299.                 $wy := $wy + 15;
  300.                     if $x.пол = муж then  
  301.                         OutText( $win1, 50, $wy, ToString($x.имя) + " сват " + ToString($y.имя) );
  302.                     else
  303.                         OutText( $win1, 50, $wy, ToString($x.имя) + " сватья " + ToString($y.имя) );
  304.                     end;
  305.                 $wy := $wy + 15;
  306.                 $nikto := 1;
  307.             end;
  308.         end;
  309.     end;
  310. end;
  311. /*
  312. rule Шурин
  313. exist $rod : родств(кто: $x, кому: $y),
  314.       $x: Человек( супруг: $s),
  315.       $s: Человек( родители: $r),
  316.       $y: Человек( родители: $r)
  317.       when #$r != 0
  318. =>
  319.     if $x.пол = муж & $y.пол = муж then
  320.         OutText( $win1, 50, $wy, ToString($y.имя) + " шурин " + ToString($x.имя) );
  321.         $wy := $wy + 15;
  322.     end;
  323. end;
  324.  
  325. rule Деверь_Золовка
  326.   exist $rod : родств(кто: $x, кому: $y),
  327.       $x: Человек( супруг: $s),
  328.       $s: Человек( родители: $r),
  329.       $y: Человек( родители: $r)
  330.       when #$r != 0
  331. =>
  332.     if $x.пол = жен then
  333.         if $y.пол = муж then
  334.             OutText( $win1, 50, $wy, ToString($y.имя) + " деверь " + ToString($x.имя) );
  335.         end;
  336.  
  337.         if $y.пол = жен then
  338.             OutText( $win1, 50, $wy, ToString($y.имя) + " золовка " + ToString($x.имя) );
  339.         end;
  340.         $wy := $wy + 30;
  341.         OutText( $win1, 50, $wy, ToString($x.имя) + " невестка " + ToString($y.имя) );       
  342.         $wy := $wy + 15;
  343.     end;
  344. end;
  345. */
  346. rule НетРодства
  347.   exist $rod : родств(кто: $x, кому: $y)
  348.   when  $nikto = 0
  349. =>
  350.   OutText( $win1, 50, $wy, ToString($x.имя) + " не состоит в родственных отношениях с " + ToString($y.имя) );
  351. end;
  352.  
  353. var $правила: group := group(
  354.     ДетиРодителей,
  355.     РодителиДетей,
  356.     ввод,
  357.     ввод1,
  358.     ввод2,
  359.         Мать_Отец,
  360.     Бабушка_Дедушка,
  361.     Брат_Сестра,
  362.     Супруг,
  363.     Кузен_Кузина,
  364.     Дядя_Тетя,
  365.     Сват_Сватья,
  366.     Теща_Тесть,
  367.     Свекр_Свекровь,
  368.     НетРодства,
  369.     Stop
  370. );
  371.  
  372. begin
  373.   new
  374.  
  375.     @Валерий: Человек (имя: Валерий, пол: муж),
  376.     @Ирина: Человек (имя: Ирина, пол: жен, супруг: @Валерий),
  377.     @Никита: Человек (имя: Никита, пол: муж ),
  378.     @Анна: Человек (имя: Анна, пол: жен, супруг: @Никита ),
  379.     @Тимофей: Человек (  имя: Тимофей, пол: муж ),
  380.     @Екатерина: Человек (  имя: Екатерина, пол: жен, супруг: @Тимофей ),
  381.     @Давид: Человек (  имя: Давид, пол: муж, родители: (Человек { @Валерий , @Ирина }) ),
  382.     @Юлия: Человек (  имя: Юлия, пол: жен, супруг: @Давид, родители: (Человек { @Никита , @Анна }) ),
  383.     @Владимир: Человек (  имя: Владимир, пол: муж, родители: (Человек { @Никита , @Анна }) ),
  384.     @Анастасия: Человек (  имя: Анастасия, пол: жен, супруг: @Владимир, родители: (Человек { @Тимофей , @Екатерина }) ),
  385.     @Владислав: Человек (  имя: Владислав, пол: муж, родители: (Человек { @Тимофей , @Екатерина }) ),
  386.     @Александр: Человек (  имя: Александр, пол: муж, родители: (Человек { @Давид , @Юлия }) ),
  387.     @Тимур: Человек (  имя: Тимур, пол: муж, родители: (Человек { @Владимир , @Анастасия }) ),
  388.     @Дмитрий: Человек (  имя: Дмитрий, пол: муж, родители: (Человек { @Владимир , @Анастасия }) ),
  389.     @Елена: Человек (  имя: Елена, пол: жен, супруг: @Дмитрий );
  390.  
  391.  
  392.    $win1 := MakeWindow("Вопросно-ответная система 'Родственники'", 0,0,1010,640);  
  393.    TextColor($win1,4);
  394.    call $правила;
  395.    if (Ask("Конец сеанса", "Закрыть окна?"))
  396.    then  CloseWindow($win1);
  397.    end;
  398. WriteNet();
  399.  
  400. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement