
- •Звіт з практики
- •5.05010301 “Розробка програмного забезпечення”
- •Вибір варіанту завдань
- •1. Основні поняття Object Pascal
- •Label { Розділ опису міток } Const { Розділ опису констант }
- •Дійсні дані зображуються в експоненціальній формі
- •Введення і виведення даних. Для введення і виведення даних використовуються процедури
- •Лабораторна робота № 1 Лінійні програми з розгалуженнями
- •2. Оператори повторень
- •Оператор for з зарезервованим словом to виконується за алгоритмом:
- •Завершення виконання оператора for.
- •Лабораторна робота № 2 Циклічні програми. Обчислення з заданою точністю
- •3. Структуровані типи даних. Масиви
- •Лабораторна робота № 3 Алгоритми обробки масивів
- •4. Алгоритми обробки багатовимірних масивів
- •Лабораторна робота № 4 Алгоритми обробки багатовимірних масивів
- •5. Упорядкування і пошук даних
- •Лабораторна робота № 5 Упорядкування і пошук даних
- •6. Структуровані типи даних. Множини
- •Лабораторна робота № 6 Множини
- •7. Символьні рядки
- •Лабораторна робота № 7 Символьні рядки
- •8. Процедури і функції
- •Лабораторна робота № 8 Процедури і функції
- •9. Процедури і функції. Процедурні типи
- •Лабораторна робота № 9 Процедурні типи
- •Теоретичні відомості для виконання лабораторної роботи
- •1. Формула середніх прямокутників
- •2. Формула трапецій
- •3. Формула Сімпсона (формула парабол)
- •Розв’язування рівнянь. Розв’язування рівнянь виду
- •10. Рекурсивні процедури і функції Рекурсія – це такий спосіб організації обчислювального процесу, при якому підпрограма під час виконання звертається сама до себе.
- •Лабораторна робота № 10 Рекурсивні процедури і функції
- •11. Файли
- •Лабораторна робота № 11 Текстові файли
- •Додаток а Процедури і функції Object Pascal
9. Процедури і функції. Процедурні типи
Для організації передачі процедур і функцій як параметрів при зверненні до інших процедур і функцій введено процедурний тип. Існує два процедурних типи: тип-процедура і тип-функція. Для опису процедурного типу використовується заголовок процедури або функції, в якому опускається ім’я, наприклад:
TYPE Tproc = Procedure (a, b, c: double; var v, w: double );
TFun = Function ( x, y: double): double;
Function Sum( x, y: double): double; far;
Begin
Result:=x+y;
End;
VAR P: Tproc;
F: Tfun;
a, b, c, d, z: double;
BEGIN
writeln (‘Введіть a, b, c, d’);
readln (a, b, c, d);
F:=Sum;
z:=Sum(a, b) – F(c, d);
writeln (‘z=’,z);
END.
Із прикладу видно, що процедурній змінній P можна присвоювати як значення ім’я процедури, а змінній F ім’я функції. Після присвоєння ім’я змінної стає синонімом імені підпрограми і його можна використовувати для звернення до підпрограми.
Процедура або функція, яка присвоюється процедурній змінній, повинна транслюватися з дальнім переходом (з директивою FAR). Крім цього вона не може бути стандартною процедурою або функцією і не може бути локальною, тобто вкладеною.
Проілюструємо механізм передачі процедур і функцій як параметрів на прикладі програми наближеного обчислення означених інтегралів за формулою трапецій.
Приклад. Розробити програму обчислення за формулою трапецій таблиці значень інтеграла
,
з
точністю
=0.00001
для
,
що змінюється на інтервалі
з кроком
=1.
Для розв’язання задачі командою File|New Application створимо новий проект. На екрані з’явиться чиста форма з заголовком Form1. Присвоїмо цій формі заголовок Caption = Обчислення інтегралів і програмне ім’я Name = FINT. Командою File|Save All запишемо програмний модуль під іменем ULAB9_1.pas, а проект – LAB9_1.dpr.
Розмістимо
на цій формі шість компонентів Edit для
введення початкових даних: меж інтегрування
– a,
b;
точності обчислення інтеграла – e;
меж і кроку зміни параметра t
–
.
Присвоїмо цим компонентам програмні
імена Edit1, Edit2, Edit3, Edit4, Edit5, Edit6, встановлені
за замовчуванням (властивість Name) і
очистимо їм значення властивості Text.
Для виведення результатів розмістимо на формі компонент Memo (багаторядковий редактор) і встановимо йому такі значення властивостей: Name = Memo1 (програмне ім’я), ScrolBars=ssBoth (горизонтальне і вертикальне прокручування). Двічі клацнувши мишкою у полі значення властивості Lines, ввійдемо в редактор і очистимо значення цієї властивості.
Пояснення до цих компонентів зробимо за допомогою компонента Label (властивість Caption).
Крім цього, розмістимо на формі дві керуючі кнопки (компонент Button) з написами Обчислити та Вихід (властивість Caption) і програмними іменами Button1, Button2 (властивість Name) (Рис. 9.1).
Для написання обробників кнопок Обчислити та Вихід розмістимо функції обчислення підінтегральної функції та обчислення інтеграла в окремому програмному модулі, не пов’язаному з формою, з іменем UINTEG.
Для створення модуля, не пов’язаного з формою, потрібно виконати команду File|New і у вікні діалогу вибрати значок з підписом Unit, на екрані з’явиться заготовка модуля, яку слід запам’ятати під іменем UINTEG.
Рис 9.1. Форма Обчислення інтегралів
Модуль UINTEG має вигляд:
unit UINTEG;
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.