Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ekzamen_OPAM_vidpovidi_teoretichni.doc
Скачиваний:
4
Добавлен:
22.09.2019
Размер:
214.53 Кб
Скачать
  1. Рекурсія

У мові Паскаль рекурсивний опис функції полягає в тому, що в тілі такої функції міститься звертання до цієї ж функції. Як і функції, рекурсивними можуть бути процедури. Ім'я рекурсивної процедури міститься в її тексті. Тобто процедура є рекурсивною, якщо вона викликає саму себе. Такий виклик процедур і функцій може виникнути внаслідок або рекурсив­ного опису, або рекурсивного звертання.

Рекурсивний опис полягає в тому, що у виконуваній частині процедури або функції міститься звертання до неї самої. При­кладом рекурсивного опису є розглянута функція обчислення факторіала. У випадку рекурсивного опису потрібна наявність базової частини опису, яка забезпечувала б завершення рекур­сивних викликів функції або процедури.

Застосування рекурсивних процедур і функцій робить програ­му в цілому гнучкішою і наочнішою, однак часто менш ефек­тивною.

  1. Вказівний тип

Умові Паскаль для роботи з динамічними об’єктами передбачено спеціальний тип значень – вказівний. Це такий же простий тип, якими є цілий, дійсний, логічний. Однак для нього в мові не зарезервовано жодного стандартного іденти­фікатора. Загальний вигляд опису вказівного типу такий:

type

<Ім'я_вказівного_типу>=^<ім'я_типу>

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

Іноді потрібно мати вказівник, що не вказує на жодний об'єкт, тобто порожній вказівник (за аналогією з порожньою множиною). Щоб одержати таке значення вказівника, треба виконати присвоєння

m:=nil;

Вказівники (З конспекту С++

Кожна змінна в програмі - це об'єкт, який має ім'я і значення. За ім'ям можна звернутися до змінної і отримати (а потім, наприклад, надрукувати) її значення.

Щоб отримати адресу в явному вигляді, в мові Сі застосовують унарну операцію &. Операція & застосовується тільки до об'єктів, що мають ім'я і розміщеним в пам'яті. Її не можна застосовувати до виразів, констант, бітових полів структур, регістрових змінних або зовнішніх об'єктів, з якими може взаємодіяти програма.

Для зберігання, перетворення і передавання адрес в мові Сі введені змінні типу "вказівкник". Вказівник в мові Сі можна визначити як змінну, значенням якої служить адреса об'єкту конкретного типу. Крім того, значенням вказівника може бути явно не рівне ніякій адресі значення, яке приймається за нульову адресу. Для його позначення у ряді заголо­вочних файлів, наприклад у файлі stdio.h, визначена спеці­альна константа NULL.

Отже, у визначеннях і описах вказівників застосовується роздільник '*', який є в цьому випадку знаком унарної операції непрямої адресації.

  1. Динамічний розподіл памяті

Динамічна пам'ять - це пам'ять, яка виділяється в процесі виконання програми. Після виділення динамічної пам'яті вона зберігається до її явного звільнення, це може бути виконано тільки за допомогою спеціальної бібліотечної функції free().

Якщо динамічна пам'ять не була звільнена до закінчення виконання програми, то вона звільняється автоматично при завершенні програми. Можливі наступні три варіан­та роботи з динамічною пам'яттю, яка виділяється в деякому блоці :

• вказівник (на ділянку динамічної пам'яті) визначений як локальний об'єкт автоматичної пам'яті. В цьому випадку виділена пам'ять буде неприступна при виході за межі блоку локалізації вказівника, і її потрібно звільнити перед виходом з блоку;

• вказівник визначений як локальний об'єкт статичної пам'яті. Динамічна пам'ять, виділена однократно в блоці, доступна через вказівник при кожному повторному вході в блок. Пам'ять потрібно звільнити тільки по закінченні її використання;

• вказівник є глобальним об'єктом по відношенню до блоку. Динамічна пам'ять доступна у всіх блоках, де "видний" вказівник. Пам'ять потрібно звільнити тільки після закінчення її використання.

Для виділення динамічної памяті також використовується функція new, для звільнення – delete.

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