ДОМ
|
Информатика и программирование |
Язык программирования Pascal
|
Теоретичний матеріал за
темами:
2.
Програмування лінійних структур, обчислення арифметичних виразів
3.
Програмування розгалужених обчислюваньних процесів
4.
Програмування циклічних обчислювальних процесів
10. Використання динамічних змінних
Copyright © Евгений Литвиненко, 2007Использование без разрешения автора запрещено |
ВИКОРИСТАННЯ ДИНАМІЧНИХ ЗМІННИХВ процесі компіляції звичайної програми для змінних, описаних в розділі Var, виділяється пам'ять конкретного розміру, яка закріпляється за змінними на весь період роботи програми. Такі змінні називають статичними, доступ до відповідних областей пам’яті здійснюється за іменами змінних. VarVkaz1,Vkaz2:^Integer; Такий опис ще не виділяє пам'ять для змінних, він тільки означає, що змінні Vkaz1 та Vkaz2 є вказівниками на дані цілого типу, а змінні R і Т - вказівники на дійсне дане. New(T); Після цієї операції вказівник Т придбає значення адреси пам'яті для дійсної змінної. Щоб отримати доступ до цієї області пам'яті, треба знак ^ записати після вказівника, наприклад: Т^;=16.4; Над динамічними змінними можна виконувати такі ж операції, як і над статичними, наприклад: R^:=T^+20; Вказівники, в свою чергу, можна тільки присвоювати один одному та порівнювати на рівність чи нерівність між собою, наприклад: T:=R; Треба бути уважними при вживанні динамічних змінних та вказівників. Розглянемо приклад фрагменту програми: R^:=10.5; Якщо замість останнього оператору вжити оператор R^:=Т^, то вказівники будуть зв'язані з різними комірками пам'яті, в яких записано одне й теж число 16.2. Type Strichka=String[50]; Якщо треба виділити пам'ять під масив достатньо виконати оператор: New(VkazMas) Тепер в циклі можна ввести значення його елементів: For i:=l to 40 do Read(VkazMas^[i]); Як бачимо, до елементу масиву можна звертатися, вживаючи ім'я VkazMas^[i]. Dispose(VkazMas); Це значить, що пам’ять, яка була виділена під масив звільнена, а сам вказівник VkazMas матиме невизначене значення. VarР1, Р2 : Pointer; Ці вказівники сумісні з будь-якими типованими вказівниками, тобто вказівник Р1 може одержати, як значення вказівника на ціле число, так і значення вказівника на дійсне число. P2:=Addr(A); Таку операцію використовують, наприклад, при заміні стандартної підпрограми обробки переривання на «свою» підпрограму. P1:=Ptrt($1234,$4567); Нетипованому вказівнику можна присвоїти значення спеціальної функції Nil, наприклад: P1:=NiI; Функція Nil виробляє значення «пусте» (згадайте пустий рядок, пусту множину). Вона застосовується, як деяка ознака кінця динамічної структури, наприклад, кінця списку. {$М 20000,10000,200000} Перше число показує розмір сегмента стеку (від 1024 до 655356). Це число вибирається в залежності від наявності та виду підпрограм. Друге число визначає найменш допустимий в даній програмі розмір Heap, а останнє число - найбільший розмір цієї пам'яті. Конкретні розміри Heap вибираються в залежності від задачі та кількості динамічних даних.
де Y = 3.1, Z = 2.14 та якщо Х приймає два значення X = 0.56 та X=4.42. Var X, Y, Z, F : ^Real; |
Copyright © Eugene, 2007 |