Advertisement
Guest User

Untitled

a guest
Apr 21st, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.00 KB | None | 0 0
  1. {
  2.  
  3.                             Online Pascal Compiler.
  4.                 Code, Compile, Run and Debug Pascal program online.
  5. Write your code in this editor and press "Run" button to execute it.
  6.  
  7. }
  8. {
  9.  
  10.                             Online Pascal Compiler.
  11.                 Code, Compile, Run and Debug Pascal program online.
  12. Write your code in this editor and press "Run" button to execute it.
  13.  
  14. }
  15.  
  16.  
  17. {
  18.  
  19.                             Online Pascal Compiler.
  20.                 Code, Compile, Run and Debug Pascal program online.
  21. Write your code in this editor and press "Run" button to execute it.
  22.  
  23. }
  24.  
  25.  
  26. program LR19;
  27.  
  28. uses
  29.     sysutils;
  30.  
  31. type
  32.   uk = ^List;
  33.   List = record
  34.     next : uk;
  35.     inf : Char;
  36.     num : Real;
  37.   end;
  38.  
  39. var
  40.   Start : uk;
  41.   x, y : Char;
  42.   s1, s2 : Real;
  43.  
  44. procedure Make (var Start : uk);
  45. begin
  46.   New(Start);
  47.   Start^.next := nil;
  48. end;
  49.  
  50. procedure InsertHead (var Start : uk; x : Char);
  51. var
  52.   Start_ : uk;
  53. begin
  54.   Make(Start_);
  55.   Start_^.inf := x;
  56.   Start_^.next := Start;
  57.   Start := Start_;
  58. end;
  59.  
  60. procedure InsertHeadNum (var Start : uk; s : Real);
  61. var
  62.   Start_ : uk;
  63. begin
  64.   Make(Start_);
  65.   Start_^.num := s;
  66.   Start_^.next := Start;
  67.   Start := Start_;
  68. end;
  69.  
  70. procedure DeleteHead (var Start : uk; var x : Char);
  71. var
  72.   Start_ : uk;
  73. begin
  74.   x := Start^.inf;
  75.   Start_ := Start;
  76.   Start := Start^.next;
  77.   Start_^.next := nil;
  78.   Dispose(Start_);
  79. end;
  80.  
  81. procedure DeleteHeadNum (var Start : uk; var s : Real);
  82. var
  83.   Start_ : uk;
  84. begin
  85.   s := Start^.num;
  86.   Start_ := Start;
  87.   Start := Start^.next;
  88.   Start_^.next := nil;
  89.   Dispose(Start_);
  90. end;
  91.  
  92. procedure Transform (var Start : uk; exp: string; var result: string);
  93. var
  94.   q: integer;
  95.   x, y : Char;
  96. begin
  97.   Start := nil;
  98.   result := '';
  99.   for q := 1 to Length(exp) do
  100.   begin
  101.     y := exp[q];
  102.     case y of
  103.       '*', '/' : InsertHead(Start, y);
  104.       '+', '-' :
  105.       begin
  106.         if Start <> nil then
  107.           while (Start <> nil) do
  108.           begin
  109.             if (Start^.inf = '(') then
  110.               Break;
  111.             DeleteHead(Start, x);
  112.             result := result + x;
  113.           end;
  114.             InsertHead(Start, y);
  115.       end;
  116.       '(' : InsertHead(Start, y);
  117.       ')' :
  118.       begin
  119.         while Start^.inf <> '(' do
  120.         begin
  121.           DeleteHead(Start, x);
  122.           result := result + x;
  123.         end;
  124.         DeleteHead(Start, x);
  125.       end;
  126.     else
  127.       result := result + y;
  128.     end;
  129.   end;
  130.  
  131.   while Start <> nil do
  132.   begin
  133.     DeleteHead(Start, x);
  134.     result := result + x;
  135.   end;
  136. end;
  137.  
  138. procedure calc (Start : uk; exp: string; var result: real);
  139. var
  140.     s1, s2 : Real;
  141.     x : Char;
  142.     v: integer;
  143. begin
  144.   s1 := 0;
  145.   s2 := 0;
  146.   Start := nil;
  147.   for v := 1 to length(exp) do
  148.   begin
  149.     x := exp[v];
  150.     if not(x in['0'..'9']) then
  151.     begin
  152.       DeleteHeadNum(Start, s1);
  153.       DeleteHeadNum(Start, s2);
  154.       case x of
  155.         '+' : InsertHeadNum(Start, s2 + s1);
  156.         '-' : InsertHeadNum(Start, s2 - s1);
  157.         '*' : InsertHeadNum(Start, s2 * s1);
  158.         '/' : InsertHeadNum(Start, s2 / s1);
  159.       end;
  160.     end
  161.     else
  162.       InsertHeadNum(Start, StrToInt(x));
  163.   end;
  164.  
  165.   DeleteHeadNum(Start, s1);
  166.   result := s1;
  167. end;
  168.  
  169. var
  170.   n,k:integer;
  171.   a:array of byte;
  172.  
  173. function GetOp(g: integer): Char;
  174. begin
  175.     case a[g] of
  176.         0: GetOp := '+';
  177.         1: GetOp := '-';
  178.         2: GetOp := '*';
  179.         3: GetOp := '/';
  180.     end;
  181. end;
  182.  
  183. procedure FuckYourself();
  184. var
  185.     exp, transformed: string;
  186.     z: integer;
  187.     res: real;
  188. begin
  189.     exp := '1';
  190.     for z := 0 to k-1 do
  191.         exp := exp + GetOp(z) + IntToStr(z+2);
  192.     transform(Start, exp, transformed);
  193.     calc(Start, transformed, res);
  194.     if res = 100 then
  195.         writeln(exp);
  196. end;
  197.  
  198. procedure gen(i:integer);
  199. var
  200.   j:integer;
  201. begin
  202.   if i>k-1 then begin fuckyourself();exit; end;
  203.  
  204.   for j:=0 to n do begin
  205.     a[i]:=j;
  206.     gen(i+1);
  207.   end;
  208. end;
  209. begin
  210.   write('n,k=');
  211.   readln(n,k);
  212.   setlength(a,k);
  213.   gen(0);
  214.  
  215.   readln;
  216. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement