Advertisement
anticlown

Lists - 1.1(2 sem)

Apr 9th, 2023 (edited)
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.17 KB | None | 0 0
  1. Program Lab_1_1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. Uses
  6.     SysUtils,
  7.     Math,
  8.     Windows;
  9.  
  10. Type
  11.     TPElement = ^TElement;
  12.     TElement = Record
  13.       Coefficient: Integer;
  14.       Degree: Integer;
  15.       Next: TPElement;
  16.     End;
  17.  
  18. Function Meaning(P: TPElement; X: Integer): Integer; //вычисляет значение, подставляю х
  19. Var
  20.     Sum: Integer;
  21. Begin
  22.     Sum := 0;
  23.  
  24.     While P <> Nil Do
  25.     Begin
  26.       Sum := Sum + P^.Coefficient * Round(Power(X, P^.Degree));
  27.       P := P^.Next;
  28.     End;
  29.  
  30.     Meaning := Sum;
  31. End;
  32.  
  33. Function Equality(P, Q: TPElement): Boolean; //провряет равенство многочленов
  34. Var
  35.     IsEqual: Boolean;
  36. Begin
  37.     IsEqual := True;
  38.  
  39.     While (P <> Nil) And (Q <> Nil) And IsEqual Do
  40.     Begin
  41.         If (P = Nil) And (Q = Nil) Then
  42.           IsEqual := False
  43.         Else
  44.         Begin
  45.             If (P^.Degree <> Q^.Degree) Or (P^.Coefficient <> Q^.Coefficient) Then
  46.               IsEqual := False;
  47.             P := P^.Next;
  48.             Q := Q^.Next;
  49.         End;
  50.     End;
  51.  
  52.     Equality := IsEqual;
  53. End;
  54.  
  55. Procedure Add(Var R: TPElement; P, Q: TPElement); // создание 3 многочлена из двух
  56. Var
  57.   X, Y: TPElement;
  58. Begin
  59.     New(X);
  60.     New(Y);
  61.     R := X;
  62.  
  63.     While (P <> Nil) And (Q <> Nil) Do
  64.     Begin
  65.         If P^.Degree > Q^.Degree Then
  66.         Begin
  67.             X^.Degree := P^.Degree;
  68.             X^.Coefficient := P^.Coefficient;
  69.             P := P^.Next;
  70.         End
  71.         Else
  72.         If P^.Degree < Q^.Degree Then
  73.         Begin
  74.             X^.Degree := Q^.Degree;
  75.             X^.Coefficient := Q^.Coefficient;
  76.             Q := Q^.Next;
  77.         End
  78.         Else
  79.         Begin
  80.             X^.Degree := P^.Degree;
  81.             X^.Coefficient := P^.Coefficient + Q^.Coefficient;
  82.             P := P^.Next;
  83.             Q := Q^.Next;
  84.         End;
  85.  
  86.         Y := X;
  87.         New(X);
  88.         Y^.Next := X;
  89.     End;
  90.  
  91.     Y^.Next := Nil;
  92. End;
  93.  
  94. Function InputList(Degree: Integer): TPElement; //ввод
  95. Var
  96.     Element, X, Y: TPElement;
  97.     I, Coefficient: Integer;
  98. Begin
  99.     New(X);
  100.     New(Y);
  101.     Element := X;
  102.  
  103.     For I := Degree Downto 0 Do
  104.     Begin
  105.         If I <> 0 Then
  106.         Begin
  107.             Write('X^', I, ' * ');
  108.             Read(Coefficient);
  109.             Write(' + ');
  110.         End
  111.         Else
  112.         Begin
  113.             Readln(Coefficient);
  114.         End;
  115.  
  116.         If Coefficient <> 0 Then
  117.         Begin
  118.             X^.Coefficient := Coefficient;
  119.             X^.Degree := I;
  120.             Y := X;
  121.             New(X);
  122.             Y^.Next := X;
  123.         End;
  124.     End;
  125.  
  126.     Y^.Next := Nil;
  127.     InputList := Element;
  128. End;
  129.  
  130. Procedure OutputList(List: TPElement); // вывод
  131. Var
  132.     IsFirstElement: Boolean;
  133. Begin
  134.     IsFirstElement := True;
  135.  
  136.     While List <> Nil Do
  137.     Begin
  138.         If Not IsFirstElement Then
  139.             Write(' + ');
  140.         IsFirstElement := False;
  141.         If List^.Degree <> 0 Then
  142.             Write(List^.Coefficient, 'X^', List^.Degree)
  143.         Else
  144.             Write(List^.Coefficient);
  145.         List := List^.Next;
  146.     End;
  147.  
  148.     Writeln;
  149. End;
  150.  
  151. //Main
  152. Var
  153.   P, Q, R: TPElement;
  154.   Degree, X: Integer;
  155. Begin
  156.     //Ввод
  157.     Write('Введите степень многочлена P(X): ');
  158.     Readln(Degree);
  159.     Writeln('Введите коэффициенты: ');
  160.     P := InputList(Degree);
  161.     Write('Введите степень многочлена Q(X): ');
  162.     Readln(Degree);
  163.     Writeln('Введите коэффициенты: ');
  164.     Q := InputList(Degree);
  165.     Write('Многочлен P(X): ');
  166.     OutputList(P);
  167.     Write('Многочлен Q(X): ');
  168.     OutputList(Q);
  169.     Add(R, P, Q);
  170.     Write('Многочлен R(X) = P(X) + Q(X): ');
  171.     OutputList(R);
  172.     Write('Введите значение X: ');
  173.     Readln(X);
  174.     //Вычисление
  175.     Writeln('Q(X) = ', Meaning(Q, X));
  176.     Writeln('P(X) = ', Meaning(P, X));
  177.     Writeln('R(X) = ', Meaning(R, X));
  178.     Write('Равны ли Q(X) и P(X)? Ответ: ');
  179.     If Equality(P, Q) Then
  180.         Write('Равны')
  181.     Else
  182.         Write('Неравны');
  183.  
  184.     Readln;
  185. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement