- •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 Динамічні структури даних
- •12. Файли
- •Лабораторна робота № 12 Текстові файли
- •Додаток Процедури і функції Object Pascal
- •Література
- •Практикум
- •58012, Чернівці, вул. Коцюбинського, 2
Введення і виведення даних. Для введення і виведення даних використовуються процедури
read ([f,] v1,v2, … ,vn ) , readln ([f,] v1,v2, … ,vn ),
write ([f,] v1,v2, …, vn ), writeln ([f,] v1,v2, … ,vn ),
де f – файлова змінна є необов’язковим параметром і при його відсутності введення даних здійснюється зі стандартного вхідного файла input (з клавіатури), а виведення – у стандартний вихідний файл output (на екран монітора), v1,v2, …, vn – список змінних при введенні і список виразів при виведенні даних.
При введенні змінні можуть бути тільки символьного, цілого і дійсного типів та символьні рядки.
При введенні даних символьного типу символ читається із вхідного файла і присвоюється змінній списку введення.
При введенні даних цілого типу дані у вхідному файлі повинні розділятися пробілами, знаками табуляції або ознакою кінця рядка і відповідати синтаксису цілого числа. Наприклад,
Var i, j, k:integer; Дані у вхідному файлі:
Begin -143 562 +75 < Enter >
read (i, j, k );
…………. Змінним присвоюються значення:
End. I=-143, j=562, k=75.
Відзначимо, що контроль допустимості значень для цілих даних не здійснюється. Отже, якщо значення числа, яке вводиться, більше максимального або менше мінімального допустимих значень, то число вводиться неправильно і помилка при цьому не фіксується.
При введенні даних дійсного типу дані у вхідному файлі повинні розділятися або пробілами, або знаками табуляції, або ознакою кінця рядка і відповідати синтаксисові цілого або дійсного числа. Наприклад,
Var a, b, c:integer; Дані у вхідному файлі:
Begin -17.3 56 5.75e1 < Enter >
read (a,b,c );
…………. Змінним присвоюються значення:
End. a=-143, b=56.0, c=57.5.
При введенні символьних рядків дані у вхідному файлі зображуються набором символів. Із вхідного файла читається набір символів, кількість яких дорівнює довжині рядка. Цей набір присвоюється відповідній змінній. Якщо кількість символів менша ніж довжина рядка, то введення здійснюється до ознаки кінця рядка. Наприклад,
var s1,s2,s3:string [6]; Дані у вхідному файлі:
begin Рядок символів.
read (s1,s2,s3 );
…………. Змінним присвоюються значення:
end. s1=’Рядок’, s2=’символ’, s3=’ів.’.
При виведенні даних параметри v1,v2,…, vn у процедурах write і writeln мають вигляд
вираз [: <мінімальний розмір поля> [:< десяткові знаки>]],
де вираз, значення якого обчислюється і виводиться, може бути тільки символьного, цілого, логічного і дійсного типів або символьним рядком; <мінімальний розмір поля> – формат, що визначає кількість позицій, які відводяться для виведення значення виразу, може задаватися для всіх типів даних; десяткові знаки – формат, який визначає кількість дробових знаків у числі, може задаватися тільки для дійсних даних разом з першим форматом.
Виведення даних буде форматним, якщо задані формати або безформатним, якщо формати не задані. При безформатному виведенні значення будуть розміщуватися у вихідному файлі підряд без будь-яких розділових знаків. При форматному виведенні – значення розміщуються у визначених першим форматом полях і будуть вирівняні за їх правою межею.
Приклад. На площині задані обмежена лініями область і точки . Розробити програму, яка обчислює периметр і площу трикутника , якщо точки належать області і не лежать на одній прямій, інакше видати відповідне повідомлення.
Умова належності точок обмеженій області полягає в тому, що їх координати повинні одночасно задовольняти систему нерівностей: , .
Умова того, що точки не лежать на одній прямій
.
Площа трикутника дорівнює .
Периметр трикутника дорівнює
.
Для розв’язання задачі командою File|New Application створимо новий проект. На екрані з’явиться форма із заголовком Form1. Присвоїмо властивостям форми Caption (заголовок форми) та Name (програмне ім’я) нові значення. Caption = Обчислення периметра і площі трикутника, Name = Form1(за замовчуванням). Тепер командою File|Save All запам’ятаємо програмний модуль у файл з іменем ULAB1_1.pas, а проект – LAB1_1.dpr.
При цьому середовище Delphi створює файл проекту (DPR-файл), вміст якого автоматично змінюється зі створенням нових форм. Головний файл програми має вигляд:
program LAB1_1;
uses
Forms,
ULAB1_1 in 'ULAB1_1.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
У DPR-файлі підключення модуля Forms є обов’язковим, оскільки у ньому міститься визначення об’єкта Application. Цей об’єкт є основою будь-якої Delphi-програми і доступний на протязі її виконання. За ним підключаються всі модулі проекту. Директива {$R*.RES} підключає до результуючого EXE-файла ресурси, зокрема піктограму програми, яку буде видно на Панелі Задач Windows. Далі йде програмний блок, в якому викликаються три методи об’єкта Application. Метод Initialize підготовлює програму до роботи, метод CreateForm завантажує та ініціалізує форми, а метод Run активізує головну форму і починає виконання програми.
Об’єкт Application відсутній у Палітрі Компонентів, тому його властивості можна встановлювати тільки програмно. Найбільш важливі з них: MainForm – ім’я головної форми; ExeName – повне ім’я EXE-файла; Title – ім’я програми та Icon – піктограма програми, які відображаються на Панелі Задач Windows; HelpFile – ім’я файла довідника програми.
Після завершення розробки проекту DPR-файл містить перелік програмних модулів, які будуть подаватися на вхід компілятора.
Розробимо форму для введення початкових даних і виведення результату. Розмістимо на цій формі шість компонентів Edit для введення координат точок А, В, С і три для виведення результату. Присвоїмо цим компонентам програмні імена Edit1, Edit2, Edit3, Edit4, Edit5, Edit6, Edit7, Edit8, Edit8, Edit9, встановлені за замовчуванням (властивість Name) і очистимо їм значення властивості Text. Пояснення до цих компонентів зробимо за допомогою компонента Label (властивість Caption).
Крім цього, розмістимо на формі дві керуючі кнопки (компонент Button) з написами Обчислити та Вихід (властивість Caption) і програмними іменами Button1, Button2 (властивість Name) (Рис. 1.2).
Рис 1.2. Форма Обчислення периметра
і площі трикутника
Тепер потрібно написати обробники кнопок Обчислити та Вихід. Для того, щоб написати обробники цих кнопок, потрібно вибрати відповідну кнопку, перейти в Інспекторі Об’єктів на сторінку Events та двічі клацнути лівою клавішею мишки в полі значення події OnClick. У результаті з’явиться заготовка, в яку потрібно вписати текст обробника. Тексти обробників містяться у програмному модулі ULAB1_1.
unit ULAB1_1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Label5: TLabel;
Edit2: TEdit;
Label6: TLabel;
Label7: TLabel;
Edit3: TEdit;
Label8: TLabel;
Edit4: TEdit;
Label9: TLabel;
Label10: TLabel;
Edit5: TEdit;
Label11: TLabel;
Edit6: TEdit;
Label12: TLabel;
Edit7: TEdit;
Label13: TLabel;
Label14: TLabel;
Edit8: TEdit;
Edit9: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{Обробник кнопки Обчислити}
procedure TForm1.Button1Click(Sender: TObject);
VAR x1, y1, x2, y2, x3, y3: double;
s, p, d: double;
BEGIN
{Введення початкових даних}
x1:=StrToFloat(Edit1.Text);
y1:=StrToFloat(Edit2.Text);
x2:=StrToFloat(Edit3.Text);
y2:=StrToFloat(Edit4.Text);
x3:=StrToFloat(Edit5.Text);
y3:=StrToFloat(Edit6.Text);
{Підготовка до виведення результатів }
Edit7.Text:='';
Edit8.Text:='';
Edit9.Text:='';
{Перевірка умови належності точок області }
if ((y1<=4-sqr(x1)) and (y1>=sqr(x1)-4)) and
((y2<=4-sqr(x2)) and (y2>=sqr(x2)-4)) and
((y3<=4-sqr(x3)) and (y3>=sqr(x3)-4)) then
begin
{ Точки належать області}
d:=x1*y2+ x3*y1+ x2*y3- x3*y2- x1*y3- x2*y1;
if d<>0 then begin
{ Точки утворюють трикутник}
s:=abs(d)/2;
p:=sqrt(sqr(x1-x2)+ sqr(y1-y2))+
sqrt(sqr(x2-x3)+ sqr(y2-y3))+
sqrt(sqr(x3-x1)+ sqr(y3-y1));
Edit7.Text:='Точки належать області і утворюють трикутник';
Edit8.Text:=FloatToStr(p);
Edit9.Text:=FloatToStr(s);
end
else
Edit7.Text:='Точки лежать на одній прямій';
end
else
Edit7.Text:=' Точки не належності області ';
END;
{Обробник кнопки Вихід}
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
end.
В обробникові кнопки Обчислити початкові дані за допомогою функції StrToFloat перетворюються до дійсного типу і присвоюються змінним x1, y1, x2, y2, x3, y3. Результат обчислення – p, s перетворюються за допомогою функції FloatToStr з дійсного до символьного типу і виводиться. Докладно функції перетворення типів даних описані у додатку.
Тепер розроблений проект командою Run|Run можна виконати. Після завершення компіляції потрібно ввести початкові дані й натиснути кнопку Обчислити. Результат роботи програми наведений на Рис 1.2. Для завершення роботи програми потрібно натиснути кнопку Вихід.
Приклад. Задані дійсні величини . Розробити проект програми, яка впорядковує величини так, щоб і та обчислює значення функції:
Для розв’язання задачі, аналогічно, як у попередньому прикладі, командою File|New Application створимо новий проект. Присвоїмо формі заголовок Caption = Обчислення функції та програмне ім’я Name = Form1. Командою File|Save All запишемо програмний модуль у файл з іменем ULAB1_2.pas, а проект – LAB1_2.dpr.
Розробимо форму для введення початкових даних і виведення результату. Розмістимо на цій формі сім компонентів Edit для введення початкових даних x, y, z, a, b, c, d і один для виведення значення функції V. Присвоїмо цим компонентам програмні імена Edit1, Edit2, Edit3, Edit4, Edit5, Edit6, Edit7, Edit8, встановлені за замовчуванням (властивість Name), і очистимо всім значення властивості Text. Пояснення до цих компонентів зробимо за допомогою компонента Label (властивість Caption).
Крім цього, розмістимо на формі дві керуючі кнопки (компонент Button) з написами Обчислити та Вихід (властивість Caption) і програмними іменами Button1, Button2 (властивість Name).
Обробники кнопок Обчислити та Вихід містяться у програмному модулі ULAB1_2 і мають вигляд:
{Обробник кнопки Обчислити}
procedure TForm1.Button1Click(Sender: TObject);
var x, y, z: double;
a, b, c, d: double;
r, v: double;
begin
{Початкові дані }
x:=StrToFloat(Edit1.Text);
y:=StrToFloat(Edit2.Text);
z:=StrToFloat(Edit3.Text);
a:=StrToFloat(Edit4.Text);
b:=StrToFloat(Edit5.Text);
c:=StrToFloat(Edit6.Text);
d:=StrToFloat(Edit7.Text);
{Упорядкування змінних a, b, c, d }
if a > b then begin r:=a; a:=b; b:=r; end;
if c > d then begin r:=c; c:=d; d:=r; end;
{Обчислення функції V }
if ((c<=x) and (x<=d)) and
((c<=y) and (y<=d)) and ((c<=z) and (z<=d))
then
begin
{Обчислення за першою формулою }
v:=x;
if v < y then v:=y;
if v < z then v:=z;
end
else
if not ((c<=x) and (x<=d)) and
not ((c<=y) and (y<=d)) and
not ((c<=z) and (z<=d))
then
begin
{Обчислення за другою формулою }
v:=x;
if v > y then v:=y;
if v > z then v:=z;
end
else
{Обчислення за третьою формулою }
v:=(b-a)/2;
{Виведення результату }
Edit8.Text:=FloatToStr(v);
end;
{Обробник кнопки Вихід}
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
Рис.1.3. Форма Обчислення функції
Результат роботи програми наведений на Рис. 1.3.