- Lektsia - бесплатные рефераты, доклады, курсовые работы, контрольные и дипломы для студентов - https://lektsia.info -

Виконання символьних операцій з многочленами

/>/>/>/>/>Вступ
В даній роботіреалізована задача виконання символьних операцій з многочленами. Був здійсненийматематичний опис задачі, розроблені алгоритми її реалізації та здійснена сама реалізаціяна одній з версій алгоритмічної мови Pascal. Правильність роботи програмиперевірена на контрольному прикладі. Здійснювалося також тестування програми наекстремальних вхідних даних (піднесення многочлена до нульового степеня,множення на нуль, ділення многочлена на самого себе і т. д.).
При виконанніроботи використовувався структурний метод програмування, що дало змогу зробитипрограму короткою, легко модифікованою. Оскільки всі розроблені процедурипоміщені в модуль, відкомпільований у tpu‑файл, їх легко використати принаписанні програм, які реалізують близькі за темою задачі.
Вибранаалгоритмічна мова TurboPascal повністю забезпечує структурний стильпрограмування, оскільки це структурована мова високого рівня, на якій можнанаписати програму практично необмеженого розміру і довільного призначення.
/>/>/>/>/>/>/>/>1. Постановка задачі
В представленійроботі реалізується така задача.
Створити типданих, які б найкраще відповідали означенню многочлена, описати і створитизмінні, які б відповідали нулю та одиниці кільця многочленів, передбачити ввідта вивід многочленів згідно із загальноприйнятими стандартами.
Забезпечитиреалізацію таких операцій з многочленами:
*         додавання n многочленів
*         множення n многочленів
*         піднесення многочлена до довільного степеня
*         знаходження многочлена від многочлена
*         ділення многочленів
*         знаходження похідної довільного порядку відмногочлена
*         знаходження невизначеного інтегралу довільногопорядку від многочлена
Операціївизначені у розділі 1 представленої роботи.
Інтерфейскористувача створити у вигляді меню.
При створенніпрограмного забезпечення дотримуватися структурного стилю програмування.Створене програмне забезпечення перевірити на контрольному прикладі. Описконтрольного прикладу приведений у розділі 3 представленої роботи./>/>2. Математичнийопис задачі
 
Многочленом(поліномом) над полем A називаєтьсявираз виду
 
anxn+an-1xn-1+ …+a0 (1)

де ai – елементиполя A, n – натуральне число. n‑максимальне числотаке, що коефіцієнт при xn відмінний від 0. n називається степенем многочлена.В даній роботі розглядаються многочлени над полем дійсних чисел.
Загаломмногочлени можна трактувати як масиви чисел (елементів поля)
Довільний елементполя (скаляр) може трактуватися як многочлен нульового степеня.
На множинімногочленів введено відношення рівності та операції додавання і множення.
Два многочленибудуть вважатися рівними, якщо рівні їхкоефіцієнти ai при однакових степенях невідомого.
Многочлени наддовільним полем утворюють кільце. Роль нулявідіграє многочлен (0,0,0,…), роль одиниці – многочлен (1,0,0,…). Упредставленому у даній роботі програмному забезпеченні вони фігурують підіменами відповідно zero, od.
Операцію множення зручнопредставити як композицію трьох операцій:
множення на скаляр t
(a0, a1,a2…an,0,0…) Þ(t*a0, t*a1,t*a2…t*an,0,0…) (3)
і множення на многочлен xm(підвищення степеня многочлена на m)
(a0, a1,a2…an,0,0…) Þ(0,0..am, am+1,an+m,0,0.) (4)
та раніше введеноюоперацією суми.
На кільці многочленівлегко ввести ряд операцій, породжених основними: операцію піднесення многочленадо квадрата, куба і довільного ступеня k, де k – натуральне число, операціюзнаходження многочлена від многочлена
f(y)=anyn+an-1yn-1+ …+a0
де в ролі y виступаємногочлен y(x)= bmym+am-1ym-1+ …+b0.
Крім того, впредставленій роботі розглядаються операції знаходження похідної від многочлена
f’ (x)=(anxn+an-1xn-1+ …+a0)’=nanxn-1+(n‑1)an-1 xn-2+ … +a1 (5)
та знаходженняневизначеного інтеграла від многочлена
xn+1+ … +a0x+C,(6)
де С – довільнаконстанта. Взяття похідної (диференціювання) і знаходження невизначеногоінтеграла (інтегрування) – взаємно обернені операції.
Так визначеніоперації додавання і множення многочленів легко узагальнити для довільногочисла операндів, операції піднесення до степеня, диференціювання таінтегрування – для довільного степеня многочлена, похідної та інтегралудовільного порядку.
В представленійроботі розглядається також операція діленнямногочленів. Многочлени над полем дійсних чисел утворюють кільце, а не поле,тому загалом говорити про ділення многочлена на многочлен нема сенсу. Натомістьможна ввести операцію ділення з остачею: для двох многочленів f(x) та g(x)знаходження таких многочленів u(x) та v(x), що f(x)=g(x) u(x)+v(x), причомустепінь остачі v(x) менший від ступеня дільника g(x). Загалом степені f(x) ig(x) можуть бути довільні, але задача є нетривіальною тільки тоді, коли степіньдільника менший від степеня діленого. Саме ділення здійснюється згідно зшироковідомим алгоритмом, аналогічним до ділення чисел у стовпчик.
 />/>/>/>/>3.Опис контрольногоприкладу
Правильністьроботи представленого комплексу програм буде перевірятися на контрольномуприкладі. Контрольний приклад виконається коректно, якщо результати, одержаніза допомогою програми, співпадуть з результатами, одержаними методами алгебримногочленів, представленим далі.
Додаваннямногочленiв
Доданки
4.00x 2+ 3.00x
2.00x4-x3+ 3.00x 2+ 4.50x+ 5.00
4.00x 3- x2+ 0.40x
/>

Результат
2.00x4+ 3.00x3+ 6.00x2+ 7.90x+ 5.00
/>

Множеннямногочленiв
Множники
2.00x3-1.00x 2+2.00x+ 1.00
1.00x 2+ 1.00
-1.00x 2+ 0.50x+0.50
/>

Результат
-2.00x 7+ 2.00x 6–3.50x5+ 1.50x 4+ 1.50x+ 0.50
/>

піднесеннямногочлена до степеня
многочлен x 3–2x2+ 2x‑1
Піднесений достепеня 3
/>

x9-6x8+18x7-35x6+48x5-48x4+35x3-18x2+ 6x‑1
/>

Многочлен від многочлена
Внутрішніймногочлен y=x 2+ x+ 1
Зовнішніймногочлен y 2+ 1.00y+ 1.00
/>

Результат
x4+ 2x3+4x2+ 3x+ 3
/>

Діленнямногочленiв
Ділене x 5+ 2x 4‑x 3+ 2x 2+ x+ 5.00
Дільник x 2+ x+ 1
/>

Частка x 3+ x 2–3x+4
Остача 1.00
/>

знаходженняпохідної від многочлена
многочлен f(x)=x 4‑x 3+ 2x 2+ 3x+ 1
Похідна 2‑гопорядку
f’’ (x)=12x2–6x+ 4
/>

знаходженняневизначеного інтеграла від многочлена
многочлен
f(x)=12x 2–6x+4
Інтеграл 2‑гопорядку
x 4‑x 3+ 2x2+C1x+C0
/>
 
/>/>/>/>/>4.Опис програмногозабезпечення
Представлене програмнезабезпечення розроблене на алгоритмічній мові TurboPascal 7.0. Мова обрана зогляду на її високу структурованість.
Програмнезабезпечення записане у двох файлах: файлі kurs.pas, текст якого приведений удодатку 1, та у бібліотеці підпрограм – файлі bibl.pas, який окремовідкомпільований як модуль bibl.tpu. Його текст приведений у додатку 2.
В бібліотеціпідпрограм в розділі INTERFACE описані тип poli, що відповідає означеннюмногочлена (степеня не більше 100), тип mpoli – масиву многочленів, глобальнізмінні zero та od, які відіграють роль відповідно нуля та одиниці кільцямногочленів.
Там же описанінаступні процедури і функції
*         function stepin (a:poli):integer; (знаходженнястепеня многочлена)
*         procedure riv (a:poli; var b:poli); (присвоєнняодному многочлену значення іншого)
*         procedure vvid (n:integer; var a:poli); (ввідмногочлена)
*         function poper (a:poli; m:integer):integer;(знаходження коефіцієнта многочлена, попереднього по відношенню до заданого)
*         procedure vyvid (a:poli); (вивід многочлена згідноіз загальноприйнятими стандартами)
*         function maxi (n, m:integer):integer;(знаходження числа, більшого з двох)
*         function mini (n, m:integer):integer;(знаходження числа, меншого з двох)
*         procedure suma (a, b:poli; var c:poli);(знаходження суми двох многочленів)
*         procedure nsuma (a:maspoli; n:integer; varc:poli); (знаходження суми n многочленів)
*         procedure dobchy (a:poli; r:real; var c:poli);(добуток многочлена на скаляр)
*         procedure pidvst (a:poli; n:integer; var c:poli);(підвищення степеня многочлена на n одиниць)
*         procedure dobutok (a, b:poli; var c:poli); (знаходженнядобутку двох многочленів)
*         procedure ndobutok (a:maspoli; n:integer; varc:poli); (знаходження добутку n многочленів)
*         procedure mpoli (a:poli; m:integer; var c:poli);(знаходження m‑го степеня многочлена)
*         procedure polipoli (a, b:poli; var c:poli);(знаходження многочлена від многочлена)
*         procedure dilen (a, b:poli; var c, c1:poli);(знаходження частки і остачі від ділення двох многочленів)
*         procedure dyfer (a:poli; var b:poli);(знаходження похідної від многочлена)
*         procedure integ (a:poli; var b:poli);(знаходження невизначеного інтеграла від многочлена)
Тексти процедурта функцій містяться в розділі IMPLEMENTATION.
Головним файломпакету є файл kurs.pas. Його текст приведений в додатку 1.
В цьому файліконструюються вже описані змінні zero i od. Тут же реалізований інтерфейскористувача, який розроблений у вигляді меню. Управління роботою пакетуздійснюється через ввід числа, яке відповідає одному із запропонованих режимівроботи. До складу файлу входить директива компілятора $M, яка збільшує розмірстеку до максимально можливого./>/>/>/>/>5. Виконання контрольногоприкладу
Додавання многочленiв
Доданки
4.00x^ 2+ 3.00x
2.00x^ 4–1.00x^ 3+ 3.00x^2+ 4.50x+ 5.00
4.00x^ 3–1.00x^ 2+ 0.40x
Результат
2.00x^ 4+ 3.00x^ 3+6.00x^ 2+ 7.90x+ 5.00
Множення многочленiв
Множники
2.00x^ 3–1.00x^ 2+ 2.00x+1.00
1.00x^ 2+ 1.00
-1.00x^ 2+ 0.50x+ 0.50
Результат
-2.00x^ 7+ 2.00x^ 6–3.50x^5+ 1.50x^ 4+ 1.50x+ 0.50
пiднесення многочлена достепеня
многочлен 1.00x^ 3–2.00x^2+ 2.00x‑1.00
Піднесений до степеня 3
1.00x^9–6.00x^ 8+18.00x^7–35.00x^6+48.00x^5–48.00x^4+35.00x^3–18.00x^2+ 6.00x‑1.00
Многочлен від многочлена
Внутрішній многочлен1.00x^ 2+ 1.00x+ 1.00
Зовнішній многочлен1.00x^ 2+ 1.00x+ 1.00
Результат 1.00x^ 4+ 2.00x^3+ 4.00x^ 2+ 3.00x+ 3.00
Ділення многочленiв
Ділене 1.00x^ 5+ 2.00x^ 4–1.00x^3+ 2.00x^ 2+ 1.00x+ 5.00
Дільник 1.00x^ 2+ 1.00x+1.00
Частка 1.00x^ 3+ 1.00x^ 2–3.00x+4.00
Остача 1.00
знаходження похідної відмногочлена
многочлен 1.00x^ 4–1.00x^3+ 2.00x^ 2+ 3.00x+ 1.00
Похідна 2‑гопорядку
12.00x^ 2–6.00x+ 4.00
знаходження невизначеногоінтеграла від многочлена
без врахування констант
многочлен
12.00x^ 2–6.00x+ 4.00
Інтеграл 2‑гопорядку
1.00x^ 4–1.00x^ 3+ 2.00x^2/>/>/>/>/>6. Інструкція користувачупро роботу з програмним забезпеченням
До складу пакетувходять файли вихідних текстів kurs.pas i bibl.pas, а також відкомпільованіфайли kurs.exe та bibl.tpu.
Робота пакетуможлива як у інтегрованому середовищі Turbo-Pascal, так і безпосередньо зопераційної системи, запускаючи на виконання файл kurs.exe.
Ввести число длявибору потрібного режиму роботи.
4.Післявибору режиму роботи з’являється вікно вводу, де користувачу надаєтьсяможливість послідовно вводити потрібні для роботи дані після виводувідповідного повідомлення. Зокрема, коефіцієнти многочлена вводяться, починаючивід коефіцієнта при максимальному степеню невідомого, і після появивідповідного степеня. Коефіцієнтами многочленів є дійсні числа.
5.Післявводу всіх необхідних даних з’являється вікно, у якому приведені умова задачіта результат роботи програми. Для повернення до режиму меню слід натиснутидовільну клавішу.
6.Длявиходу з пакету в режимі меню ввести число 0.
/>/>/>/>/>Висновки
В даній роботіреалізована задача «Виконання символьних операцій з многочленами». Здійсненоматематичний опис задачі, постановку задачі та розробку програмного пакетузгідно з постановкою. Роботу пакету перевірено на контрольному прикладі,одержано результати, що співпадають з теоретичними.
Дальшим розвиткомтеми може бути створення «формульного редактора», який спрощував би довільні математичнівирази, до складу яких входять многочлени./>/>/>/>/> 

/>/>/>/>/>Додаток
Вихідні тексти програм/>
Файл kurs.pas
program kurs;
{$M 65520,0,655360}
Uses Crt, bibl;
label 1;
{початок програми}
var i, m, menu:integer;
n:array [1..20] ofinteger;
a:maspoli; c, c1:poli;
nb:integer; b:poli;
na:integer; ba:poli;
roz1, roz2:integer;
begin
{створення кiльцевогонуля zero i кiльцевої одиницi od}
for i:=0 to 100 do beginzero[i]:=0.00; od[i]:=0 end;
od[0]:=1;
while true do begin
clrscr;
TextBackground(LightMagenta);
TextColor(Yellow);
roz1:=25; roz2:=10;
gotoxy (roz1, roz2);
roz2:=roz2+1;
writeln ('Сума mмногочленiв 1');
gotoxy (roz1, roz2);
roz2:=roz2+1;
writeln ('Добуток mмногочленiв 2');
gotoxy (roz1, roz2);
roz2:=roz2+1;
writeln ('Многочлен встепенi m 3');
gotoxy (roz1, roz2);
roz2:=roz2+1;
writeln ('Многочлен вiдмногочлена 4');
gotoxy (roz1, roz2);
roz2:=roz2+1;
writeln ('Дiлення многочленiв5');
gotoxy (roz1, roz2);
roz2:=roz2+1;
writeln ('Диференцiюваннямногочлена 6');
gotoxy (roz1, roz2);
roz2:=roz2+1;
writeln ('Iнтегрування многочлена7');
gotoxy (roz1, roz2);
roz2:=roz2+1;
writeln ('Вихiд 0');
roz2:=roz2+1;
gotoxy (roz1+10, roz2); readln(menu);
if (menu=0) then goto 1;
TextBackground(LightBlue);
TextColor(Yellow);
{*************додавання*************************}
if (menu=1) then
begin
Clrscr;
riv (zero, c);
write ('число многочленiв');
read(m);
for i:=1 to m do
begin
writeln ('степiнь многочлена');
read (n[i]);
vvid (n[i], a[i]);
end;
nsuma (a, m, c);
Clrscr;
writeln ('Додавання многочленiв');
write('Доданки');
for i:=1 to m do vyvid (a[i]);
writeln;
write('Результат');
vyvid(c);
repeat until keypressed;
end;
{********************множення******************}
if (menu=2) then
begin
Clrscr;
write ('число многочленiв');
read(m);
for i:=1 to m do
begin
writeln ('степiнь многочлена');
read (n[i]);
vvid (n[i], a[i]);
end;
ndobutok (a, m, c);
Clrscr;
writeln ('Множення многочленiв');
write('Множники');
for i:=1 to m do vyvid (a[i]);
writeln;
write('Результат');
vyvid(c);
repeat until keypressed;
end;
{*********************пiднесеннямногочлена до степеня******}
if (menu=3) then begin
clrscr;
riv (zero, c);
writeln ('пiднесення многочленадо степеня');
writeln ('степiнь многочлена');
read(nb);
vvid (nb, b);
writeln;
write ('До якого степеняпiднести ');
read(m);
mpoli (b, m, c);
clrscr;
writeln ('пiднесення многочленадо степеня');
write('многочлен');
vyvid(b);
writeln;
write ('Пiднесений достепеня ', m:2);
vyvid(c);
repeat until keypressed;
end;
{***************знаходженнямногочлена вiд многочлена******}
if (menu=4) then
begin
riv (zero, c);
clrscr;
writeln ('Знаходження многочленавiд многочлена ');
writeln ('Внутрiшнiй многочлен');
writeln ('степiнь многочлена');
read(nb);
vvid (nb, b);
writeln;
writeln ('Зовнiшнiй многочлен');
writeln ('степiнь многочлена');
read(na);
vvid (na, ba);
writeln;
clrscr;
writeln ('Многочлен вiдмногочлена');
write ('Внутрiшнiй многочлен');
vyvid(b);
writeln;
write ('Зовнiшнiй многочлен');
vyvid(ba);
polipoli (b, ba, c);
writeln;
write('Результат');
vyvid(c);
repeat until keypressed;
end;
{**************************дiленнямногочленiв****}
if (menu=5) then
begin
riv (zero, c);
riv (zero, c1);
clrscr;
writeln ('Дiлення многочленiв');
writeln('Дiлене');
writeln ('степiнь многочлена');
read(nb);
vvid (nb, b);
writeln;
writeln ('Дiльник ');
writeln ('степiнь многочлена');
read(na);
vvid (na, ba);
writeln;
clrscr;
dilen (b, ba, c, c1);
clrscr;
writeln ('Дiлення многочленiв');
write('Дiлене');
vyvid(b);
writeln;
write('Дiльник');
vyvid(ba);
writeln;
write('Частка');
vyvid(c);
writeln;
write('Остача');
vyvid(c1);
repeat until keypressed;
end;
{************диференцiюваннямногочленiв************}
if (menu=6) then
begin
clrscr;
writeln ('похiдна вiдмногочлена');
writeln ('Порядок похiдноi');
read(m);
writeln ('степiнь многочлена');
read(nb);
vvid (nb, b);
writeln;
riv (b, c);
for i:=1 to m do
dyfer (b, b);
clrscr;
writeln ('знаходження похiдноївiд многочлена');
write('многочлен');
vyvid(c);
writeln;
write ('Похiдна ', m:2,'-гопорядку');
vyvid(b);
repeat until keypressed;
end;
{*****************iнтегруваннямногочленiв*************}
if (menu=7) then
begin
clrscr;
writeln ('невизначений iнтегралвiд многочлена');
writeln ('Без вказання констант');
writeln ('Порядок iнтеграла');
read(m);
writeln ('степiнь многочлена');
read(nb);
vvid (nb, b);
writeln;
riv (b, c);
for i:=1 to m do
integ (b, b);
clrscr;
writeln ('знаходження невизначеногоiнтеграла вiд многочлена');
writeln ('без врахуванняконстант');
write('многочлен');
vyvid(c);
writeln;
write ('Iнтеграл ', m:2,'-гопорядку');
vyvid(b);
repeat until keypressed;
end;
end;
1: end.
/>/>/>Файл bibl.pas
UNIT bibl; {Бiблiотекапiдпрограм}
INTERFACE
uses crt;
TYPE
poli=array [0..100] of real;
type maspoli=array [1..20]of poli;
var zero, od:poli;
{кільцеві нуль і одиниця}
function stepin (a:poli):integer;
procedure riv (a:poli; varb:poli);
procedure vvid (n:integer;var a:poli);
function poper (a:poli; m:integer):integer;
procedure vyvid (a:poli);
function maxi (n, m:integer):integer;
function mini (n, m:integer):integer;
procedure suma (a, b:poli;var c:poli);
procedure nsuma (a:maspoli;n:integer; var c:poli);
procedure dobchy (a:poli;r:real; var c:poli);
procedure pidvst (a:poli;n:integer; var c:poli);
procedure dobutok (a, b:poli;var c:poli);
procedure ndobutok (a:maspoli;n:integer; var c:poli);
procedure mpoli (a:poli; m:integer;var c:poli);
procedure polipoli (a, b:poli;var c:poli);
procedure dilen (a, b:poli;var c, c1:poli);
procedure dyfer (a:poli; varb:poli);
procedure integ (a:poli; varb:poli);
IMPLEMENTATION
function stepin (a:poli):integer;
{визначення степенямногочлена}
var i:integer;
begin
i:=100;
while ((a[i]=0) and(i>=0)) do i:=i‑1;
stepin:=i;
end;
procedure riv (a:poli; varb:poli);
{присвоення одномумногочлену значення iншого}
var i:integer;
begin
for i:=0 to 100 dob[i]:=a[i];
end;
procedure vvid (n:integer;var a:poli);
{ввiд многочлена}
var i:integer;
begin
for i:=100 downto n+1 doa[i]:=0;
writeln ('вводьте многочлен');
for i:=n downto 1 do
begin
write ('x^', i:2,'*');
read (a[i]);
write ('+');
end;
read (a[0]);
end;
function poper (a:poli; m:integer):integer;
{визначення молодшого на1 коефiцiента многочлена пiсля m}
var i:integer;
begin
i:=m‑1;
while (a[i]=0) and (i>=0)do i:=i‑1;
poper:=i;
end;
procedure vyvid (a:poli);
{вивiд многочлена}
var i, n:integer;
begin
n:=stepin(a);
writeln;
if ((n>0) or (a[0]0))then
begin
i:=n;
while ((i>=1) and (poper(a,i)>-1)) do
begin
if (a[i]0) thenbegin
if (i>1) then
write (a[i]:5:2,'x^', i:2)
else write (a[i]:5:2,'x');
if (a [poper(a, i)]>0)then write ('+');
end;
i:=i‑1;
end;
if (i>1) then write (a[i]:5:2,'x^',i:2)
else
if (i=1) then write (a[i]:5:2,'x')
else
write (a[i]:5:2);
end
else
write('0');
end;
function maxi (n, m:integer):integer;
begin
if (n>=m) then maxi:=nelse maxi:=m;
end;

function mini (n, m:integer):integer;
begin
if (n
end;
procedure suma (a, b:poli;var c:poli);
{сума 2 многочленiв}
var i, na, nb, nab, nba:integer;
begin
na:=stepin(a);
nb:=stepin(b);
nab:=maxi (na, nb);
riv (zero, c);
for i:=nab downto 0 doc[i]:=a[i]+b[i];
end;
procedure nsuma (a:maspoli;n:integer; var c:poli);
{сума n многочленiв}
var i:integer;
begin
riv (zero, c);
for i:=1 to n do
suma (c, a[i], c);
end;
procedure dobchy (a:poli;r:real; var c:poli);
{добуток скаляра намногочлен}
var i:integer;
begin
riv (zero, c);
for i:=0 to stepin(a) do
c[i]:=r*a[i];
end;
procedure pidvst (a:poli;n:integer; var c:poli);
(домноження многочлена наx^n)}
var i:integer;
begin
for i:=stepin(a)+n downton do
c[i]:=a [i-n];
for i:=stepin(a)+n+1 to100 do c[i]:=0;
for i:=0 to n‑1 doc[i]:=0;
end;
procedure dobutok (a, b:poli;var c:poli);
{добуток 2 многочленiв}
var i:integer;
t, t1, t2:poli;
begin
riv (zero, t);
for i:=0 to stepin(b) do
begin
riv (zero, t1);
riv (zero, t2);
dobchy (a, b[i], t1);
pidvst (t1, i, t2);
suma (t, t2, t);
end;
riv (t, c);
end;
procedure ndobutok (a:maspoli;n:integer; var c:poli);
{добуток n многочленiв}
var i:integer;
begin
riv (od, c);
for i:=1 to n do
dobutok (c, a[i], c);
end;
procedure mpoli (a:poli; m:integer;var c:poli);
{пiднесення многочлена достепеня}
var i:integer;
begin
riv (od, c);
for i:=1 to m do
dobutok (c, a, c);
end;
procedure polipoli (a, b:poli;var c:poli);
{многочлен вiдмногочлена}
var i:integer;
t1, t2:poli;
begin
riv (zero, c);
for i:=0 to stepin(b) do
begin
riv (zero, t2);
riv (zero, t1);
mpoli (a, i, t1);
dobchy (t1, b[i], t2);
suma (c, t2, c);
end;
end;
procedure dilen (a, b:poli;var c, c1:poli);
var n, m, i:integer;
t1, t2, t3, t4, t5:poli;
{дiлення многочленiв зостачею}
begin
riv (a, t4);
n:=stepin(a);
m:=stepin(b);
riv (zero, t3);
while n>=m do
begin
riv (zero, t5);
riv (zero, t1);
riv (zero, t2);
t5 [n-m]:=a[n]/b[m];
suma (c, t5, c);
dobutok (t5, b, t1);
dobchy (t1, – 1, t2);
suma (a, t2, a);
n:=stepin(a);
end;
dobutok (c, b, t3);
dobchy (t3, – 1, t3);
suma (t4, t3, c1);
end;
procedure dyfer (a:poli; varb:poli);
{знаходження похiдноi}
var n, i:integer;
begin
n:=stepin(a);
riv (zero, b);
for i:=n downto 1 do
b [i‑1]:=i*a[i];
end;
procedure integ (a:poli; varb:poli);
{знаходженняневизначеного iнтеграла}
var n, i:integer;
begin
n:=stepin(a);
riv (zero, b);
for i:=n downto 0 do
b [i+1]:=a[i]/(i+1);
end;
end.