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

Тема 29

Вказівник – це змінна, значенням якої є адреса пам'яті, де розташований сам динамічний об'єкт. Сам вказівник займає 4 байти. Вказівники доцільно використо­вувати в наступних випадках:

  • якщо програма працює з великими обсягами даних, загальний обсяг яких перевищує 64К;

  • якщо програма під час виконання опрацьовує сукупність даних, загальний обсяг яких наперед невідомий;

  • якщо програма використовує тимчасові буфери для зберігання даних;

  • якщо програма повинна трактувати ті самі дані, як дані різних типів;

  • якщо програма використовує зв'язані списки даних.

Опис типу вказівник. Опис типу вказівник складається символу ^, після якого стоїть іден­ти­фікатор базового типу або зарезервоване слово pointer:

^ <базовий тип> або ^ pointer, де <базовий тип> – це ідентифікатор типу. Якщо базовий тип є ще не описаним ідентифікатором, то він повинен бути опи­са­ний в тому самому розділі опису типів, що і тип вказівник.

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

Розіменування вказівників. Змінні типу вказівник можуть містити адреси да­них певного типу або значення, яке позначається словом nil. Зарезервоване слово nil означає константу зі значенням вказівника, який ні на що не вказує (порожній вказівник). Одержання доступу до даних, на які вказують змінні вказівного типу, називають розіменуванням вказівників. Щоб розіменувати вказівник, потрібно роз­та­шувати символ " ^ " після змінної вказівного типу. З розiменованим вказівником можна працювати так само, як і зі змінною того типу, на який він вказує. Змінні ти­пу pointer а також вказівники, що вказують на певний тип даних, але прий­мають зна­чення nil, не можуть бути розіменовані: символ " ^ " після такої змінної при­зво­дить до помилки.

Присвоєння вказівникам адреси статичних змінних. Змінним вказівного типу може присво­юватися адреса оголошених в програмі змінних, які розташо­ва­­ні в сегменті даних. Найчастіше так чинять тоді, коли одні і ті самі дані в про­гра­мі потрібно інтерпре­ту­ва­ти, як дані різного типу. У програмі оголо­шу­ють змін­ну певного типу, у якій збері­га­тиму­ться ці дані і вказівник на змінну ін­шо­го типу. Адресу змінної присвоюють вказівнику, що забезпечує подвійний дос­туп до одних і тих самих даних і дозволяє різну їх інтерпретацію. Адреса присво­ю­ється змінній-вказівнику операцією @:

< Ідентифікатор вказівника > : = @< Ідентифікатор змінної > .

Операція @ присвоює змінній-вказівнику адресу області пам'яті, що містить статичну змінну.

Тема 30

Оператори циклу мови програмування Pascal використовуються для органі­за­ції циклів. Цикл – це послідовність операторів, які можуть виконуватися біль­ше одного разу. Групу повторюваних операторів називають тілом циклу. У мові Pascal є три види операторів циклу: з параметром; з передумовою; з післяумовою.

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

Оператор циклу з параметром має вигляд: for i:=ip to ik do s;

де і – змінна, яку називають параметром циклу і яка є порядкового типу (ці­ло­го, сим­­воль­ного, логічного, інтервального або перелічуваного); iр – початкове зна­чен­ня параметру циклу; ik – кінцеве значення параметру циклу; ір, ik можуть бути виразами, змінними або константами. Тип параметра циклу співпадає з типом величин ір, ik; s – оператор.

Підчас виконання оператора спершу обчислюється значення виразів ір та ik, потім відбувається присвоєння значення ір параметру циклу. Після цього відб­ва­ється перевірка, чи параметр циклу є меншим або рівним ik. Якщо i £ ik, то ви­ко­ну­ється оператор s. Після цього параметр циклу збільшується на одиницю, і знову відбувається перевірка умови i £ ik. Коли i > ik, то відбувається вихід з циклу.

Існує ще одна форма цього оператора: for i:=ip downto ik do s;

Його дія аналогічна до дії попереднього оператора з тією різницею, що крок дорів­нює –1, а для завершення циклу повинна виконатися умова i < ik.

Якщо в цих операторах після do стоїть два або більше операторів, то їх беруть в операторні дужки begin end. Цикл може не виконуватися жодного разу, якщо для циклу for ... to зна­чення початкового виразу більше кінцевого, а для циклу for ... downto значення ір менше ik. Цикл буде викопуватися один раз, якщо початкове зна­чення параметра циклу дорівнює кінцевому значенню. Па­раметр циклу після його завершення дорівнює кінцевому значенню. Не ба­жа­но змінювати в середині циклу параметр циклу, його початкове та кінцеве значення.

Оператор циклу з післяумовою має такий вигляд: repeat S until A;

де А – це вираз логічного типу, S – оператори. Оператори, що містяться між сло­ва­ми repeat і until, складають тіло циклу і виконуються доти, поки логічний вираз А не прийме значення true, тобто тіло циклу виконується при значенні логічного ви­разу А рівному false. Оскільки умова перевіряється напри­кін­ці циклу, то опе­ра­то­ри тіла циклу виконуються, як мінімум, один раз. У тілі циклу може знаходитися до­вільна кількість операторів без операторних дужок begin і end. Принаймні один з операторів тіла циклу повинен впливати на значення умови, у протилежному випадку відбудеться зациклення програми.

Оператор циклу з передумовою має такий формат: while A do S ;

де А – логічний вираз, S – оператор. Підчас виконання оператора спершу обчис­лю­ється значення логічного виразу А. Якщо це значення true (умова виконується), то буде виконуватися оператор S, якщо false – то відбувається вихід з циклу і виконується наступний оператор після оператора циклу. Якщо після службового do стоїть два або більше оператори, то їх беруть в операторнi дужки begin end.

Якщо перед першим виконанням циклу умова не виконується (значення ло­гіч­ного виразу дорівнює false), то тіло циклу взагалі не виконується і відбувається перехід на оператор, який розташований за оператором циклу.