- •Розділ 1. Об’єктно-орієнтоване програмування
- •Тема 1.1. Візуальне програмування.
- •Тема 1.2. Приклади та застосування інкапсуляції, успадкування, поліморфізму.
- •Тема 1.3. Бібліотека візуальних компонентів vcl та її базові класи.
- •1. Клас tWinControl.
- •2. Клас tСustomControl.
- •3. Клас tGraphicControl.
- •Тема 1.4. Обробка виняткових ситуацій.
- •1. Використовування виняткових ситуацій.
- •2. Протоколювання виняткових ситуацій.
- •3. Коди помилок у виняткових ситуаціях.
- •4. Виняткова ситуація eAbort. Функція Assert.
- •Розділ 2. Мова програмування Object Pascal.
- •Тема 2.1. Середовище Delphi.
- •Тема 2.2. Елементи мови Object Pascal.
- •1. Коментарі.
- •2. Логічні вирази.
- •Тема 2.3. Типи даних, процедури та функції.
- •1. Вказівники та динамічна пам'ять. Динамічна пам'ять
- •Вказівники
- •Виділення і звільнення динамічної пам'яті
- •Процедури і функції для роботи з динамічною пам'яттю
- •Тема 2.4. Управляючі структури Object Pascal.
- •Розділ 3. Програмування в середовищі Delphi.
- •Тема 3.1. Застосування списків. Способи запису/читання зі списків.
- •Є списком CheckBox елементів.
- •Тема 3.2. Масиви.
- •1. Пошук мінімального (максимального) елементу масиву.
- •2. Пошук в масиві заданого елементу.
- •Тема 3.3. Робота з файлами.
- •Тема 3.4. Типи даних визначені програмістом.
- •1. Показники.
- •2. Динамічні змінні.
- •Тема 3.5. Графічні програми.
- •1. Бітові образи.
- •2. Мультиплікація.
- •Властивості компоненту Timer
- •Тема 3.6. Приклади застосування анімацій у Delphi.
- •Тема 3.7. Рекурсія.
- •1. Крива Гільберта.
- •2. Пошук шляху.|колії|
- •Значення властивостей компоненту stringGrid1
- •3. Пошук найкоротшого шляху.|колії|
- •Тема 3.8. Компоненти для інтернету. Компонента tSocketConnection
- •Розділ 4. Бази даних.
- •Тема 4.1. Види баз даних. Структура та зв’язки між таблицями. Бази даних
- •Класифікація баз даних
- •Структура бази даних
- •Модель бази даних в Delphi
- •Тема 4.2. Модифікація структури таблиці в bde.
- •1. Зміна структури таблиці.
- •2. Встановлення перевірок правильності даних.
- •3. Завдання вторинних індексів.
- •Тема 4.3. Об’єкти відображення даних бази даних Delphi.
- •1. Класифікація компонентів відображення даних.
- •2. Елемент керування тdbGrid.
- •3. Компонент tdbEdit.
- •4. Компонент tdNavigator.
- •Тема 4.4. Обчислювальні поля і поля підстановки в Delphi.
- •1. Створення поля підстановки (поля синхронного перегляду).
- •2. Обчислювальні поля.
- •Тема 4.5. Компонента tdbEdit.
- •Тема 4.6. Переміщення по записам таблиці. Набір методів і властивостей tDataSet. Огляд
- •Клас tDataSet
- •Відкриття і закриття DataSet
- •Тема 4.7. Налаштування фільтрів.|
- •Тема 4.8. Приклади застосування пошуку.
- •Тема 4.9. Поєднання різних видів пошуку.
- •Тема 4.10. Типи даних та пошук в діапазоні.
- •Список літератури
Процедури і функції для роботи з динамічною пам'яттю
Нижче приводиться опис як вже розглянутих процедур і функцій Object Pascal, так і деяких інших, які можуть виявитися корисними при зверненні до динамічної пам'яті.
Function Addr(X): Pointer; – Повертає адресу аргументу X. Аналогічний результат повертає операція @
Procedure Dispose (var P: Pointer); – Повертає в купу фрагмент динамічної пам'яті, який раніше був зарезервований за покажчиком P, що типізується
Procedure Free-Mem(var P: Pointer; Size: Integer); – Повертає в купу фрагмент динамічної пам'яті, який раніше був зарезервований за покажчиком Р, що нетипізується
Procedure Get-Mem(var P: Pointer; Size: Integer); – Резервує за покажчиком Р фрагмент динамічної пам'яті необхідного розміру Size, що нетипізується
Procedure New(var P: Pointer); – Резервує фрагмент купи для розміщення змінної і поміщає в покажчик, що типізується, Р адресу першого байта
Function SizeOf(X): Integer; – Повертає довжину в байтах внутрішнього представлення вказаного об'єкту Х
Процедурні типи
Основне призначення процедурних типів – дати програмістові гнучкі засоби|кошти| передачі функцій і процедур як фактичні параметри звернення до інших процедур і функцій.
Для оголошення процедурного типу|типа| використовується заголовок процедури (функції), в якому опускається її ім'я, наприклад:
type|
Proc1 = Procedure (а, b, з: Real; var d: Real);
Proc2 = Procedure (var а, b);
Рroc3 = Procedure;
Func1| = Function|: String|;
Func2 = Function (var s: String): Real;
Як видно|показний| з|із| приведених прикладів|зразків|, існує два процедурні типи: тип-процедура і тип-функція.
У наступний|слідуючий| програмі ілюструється механізм передачі процедур як фактичні параметри виклику. Програма виводить на екран таблицю двох функцій: sin1|(х)=(sin|(x)+1)*Ехр(-х) і cos1|(x)=(Cos|(x)+1)*Ехр(-х). Обчислення|підрахунок| і друк|печатка| значень цих функцій реалізуються в процедурі printFunc|, якою як параметри передається кількість np| обчислень|підрахунків| функції в діапазоні х від 0 до 2*3.141592 і ім'я потрібної функції.
Function Sinl(X: Real): Real;
begin|
Result := (Sin(X)+ 1) * Exp(-X) end; // Sin1
Function Cosl(X: Real): Real;
begin|
Result := (Cos(X)+ 1) * Exp(-X) end; // Cos1
procedure TfmExample.bbRunClick(Sender: TObject);
type|
Func = function (X: Real): Real; // Процедурний тип
Procedure PrintFunc(NP: Integer; F; Func);
var|
i: Integer|;
X: Real|;
begin|
for i := 0 to NP do
begin|
X:=k*2*pi/ NP|;
mmOutput|.Lines.Add(FloatToStrF|(X, ffExponent|, 10, 2)+ #9#9| + FloatToStrF|(F(X), ffExponent|, 10, 2)) ;
end|;
end; // PrintFunc
begin // bbRunClick
nmiOutput|.Lines.Add(#9'Функція| SINI|:');
PrintFunc| (10, Sin1|);
mmOutput|.Lines.Add(#9'Функція| COSI|:');
PrintFunc| (10, Cos1|);
end|;
Зверніть увагу: передавані підпрограми не можуть бути локальними, тобто процедурами або функціями, оголошеними усередині|всередині| іншої підпрограми. От чому|ось чому| опис підпрограми sin1| і cos1| розміщуються поза|зовні| обробником bbRunclick|, але|та| не вище по тексту модуля. Відмічу|помічу|, що символ #9| – це символ табуляції. який вставляється у формовані рядки для розділення|поділу| колонок з|із| цифрами.
У програмі можуть бути оголошені змінні процедурних типів, наприклад, так:
var|
p1| : Proc1|;
fl|, f2| : Func2|;
ар : array [1..N] of Proc1;
Змінним процедурних типів допускається привласнювати як значення імена відповідних підпрограм. Після|потім| такого привласнення ім'я змінної стає синонімом імені підпрограми.
Питання для самоконтролю:
Що таке динамічна пам'ять?
Що називається вказівником?
Як вони описуються?
Яка функція виділяє динамічну пам'ять?
Назвіть процедури і функції для роботи з динамічною пам’яттю?
Яке основне призначення процедурних типів?
Яким чином оголошуються процедурні типи?
