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

Контрольні запитання

    1. Які файлові типи застосовуються в мові Паскаль?

    2. Які особливості текстових файлів?

    3. Які специфічні процедури і функції обслуговування текстових файлів?

    4. Як створити динамічну змінну типу символьний рядок STRING?

Лабораторна робота № 4

(6 год.).

Тема роботи: обробка масивів вказівників.

Мета роботи: Оволодіння навичками створення статичних масивів вказівників на записи заданої структури.

Постановка задачі: Створити типізований файл записів заданої структури. Використовуючи динамічні змінні, створені за допомогою масиву вказівників, виконати обробку інформації файлу. Звільнити пам’ять.

Методичні вказівки до роботи:

  1. Створити типізований файл записів заданої структури з випадковими даними.

  2. Вивести вміст файлу.

  3. Створити статичний масив вказівників на записи заданої структури.

  4. Створити динамічні змінні – записи.

  5. Ввести інформацію з файлу до динамічних змінних.

  6. Виконати аналіз полів динамічних змінних відповідно до завдання.

  7. Вивести результати аналізу.

  8. Звільнити память.

  9. Вивести інформацію про завдання ( варіант, текст завдання ).

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

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

Зміст звіту:

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

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

  3. Лістинг програми.

  4. Результати виконання програми.

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

Теоретичні відомості

Використання вказівників сумісно з процедурами NEW і DISPOSE дає можливість керувати розподілом динамічної пам’яті.

Процедура NEW(P), де P - вказівник, що дозволяє виділити область пам’яті такого розміру, в якому можна розмістити дані базового типу. Вказівник P приймає значення адреси виділеної області.

Процедура DISPOSE(P) дозволяє вивільнити область пам’яті, на яку посилається вказівник P для подальшого її використання в інших цілях. Після виконання цієї процедури значення P не визначене, тобто цей вказівник ні на що не посилається.

Вказівник, щойно оголошений, ні на що не вказує. Він є статичною змінною і перед використанням в програмі вказівник має бути ініціалізований, тобто йому треба присвоїти певне значення, що є адресою динамічної змінної. Значення вказівника можна задати декількома способами:

  • процедурами NEW або GETMEM;

  • за допомогою адресного оператора @;

  • простим присвоюванням йому значення іншої змінної того ж типу.

  • Змінній типу вказівник можна присвоїти значення NIL, що означає відсутність посилання на будь-який об’єкт (фактично в такому випадку змінній присвоюється значення 0).

Приклад:

TYPE ZAP=RECORD

INF:REAL;

RAD:CHAR;

FG:BYTE;

END;

PNT=^ZAP;

ADRL=^REAL;

VAR DOP:ZAP;

PN1,PN2,PN3,PN4:PNT;

AD:ADRL;

BEGIN

NEW(PN3); виділення пам’яті для нового елемента типу ZAP

PN2:=@DOP; визначення адреси змінної DOP, присвоєння значення цієї адреси вказівнику PN2;

PN1:=PN3; присвоєння значення одного вказівника іншому того ж типу

PN4:=NIL; присвоєння вказівнику значення 0

NEW(AD); виділення пам’яті для нового елемента типу INTEGER

END.

Під час роботи програми, в якій виконується багаторазове використання купи динамічної пам’яті, програмісту слід мати інформацію про кількість вільної пам’яті. Для цього існують дві функції – MEMAVAIL і MAXAVAIL. MEMAVAIL Інформує про сумарну кількість вільної пам’яті, а MAXAVAIL повертає розмір найбільшого блока вільної пам’яті.

Приклад: Створити статичний масив, елементами якого є вказівники на дані типу запис, що мають такі поля: byte, word, char. Масив складається з 5-ти елементів. За допомогою вказівників масиву створити динамічні змінні типу запис. Інформація полів динамічних записів – випадкові числа. Вивести дані з динамічних змінних. Визначити кількість вільної пам’яті до і після створення динамічних змінних. Вивести об’єм пам’яті, виділений для них. Звільнити пам’ять.

USES CRT;

TYPE ZP=RECORD

P1:BYTE;

P2:WORD;

P3:CHAR

END;

VAR MAS:ARRAY[1..5] OF ^ZP;

I:BYTE;

B:LONGINT;

BEGIN

CLRSCR;

RANDOMIZE;

WRITELN(MEMAVAIL);

B:=MEMAVAIL;

FOR I:=1 TO 5 DO

BEGIN

NEW(MAS[I]);

MAS[I]^.P1:=RANDOM(5);

MAS[I]^.P2:=RANDOM(50);

MAS[I]^.P3:=CHR(RANDOM(255));

END;

FOR I:=1 TO 5 DO

BEGIN

WITH MAS[I]^DO

WRITE(P1:4,P2:4,P3:4);

END;

WRITELN;

WRITELN(MEMAVAIL);

WRITELN(B-MEMAVAIL);

FOR I:=1 TO 5 DO

DISPOSE(MAS[I]);

READKEY;

END.

Результат виконання програми

300896

2 19 f 4 42 ) 3 9 [ 3 25 Х 1 33 ј

300856

40