Advertisement
LisunovaMaryna

AISD lab1.1

Mar 1st, 2024
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.59 KB | None | 0 0
  1. Program lab1_1;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. Uses
  7.     SysUtils;
  8.  
  9. Type
  10.     Polynom = ^EPolynom;
  11.  
  12.     EPolynom = Record
  13.         Number: Integer;
  14.         Power: Integer;
  15.         Next: Polynom;
  16.     End;
  17.  
  18. Procedure SystemIn(Var Res: Integer);
  19. Var
  20.     Error: Integer;
  21.     S: String;
  22. Begin
  23.     Repeat
  24.         Readln(S);
  25.         Val(S, Res, Error); // строка -> целое число
  26.         If Error <> 0 Then
  27.             WriteLn('Ввведите число: ');
  28.     Until Error = 0;
  29. End;
  30.  
  31. Procedure Make(X: Polynom; N: Integer);
  32. Var
  33.     Y: Polynom;
  34.     Number: Integer;
  35. Begin
  36.     While (N >= 0) Do
  37.     Begin
  38.         Write('Введите множитель (X^', N, ') = ');
  39.         SystemIn(Number);
  40.         If Number <> 0 Then
  41.         Begin
  42.             X^.Number := Number;
  43.             X^.Power := N;
  44.  
  45.             Y := X;
  46.             New(X);
  47.             Y^.Next := X;
  48.         End;
  49.         N := N - 1;
  50.     End;
  51.     Y^.Next := Nil;
  52. End;
  53.  
  54. Procedure SystemOut(P: Polynom);
  55. Begin
  56.     If P^.Power <> 0 Then
  57.     Begin
  58.         If P^.Number = 1 Then
  59.             Write('X^', P^.Power)
  60.         Else If P^.Number > 1 Then
  61.             Write(P^.Number, 'X^', P^.Power)
  62.         Else If P^.Number = -1 Then
  63.             Write('-X^', P^.Power)
  64.         Else If P^.Number < 0 Then
  65.             Write(P^.Number, 'X^', P^.Power);
  66.     End
  67.     Else
  68.         Write(P^.Number);
  69.  
  70.     While P <> Nil Do
  71.     Begin
  72.         P := P^.Next;
  73.         If (P <> Nil) Then
  74.         Begin
  75.             If (P^.Number < 0) Then
  76.             Begin
  77.                 Write(' - ');
  78.                 If P^.Power <> 0 Then
  79.                 Begin
  80.                     If P^.Number = -1 Then
  81.                         Write('X^', P^.Power)
  82.                     Else
  83.                         Write(-1 * P^.Number, 'X^', P^.Power);
  84.                 End
  85.                 Else
  86.                 Begin
  87.                     Write(-1 * P^.Number);
  88.                 End;
  89.             End
  90.             Else
  91.             Begin
  92.                 Write(' + ');
  93.                 If P^.Power <> 0 Then
  94.                 Begin
  95.                     If P^.Number = 1 Then
  96.                         Write('X^', P^.Power)
  97.                     Else
  98.                         Write(P^.Number, 'X^', P^.Power);
  99.                 End
  100.                 Else
  101.                 Begin
  102.                     Write(P^.Number);
  103.                 End;
  104.             End;
  105.         End;
  106.     End;
  107. End;
  108.  
  109. Function Equality(P: Polynom; Q: Polynom): Boolean;
  110. // проверяет равенство многочленов Р и Q
  111. Var
  112.     Flag: Boolean;
  113. Begin
  114.     Flag := True;
  115.     While (P <> Nil) And (Q <> Nil) And Flag Do
  116.     Begin
  117.         If P^.Power = Q^.Power Then
  118.         Begin
  119.             If P^.Number <> Q^.Number Then
  120.                 Flag := False;
  121.         End
  122.         Else
  123.             Flag := False;
  124.         P := P^.Next;
  125.         Q := Q^.Next;
  126.     End;
  127.  
  128.     If Flag Then
  129.         WriteLn('Равны')
  130.     Else
  131.         WriteLn('Не равны.');
  132.  
  133.     Result := Flag;
  134. End;
  135.  
  136. Function Meaning(P: Polynom; X: Integer): Integer;
  137. // вычисляет значение многочлена в целочисленной точке х
  138. Var
  139.     I, Mult: Integer;
  140. Begin
  141.     Result := 0;
  142.     While P <> Nil Do
  143.     Begin
  144.         Mult := 1;
  145.         For I := 1 To P^.Power Do
  146.             Mult := Mult * X;
  147.         Result := Result + P^.Number * Mult;
  148.  
  149.         P := P^.Next;
  150.     End;
  151. End;
  152.  
  153. Procedure Add(P: Polynom; Q: Polynom; R: Polynom);
  154. // вычисление суммы многочленов Q и R
  155. Var
  156.     Y: Polynom;
  157. Begin
  158.     While (Q <> Nil) And (P <> Nil) Do
  159.     Begin
  160.         If P^.Power < Q^.Power Then
  161.         Begin
  162.             R^.Number := Q^.Number;
  163.             R^.Power := Q^.Power;
  164.             Q := Q^.Next;
  165.         End
  166.         Else If P^.Power = Q^.Power Then
  167.         Begin
  168.             R^.Number := Q^.Number + P^.Number;
  169.             R^.Power := Q^.Power;
  170.             P := P^.Next;
  171.             Q := Q^.Next;
  172.         End
  173.         Else If P^.Power > Q^.Power Then
  174.         Begin
  175.             R^.Number := P^.Number;
  176.             R^.Power := P^.Power;
  177.             P := P^.Next;
  178.         End;
  179.  
  180.         Y := R;
  181.         New(R);
  182.         Y^.Next := R;
  183.     End;
  184.     While (Q <> Nil) Do
  185.     Begin
  186.         R^.Number := Q^.Number;
  187.         R^.Power := Q^.Power;
  188.         Q := Q^.Next;
  189.         Y := R;
  190.         New(R);
  191.         Y^.Next := R;
  192.     End;
  193.     While (P <> Nil) Do
  194.     Begin
  195.         R^.Number := P^.Number;
  196.         R^.Power := P^.Power;
  197.         P := P^.Next;
  198.         Y := R;
  199.         New(R);
  200.         Y^.Next := R;
  201.     End;
  202.  
  203.     Y^.Next := Nil;
  204. End;
  205.  
  206. Var
  207.     First, Second, Third: Polynom;
  208.     N, X: Integer;
  209.  
  210. Begin
  211.     New(First);
  212.     New(Second);
  213.     New(Third);
  214.  
  215.     Write('Введите максимальную степень уравнения Р: ');
  216.     SystemIn(N);
  217.     Make(First, N);
  218.     Write('P: ');
  219.     SystemOut(First);
  220.     WriteLn;
  221.  
  222.     Write('Введите максимальную степень уравнения Q: ');
  223.     SystemIn(N);
  224.     Make(Second, N);
  225.     Write('Q: ');
  226.     SystemOut(Second);
  227.     WriteLn;
  228.  
  229.     Equality(First, Second);
  230.  
  231.     Write('Сумма уравнений P и Q: ');
  232.     Add(First, Second, Third);
  233.     SystemOut(Third);
  234.     WriteLn;
  235.  
  236.     Write('Введите целочисленное X1 для функции P: ');
  237.     Readln(X);
  238.     WriteLn('P(', X, ') = ', Meaning(First, X));
  239.  
  240.     Write('Введите целочисленное X2 для функции Q: ');
  241.     Readln(X);
  242.     WriteLn('Q(', X, ') = ', Meaning(Second, X));
  243.  
  244.     Readln;
  245. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement