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

Цикл та інструкція циклу

Цикл — різновид керівної конструкції у високорівневих мовах програмування, призначена з метою організації багаторазового виконання набору інструкцій (команд). Також циклом може називатися будь-яка багатократно виконувана послідовність інструкцій, організована будь-яким чином.

Інструкція циклу – набір команд, що мають виконатися для досягнення бажаного результату.

while-інструкція та її семантика

Це інструкція циклу з передумовою (while-інструкція). Вона має такий загальний вигляд:

while (умова) інструкція

Слово while є зарезервованим, дужки обов’язкові, while (умова) — це заголовок циклу, а інструкція — тіло.

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

do-while-інструкція та її семантика

Інструкція циклу з післяумовою, або do-інструкція, має такий загальний вигляд.

do інструкція while (умова);

Слово do («виконувати») є ключовим. Інструкція циклу з післяумовою виконується так. Спочатку виконується тіло циклу, потім обчислюється умова. Якщо вона хибна, цикл завершується, інакше повторюється тіло й знову обчислюється умова. На відміну від інструкції з передумовою, цикл починається діями в тілі й закінчується обчисленням умови.

for-інструкція та її семантика

Інструкція циклу for, або for-інструкція, має такий загальний вигляд.

for(початкові дії; умова; перехідні дії) основні дії

Початкові дії, умову та перехідні дії зображено виразами, основні дії — інструкцією, тобто загальна структура інструкції for така.

for(вираз; вираз; вираз) інструкція

Слово for є зарезервованим, дужки та два знаки ; всередині дужок обов’язкові. Виконується ця складна інструкція так само, як інструкції такого вигляду.

початкові дії;

while (умова)

{

основні дії;

перехідні дії;

}

Кожен з виразів всередині дужок може бути порожнім або, навпаки, складатися з кількох виразів, що є операндами операції слідування.

інструкції збільшення та зменшення

властивість структурності операторів

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

Структурність інструкцій циклу допомагає відстежити стан пам’яті в циклі та після його закінчення й цим сприяє підвищенню надійності програмування. Проте цикл з інструкцією break всередині може закінчитися не лише тоді, коли умова продовження виявиться хибною, а й за виконання break. Отже, інструкції break можуть порушити структурність інструкцій циклу, тому зловживати ними не варто.

інструкції break та continue, порушення ними структурності програми

Інструкцію break було представлено в розділі \\\\++++, де за її допомогою переривалося виконання інструкції-перемикача. Виконання цієї інструкції всередині циклу будь-якого різновиду перериває й завершує цикл; далі виконуються дії, наступні після цього циклу.

Якщо break записано в інструкції циклу, яку вкладено в іншу інструкцію циклу, то виконання break завершує вкладений цикл, а зовнішній цикл продовжується.

Інструкція continue всередині циклу задає перехід до обчислення умови продовження циклу.

Використання інструкцій break і continue дозволяє спростити запис розгалужень всередині циклу.

рекурентне співвідношення

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

система рекурентних співвідношень

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

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

Користуючися мовою С++, можна отримувати послідовності псевдовипадкових чисел за допомогою двох функцій, оголошених у заголовочному файлі <stdlib.h>. Функція з прототипом void srand(unsigned int) обчислює початкове псевдовипадкове значення за аргументом у виклику (ним має бути невід’ємне ціле число). Функція з прототипом int rand(void) за поточним псевдовипадковим значенням обчислює й повертає наступне. Усі значення є цілими числами в діапазоні від 0 до 32767. Число 32767 позначається константою RAND_MAX; її теж оголошено у файлі <stdlib.h>.

Ім’я rand є скороченням слова random (випадковий), а srand — скороченням seed random (засіяти випадкове). Відповідно, значення аргументу у виклику srand називається зерном.

Пам’ять процесу виконання виклику функції

Сукупність змінних, які утворюються під час виклику функції (підпрограми), має назву пам’ять виклику функції, або не зовсім точно, локальна пам’ять функції. Змінні в цій пам’яті називаються локальними. Ними є параметри-значення та змінні, означені в тілі функції.

Локальна пам’ять функції містить також посилання на аргументи, відповідні параметрам-посиланням, а також ще один елемент — посилання на місце, з якого має виконуватися програма після закінчення виклику. Наприклад, якщо деяка функція f містить декілька викликів тієї самої функції g, то після кожного з них функція f продовжується з відповідного місця після виклику.

Місце, з якого продовжується виконання програми після виклику, називається точкою повернення з виклику функції.

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

Огляд процесу виконання виклику функції

1. Виділяється пам’ять для точки повернення та параметрів функції. Зберігається посилання на точку повернення з функції.

2. Обчислюються значення аргументів для параметрів-значень, посилання на пам’ять аргументів для параметрів-посилань. Відбувається підстановка аргументів.

3. Виконуються інструкції тіла функції до інструкції повернення, зокрема, створюються змінні, оголошені в тілі функції .

4. Якщо підпрограма не є void-функцією, то значення, що повертається з її виклику, копіюється до пам’яті функції, яка містила виклик.

6. Функція, яка містила виклик, продовжується з точки повернення.

Імена у функції, яка містить виклик, не позначають змінних у пам’яті цього виклику, тому ця пам’ять недоступна після закінчення виклику. Вона вважається звільненою; її можна використовувати для наступного виклику цієї ж або іншої функції.

Відбувається так зване логічне звільнення пам’яті виклику, тобто її зміст не змінюється, але стає недоступним.

Програмний стек, або автоматична пам’ять

Ділянки пам’яті викликів функцій утворюються й звільняються в спеціальній області пам’яті процесу виконання програми — автоматичній пам’яті. Називається вона так тому, що за виконання викликів функцій пам’ять виділяється й звільняється без явних вказівок у програмі, написаній мовою високого рівня, тобто «автоматично».

Ділянки автоматичної пам’яті виділяються й звільняються за принципом «останньою зайнята — першою звільнена». Якщо складати аркуші паперу в стос і брати їх тільки згори, то ар­куш, що потрапив до стосу останнім, забирають першим. Англійською мовою стос називається stack (стек), а кладуть і беруть аркуші за принципом «Last In — First Out» (LIFO), тобто «останнім прийшов — першим пішов». Тому автоматичну пам’ять програми також називають програмним стеком.

Аналогічно набій, заштовхнутий у магазин автомата останнім, вилітає першим, а заштовхнутий першим (він на дні магазина) вилітає останнім. Можна вистрілити набій з магазина й на його місце додати новий. Так само, коли послідовно виконуються два виклики функцій, записані в тілі функції, то для другого виклику виділяється пам’ять, звільнена після першого.

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