русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Теоретичні вказівки


Дата додавання: 2014-11-28; переглядів: 744.


Змінні можуть бути статичними і динамічними. Для статичних змінних пам'ять виділяється компілятором на весь термін дії програми і звільнюється після закінчення програми. Для динамічних змінних пам'ять надається на момент звернення до динамічної змінної під час виконання програми. Доступ до динамічних змінних здійснюється за адресою, де зберігається змінна. Адреса динамічної змінної визначається за допомогою покажчиків на конкретний тип даних. Опис покажчика на конкретний тип має вид:

var ім'я_змінної : ^ідентифікатор типу;

Наприклад:

type point=^data;

data=record

r: integer;

next: point;

end;

var a:point;

Змінна А є покажчиком на структуру типу DATA. При виконанні програми змінна А набуває значення адреси даних типу DATA. Визначення змінної типу покажчик відбувається при виконанні стандартної процедури NЕW(покажчик). Система знаходить вільну область пам'яті, в якій може розміститися вказаний тип даних. Початкове значення покажчика задається константою NIL (A^.NEXT:=NIL;).

За допомогою процедури DISPOSE (ідентифікатор_типу_покажчик) звільнюється пам'ять, зайнята даними, на які вказує покажчик.

Значення, що знаходиться за адресою, на яку вказує покажчик, визначається за форматом ім'я_змінної^, де змінна описана типом покажчик.

У мові Паскаль також можна використовувати нетипізовані покажчики, які, на відміну від типізованих, не зв'язані з конкретним типом. Такі покажчики мають тип POINTER, наприклад:

VAR P1,P2:POINTER;

Ці покажчики сумісні із будь-якими типізованими покажчиками. Процедура GETMEM(P1,Size) виділить пам'ять розміром Size байтів, покажчик Р1 матиме значення адреси початку такої пам'яті (обмежена числом 64К). Значення Size визначається функцією sіzеоf(тип_даних). Процедура FREEMEM(P1,Size) звільняє пам'ять. Покажчику можна присвоїти значення NIL, що визначає значення "пусто".

За допомогою динамічних змінних створюються динамічні структури даних: черги, стеки, списки. Черга - це структура, в якій елемент, що першим прийшов, першим обробляється (first in, first out). Стек - це структура, в якій елемент, що першим прийшов, обробляється останнім (last in , first out).

Алгоритм побудови стека:

1. Визначити покажчик на перший елемент firsr:=nil;

2. Виділити пам'ять під новий елемент new(curr).

3. Занести значення даних за адресою покажчика, наприклад, readln(curr^.data).

4. Зв'язати перший елемент із поточним curr^.next:=first;

5. Покажчик на перший елемент перепризначити на поточний first:=curr;. Повторити дії від пункту 2 до тих пір, поки не закінчаться всі елементи.

Алгоритм побудови черги

1. Виділити пам'ять під поточний елемент черги new(curr).

2. Запам'ятати покажчик на перший елемент first:=curr;

3. Запам'ятати покажчик на попередній елемент prev:=curr;

4. Ввести дані в пам'ять: readln(curr^.data)

5. Встановити покажчик на наступний елемент сигг^.nехt:=nіІ;

6. Зв'язати поточний елемент із попереднім, перепризначивши покажчик prev^.next :=curr;

7. Виділити пам'ять під новий елемент та повторити дії пп.3-7.

7.1.2. Приклад програми. Умова задачі.

Побудувати список з одночасним впорядкування елементів списку в порядку зростання. Виконати операції додавання, вилучення, друкування елементів списку.

Алгоритм

1. Список порожній.

2. Повторювати дії, поки не натиснута клавіша 'Q':

2.1. Виведення списку на екран.

2.2. Додавання елементів до списку і їх сортування:

2.2.1. Виділити пам'ять для нового елемента;

2.2.2. Ввести елемент в пам'ять;

2.2.3. Якщо список порожній, то перепризначити покажчик на новий елемент, покажчику на наступний елемент присвоїти значення nil;

2.2.4. Якщо список не порожній, то, якщо нове значення елемента менше першого, розмістити елемент на початку списку;

2.2.5. Інакше пошук місця вставки нового елемента в списку елементів.

2.3. Вилучення заданого елемента:

2.3.1. Якщо список не порожній, то - ведення елемента, що вилучається;

2.3.2. Якщо потрібний елемент знайдений, то перепризначити покажчики; в противному різі виконувати пошук потрібного елемента, вилучення його і звільнення пам'яті.

3. Кінець.


<== попередня лекція | наступна лекція ==>
Варіанти завдань лабораторної роботи | Варіанти завдань лабораторної роботи


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн