- •Лабораторна робота № 1 (4 год.).
- •3. Приклади роботи з вказівниками.
- •4. Незв’язані динамічні дані.
- •Блок-схема програми
- •Текст програми на Паскалі
- •Результати роботи програми.
- •Таблиця 1
- •Лабораторна робота № 2 (4 год.).
- •Блок-схема програми
- •Текст програми на Паскалі
- •Результати роботи програми.
- •Таблиця 2
- •Лабораторна робота № 3 (6 год.).
- •Блок-схема програми
- •Текст програми на Паскалі
- •Результати роботи програми.
- •Таблиця 3
- •Лабораторна робота № 4 (6 год.).
- •Блок-схема програми
- •Текст програми на Паскалі
- •Результати роботи програми.
- •Таблиця 4
- •Лабораторна робота № 5 (6 год).
- •Таблиця 5
- •Лабораторна робота № 6 (4 год).
- •Таблиця 6
Лабораторна робота № 1 (4 год.).
Тема роботи: Використання купи динамічної пам’яті.
Мета роботи: Оволодіння навичками створення і використання динамічних змінних.
Теоретичні відомості:
1. Вказівники. Змінну вказівникового типу можна описати декількома способоми.
По перше. В Turbo Pascal визначено адресний тип Pointer. Змінна типу Pointer
Var p: Pointer;
містить адресу деякого елемента програми і займає 4 байта. При цьому адреса зберігається як два слова, одне з них визначає сегмент а інше — зміщення.
По друге. Змінну вказівникового типу можна описати в такий спосіб:
Type NameType = ^T;
Var p: NameType;
тут р — змінна вказівникового типу, пов’язана з типом Т за допомогою імені типу NameType.
По третє. Описати змінну вказівникового типу можна безпосередньо в розділі опису змінних:
Var p: ^T;
Необхідно розрізняти змінну типу вказівник і змінну на яку цей вказівник посилається. Наприклад, якщо р — вказівник на змінну типу Т, то p^ — сама змінна.
Над вказівниками не визначено ніяких операцій крім перевірки на рівність та нерівність.
2. Динамічні змінні. Динамічні змінні не вказуються явно в розділі опису змінних і до них не можна звернутися за ім’ям. Доступ до таких змінних відбувається за допомогою вказівників і посилань.
Робота з динамічною областю пам’яті в Turbo Pascal реалізується за допомогою процедур і функцій New, Dispose, GetMem, FreeMem, Mark, Release, MaxAvail, MemAvail, SizeOf.
Процедура New (var p:Pointer) виділяє місце в динамічній пам’яті для розміщення динамічної змінної p^ і її адресу записує у вказівник р.
Процедура Dispose (var p:Pointer) звільняє ділянку пам’яті, виділений для розміщення динамічної змінної процедурою New, і значення вказівника р стає невизначеним. (p=Nil).
3. Приклади роботи з вказівниками.
-
Var
p1, p2: ^Integer;
тут p1 і p2 — вказівники або змінні вказівного типу.
p1:= Nil;
p2:=Nil;
після виконання цих операцій присвоєння вказівники р1 і р2 не будуть посилатися ні на який конкретний об’єкт.
New (p1)
New (p2)
процедурою New виконано наступні дії:
в пам’яті виділено ділянку для розміщення величини цілого типу
адреса цієї ділянки записана в змінну p1 (p2)
p1^:=2;
p2^:=4;
p1^:=p2^;
p2:=p1;
p1^:=p1^+8;
динамічні змінні можуть входити до складу виразів
4. Незв’язані динамічні дані.
Структура даних |
Звичайні змінні |
Динамічні змінні |
1. Проста змінна |
type TInt = 1..100; var X: Char; Y: TInt; begin X:= ‘* ‘; Y:= 3; … end. |
type TInt = 1..100; var PX: ^Char; PY: ^TInt; begin New (PX); New (PY); PX^:= ‘* ‘; PY^:= 3; … Dispose (PX); Dispose (PY); end. |
2. Масив |
type Vect = Array [1..3] of Byte; var X: Vect; i: Byte; begin for i:=1 to 3 do Read (X[i]); … end. |
type Vect = Array [1..3] of Byte; var PX: ^Vect; i: Byte; begin New (PX); for i:=1 to 3 do Read (PX^[i]); … Dispose (PX); end. |
3. Запис |
type Rec = record A: Char; B: Byte end; var X: Rec; begin X.A:= ’*’; X.B:= 7; … end. |
Type Rec = record A: Char; B: Byte end; var PX: ^Rec; begin New (PX); PX^.A:= ’*’; PX^.B:= 7; … Dispose (PX) end. |
Постановка задачі: Створити динамічну змінну вказаного типу відповідно до варіанту. Виконати задані дії. Вивести динамічну змінну і результати її обробки. Звільнити пам’ять.
Методичні вказівки до роботи:
Розібратися з створенням і використанням динамічних змінних.
Створити динамічну змінну – двовимірний масив випадкових чисел і виконати над ним задані дії.
При створенні змінної врахувати властивості базового типу відповідно до завдання (наявність від’ємних елементів).
Вивести створений масив.
Вивести результати обробки масиву.
Вивести інформацію про виконавця роботи (прізвище, ініціали, група, варіант).
Завдання до роботи вибрати згідно з варіантом з Таблиці 1.
Зміст звіту:
1) Задача для конкретного варіанту.
2) Блок-схема програми.
3) Текст програми на Паскалі.
4) Результати роботи програми.
5) Висновок до роботи.
Приклад: Для кожного рядка надрукувати номери стовпів, що вміщують від'ємні елементи. Кількість рядків масиву - 4, Кількість стовпців масиву - 7, базовий тип - REAL.