Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_1-6.doc
Скачиваний:
6
Добавлен:
23.02.2016
Размер:
382.98 Кб
Скачать

Лабораторна робота № 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 виконано наступні дії:

  1. в пам’яті виділено ділянку для розміщення величини цілого типу

  2. адреса цієї ділянки записана в змінну 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. Розібратися з створенням і використанням динамічних змінних.

  2. Створити динамічну змінну – двовимірний масив випадкових чисел і виконати над ним задані дії.

  3. При створенні змінної врахувати властивості базового типу відповідно до завдання (наявність від’ємних елементів).

  4. Вивести створений масив.

  5. Вивести результати обробки масиву.

  6. Вивести інформацію про виконавця роботи (прізвище, ініціали, група, варіант).

  7. Завдання до роботи вибрати згідно з варіантом з Таблиці 1.

Зміст звіту:

1) Задача для конкретного варіанту.

2) Блок-схема програми.

3) Текст програми на Паскалі.

4) Результати роботи програми.

5) Висновок до роботи.

Приклад: Для кожного рядка надрукувати номери стовпів, що вміщують від'ємні елементи. Кількість рядків масиву - 4, Кількість стовпців масиву - 7, базовий тип - REAL.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]