Лабораторна робота № 4. Програми, що гілкуються. Многочлени

Дана лабораторна робота призначена для вивчення оператора умовного переходу на прикладі роботи з многочленами від однієї змінної.

 Докладні відомості по даних темах містяться:- в розділі "Мова програмування GAP" <file:///d:\ Комп'ютерна%20алгебра\metgap43\3-data.htm> даної методичної допомоги (див. п.2.10);- в розділі "Прімененіє GAP для вивчення теорії многочленів" <file:///d:\ Комп'ютерна%20алгебра\metgap43\tppmsgs\msgs0.htm> учбових матеріалів до курсу алгебри і теорії чисел;- в розділі "Polynomials and Rational Functions" довідкового керівництва за системою GAP <file:///d:\ Комп'ютерна%20алгебра\metgap43\tppmsgs\msgs0.htm>.

Приклад: Розробити функцію, яка визначає, чи є коефіцієнти заданого многочлена взаємно простими, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - початковий многочлен, розділений на НОД своїх коефіцієнтів.

 Перед тим, як приступити до розробки функції, спробуємо зрозуміти схему її роботи в діалоговому режимі. Задамо змінну х і многочлен f від цієї змінної, потім отримаємо список коефіцієнтів многочлена f, знайдемо їх найбільшого загального дільника d і розділимо на нього многочлен f :

gap> x:=indeterminate(Rationals,"x");xgap> f:=20*x^3+15*x^2+10*x+5;20*x^3+15*x^2+10*x+5gap> Coefficientsofunivariatepolynomial(f);[ 5, 10, 15, 20 ]gap> d:=gcd(last);5gap> f/5;4*x^3+3*x^2+2*x+1Тепер в робочому каталозі створимо текстовий файл наступного змісту (докладні інструкції по роботі з файлами див. в лабораторній роботі № 3 <file:///d:\ Комп'ютерна%20алгебра\metgap43\lab03.htm>):

 Coeffcancellation := function( f )local d;d := Gcd( Coefficientsofunivariatepolynomial( f ));if d<>1 then  return f/d;else  return f;fi;end;Після читання даної програми (див. приклад з лабораторної роботи № 3 <file:///d:\ Комп'ютерна%20алгебра\metgap43\lab03.htm>) ми можемо звертатися до функції Coeffcancellation. Для перевірки правильності роботи обидві алгоритму спочатку застосуємо її до раніше заданого многочлена f, а потім до многочлена g, коефіцієнти якого вже є взаємно простими:gap> Coeffcancellation(f);4*x^3+3*x^2+2*x+1gap> g:=x^3+x^2+10*x+5;x^3+x^2+10*x+5gap> Coeffcancellation(g);x^3+x^2+10*x+5

 Очевидно, що програма працює коректно. При розробці функцій звернете увагу на наступне:- необхідність тестування обох гілок алгоритму;- використання відступів при форматуванні тексту програми;- опциональность операторів else і elif залежно від конкретного завдання.Завдання для лабораторної роботи № 4

Варіант 1. Розробити функцію, яка визначає, чи має заданий многочлен f коріння кратності вище першою, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен g, що має те ж коріння, що і початковий, але тільки першій кратності (при цьому для знаходження многочлена g необхідно розділити многочлен f на найбільшого загального дільника многочлена f і його похідній f' ). Примітка: використовувати функції Gcd, Derivative, Isone.

 Варіант 2.Розробити функцію, яка визначає, чи є два задані многочлени f і g взаємно простими, і у разі позитивної відповіді повертає їх твір, а у разі негативного - їх твір, розділений на їх найбільшого загального дільника. Примітка: використовувати функції Gcd, Isone.

 Варіант 3.Розробити функцію, яка визначає, чи має заданий многочлен f різні знаки на кінцях заданого інтервалу [а,b], і у разі позитивної відповіді повертає середнє арифметичне значень многочлена на кінцях інтервалу, а у разі негативного - найбільше із значень многочлена на кінцях інтервалу. Примітка: використовувати функції Value, Maximum.

 Варіант 4.Розробити функцію, яка визначає, чи всі коефіцієнти заданого многочлена f є парними, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен (1/2)*f.

 Варіант 5.Розробити функцію, яка визначає, чи розкладається заданий многочлен f в твір лінійних множників, і у разі позитивної відповіді повертає їх твір, а у разі негативного - одиницю. Примітка: використовувати функції Factors, Degree.

 Варіант 6.Розробити функцію, яка визначає, чи збігаються ступені двох заданих многочленів f і g, і у разі позитивної відповіді повертає їх суму, а у разі отріцатльного - твір.Примітка: використовувати функцію Degree.

 Варіант 7.Розробити функцію, яка визначає, чи має заданий многочлен f парний ступінь, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен f*x.Примітка: використовувати функції Degree, Indeterminateofunivariaterationalfunction.

 Варіант 8.Розробити функцію, яка визначає, чи дорівнює нулю вільний член заданого многочлена, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен f / x.Примітка: використовувати функцію Indeterminateofunivariaterationalfunction.Варіант 9.Розробити функцію, яка визначає, чи дорівнює одиниці сума коеффіцентов заданого многочлена f, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - многочлен, отриманий з многочлена f діленням його на суму своїх коефіцієнтів.

 Варіант 10.Розробити функцію, яка визначає, чи дорівнює одиниці старший коефіцієнт заданого многочлена f, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - многочлен, отриманий з многочлена f діленням його на свій старший коефіцієнт.

 Варіант 11.Розробити функцію, яка визначає, чи дорівнює нулю сума коеффіцентов заданого многочлена f, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - многочлен, отриманий з многочлена f відніманням з нього суми своїх коефіцієнтів.

 Варіант 12.Розробити функцію, яка визначає, чи дорівнює одиниці сума коеффіцентов заданого многочлена f, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - многочлен, отриманий з многочлена f відніманням з нього суми своїх коефіцієнтів і збільшенням одиниці.Варіант 13.Розробити функцію, яка визначає, чи має заданий многочлен f непарний ступінь, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен f*x.Примітка: використовувати функції Degree, Indeterminateofunivariaterationalfunction.

 Варіант 14.Розробити функцію, яка визначає, чи дорівнює нулю похідна заданого многочлена  f  в заданій точці а, і у разі негативної відповіді повертає значення похідної многочлена f в крапці а, а у разі позитивного, - значення многочлена f в крапці а.Примітка: використовувати функції Derivative, Value.

 Варіант 15.Розробити функцію, яка визначає, чи позитивне значення заданого многочлена  f  в заданій точці а, і у разі негативної відповіді повертає значення похідної многочлена f в крапці а, а у разі позитивного, - значення многочлена f в крапці а.Примітка: використовувати функції Derivative, Value.

 Варіант 16.Розробити функцію, яка визначає, чи негативне значення заданого многочлена  f  в заданій точці а, і у разі негативної відповіді повертає значення похідної многочлена f в крапці а, а у разі позитивного, - значення многочлена f в крапці а.Примітка: використовувати функції Derivative, Value.

 Варіант 17.Розробити функцію, яка визначає, чи всі коефіцієнти заданого многочлена f діляться на три, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен (1/3)*f.

 Варіант 18.Розробити функцію, яка визначає, чи дорівнює одиниці вільний член заданого многочлена f, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - многочлен, отриманий з многочлена f діленням його на свій вільний член.