Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи з програмування Модуль 3.DOC
Скачиваний:
9
Добавлен:
23.02.2016
Размер:
1.45 Mб
Скачать

Interface

{ Процедурний тип }

TYPE TFun = Function ( x: double; t:integer): double;

Function F1(x: double; t:integer): double;

Function Integral(a, b, e: double; t:integer; F: TFun): double;

Implementation

{ Підінтегральна функція }

Function F1(x: double; t:integer): double; FAR;

var i:integer;

begin

Result:=1;

for i:=1 to t do

Result:=Result*x;

end;

{ Функція обчислення інтеграла}

Function Integral(a, b, e: double; t:integer; F: TFun): double;

Const n=10;

Var x, h, d, s2, s2n: double;

i, m: integer;

begin

m:=n;

repeat

h:=(b-a)/m;

s2n:=(F(a, t)+F(b, t))/2;

for i:=1 to m-1 do

begin

x:=a+i*h;

s2n:= s2n+F(x, t);

end;

s2n:= s2n*h;

if m=n then d:=e+1 else d:=abs(s2n-s2);

s2:=s2n; m:=m*2;

until d<e;

result:=s2n;

end;

end.

Тепер можна написати обробники кнопок Обчислити та Вихід. Для цього потрібно вибрати відповідну кнопку, перейти в Інспекторі Об’єктів на сторінку Evants та двічі клацнути лівою клавішею мишки в полі значення події OnClick. В результаті з’явиться заготовка, в яку потрібно вписати текст обробника. Тексти обробників містяться у програмному модулі ULAB9_1.

{Обробник кнопки Обчислити}

procedure TFIN1.Button1Click(Sender: TObject);

VAR a, b, e: double;

t, t1, t2, h:integer;

i1: double;

BEGIN

{Введення початкових даних}

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

e:=StrToFloat(Edit3.Text);

t1:=StrToInt(Edit4.Text);

t2:=StrToInt(Edit5.Text);

h:=StrToInt(Edit6.Text);

t:=t1;

while (t<=t2) do

begin

{Обчислення інтеграла}

i1:= Integral(a, b, e, t, F1);

{Виведення результату}

Memo1.Lines.Add('t='+IntToStr(t)+' I='+FloatToStr(i1));

t:=t+h;

end;

end;

{Обробник кнопки Вихід}

procedure TFIN1.Button2Click(Sender: TObject);

begin

Close;

end;

Для завершення розробки проекту потрібно командою Project!Add to Project модуль UINTEG включити в проект і командою File!Use Unit підключити до головного модуля ULAB9_1. Тепер командою Run!Run проект можна запустити на виконання. Результат роботи програми приведений на Рис. 9.1.

Лабораторна робота № 9

Процедурні типи

Мета роботи:

  1. Засвоєння процедурних типів.

2. Отримання практичних навиків передачі процедур і функцій як параметрів при зверненні до інших процедур і функцій.

Теоретичні відомості для виконання лабораторної роботи

Обчислення інтегралів. Для обчислення інтегралів використовуються формули наближеного інтегрування.

1. Формула середніх прямокутників

,

де – кількість точок розбиття відрізкана рівні частини,– крок розбиття,,,.

2. Формула трапецій

,

де – кількість точок розбиття відрізкана рівні частини,– крок розбиття,,,,.

3. Формула Сімпсона (формула парабол)

,

де – кількість точок розбиття відрізкана рівні частини,– крок розбиття,,,,.

Обчислення інтегралів за згаданими формулами здійснюється з заданою точністю . Для досягнення заданої точності побудуємо процес обчислення значень інтеграла,, подвоюючи на кожному кроці кількість точок розбиття відрізка, тобто, де– початкова кількість точок розбиття, наприклад. Якщо виконується умова, то процес завершується, авважається значенням інтеграла з точністю.

Розв’язування рівнянь. Розв’язування рівнянь виду

, (1)

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

1. Метод поділу проміжку навпіл. Якщо функція неперервна і набуває на кінцях проміжкузначень різних знаків, тобто, то корінь рівняння (1)можна обчислити з наперед заданою точністю. Побудуємо обчислювальний процес. Обчислимо середину проміжку. Оскільки, то буде:, або, або. Якщо, то знайдено точне значення кореняі процес завершується. Прикорінь міститься на проміжку, покладемо, прикорінь міститься на проміжку, покладемо. Якщо довжина проміжкубільша за, то знову обчислюється середина проміжку і т. д. Якщо довжина проміжкуменша за, то процес обчислень завершується, авважається наближенням кореняз точністю.

2. Метод ітерацій. Нехай на проміжку рівняння (1), денеперервна нафункція, має єдиний корінь. Замінимо рівняння (1) еквівалентним йому рівняннямтак, щоб,, а всі значенняналежали проміжкупри.

Починаючи з деякого початкового наближення знаходимо послідовні наближенняза формулою

, . (2)

Обчислення завершуються при виконані умови

, (3)

при цьому вважається наближеним значенням кореняз заданою точністю.

Рівняння (1) завжди можна подати у вигляді так, щоб виконувалися вище наведені умови, наприклад,

, (4)

де – стала. Прирівняння (4) і (1) еквівалентні. Сталудобирають так, щоб в околікоренябулотобто, щоб виконувались умови. Отже сталаповинна мати той самий знак, що й, і задовольняти умову. Процес збігається тим швидше, чим ближчедо нуля. Отже,слід добирати так щоб добутокбув по можливості ближчий додля всіх.

3. Метод хорд (січних). Якщо функція двічі неперервно диференційовна на проміжку, похіднівідмінні від нуля і зберігають знак на цьому проміжку, а, то за методом хорд наближене значення коренязнаходять як абсцису точки перетину хорди, що проходить через точки, з віссю.

Послідовні наближення кореня знаходять за формулою

, , (5)

де якщо, абоякщо. Обчислення завершуються при виконанні умови

, (6)

де – задана точність,,, при цьомувважається наближеним значенням кореняз заданою точністю.

4. Метод дотичних (Ньютона). Якщо функція задовольняє ті ж умови, що і в методі хорд, то за методом дотичних наближене значення коренязнаходять як абсцису точки перетину дотичної до кривоїв одній із точокчиз віссю.

Послідовні наближення кореня знаходять за формулою

, , (7)

де якщо, абоякщо. Обчислення завершуються при виконані умови

, (8)

де – задана точність,,, при цьомувважається наближеним значенням кореняз заданою точністю.

5. Комбінований метод. Якщо функція задовольняє ті ж умови, що і в методі хорд, і в методі дотичних, то для уточнення коренязручно комбінувати метод хорд і метод дотичних. При цьому одержуються оцінки коренязверху і знизу.

Послідовні наближення кореня знаходять за формулами

, (9)

,, (10)

де якщо, абоякщо.

Обчислення завершуються при виконанні умови

, (11)

де – задана точність, при цьомувважається наближеним значенням кореняз заданою точністю.

Завдання:

Розробити програму обчислення таблиці значень інтеграла з заданою точністю для, що змінюється на інтерваліз кроком. Для обчислення значення інтеграла використати одну із формул наближеного інтегрування для завдань: 1-4 – прямокутників; 5-9 – трапецій; 10-14 – Сімпсона. У програмі використати підпрограму обчислення інтеграла за вказаною формулою, в яку передати підінтегральну функцію як параметр. Результати обчислень надрукувати у вигляді таблиці, в кожному рядку якої розмістити значенняі відповідне йому значення інтеграла.

1. ,,, .

2. ,,, .

3. ,,, .

4. , ,, .

5. , ,,.

6. ,,, .

7. ,,, .

8. ,,, .

9. ,,, .

10. ,,, .

11. ,,, .

12. ,,, .

13. ,,, .

14. ,,, .

Розробити програму уточнення коренів рівняння на відрізкуз точністю. Для уточнення коренів рівняння використати один із ітераційних методів для завдань: 15-18 – поділу відрізка пополам; 19-21 – ітерацій; 22-24 – хорд; 25-27 – дотичних; 28-30 – комбінований. У програмі використати підпрограму уточнення коренів рівняння за вказаним методом, в яку передати як параметр функцію обчислення. Результати обчислень надрукувати у вигляді таблиці, у кожному рядку якої розмістити значенняі відповідне йому значення кореня.

  1. ,.

16. ,.

17. ,.

18. ,.

19. ,.

20. ,.

21. ,.

22. ,.

23. ,.

24. ,.

25. ,.

26. ,.

27. ,.

28. ,.

29. ,.

30. ,.