Білет № 7
Цикл з передумовою while та після умовою do while. Оператори керування циклами break та continue. Циклічні програми з заздалегідь відомим та невідомим числом повторення. Оператор виходу з процедури або функції return та переривання програми break.
Пошуку мінімуму багатовимірної функції методом Хука-Дживса, методом Нелдера-Міда.
Оператор циклу з передумовою while виконується, якщо умова перевіряється до початку циклу, і має
вигляд:
while (вираз-умова) оператор; ,
де оператор — тіло циклу, що може бути представлено простим або складеним оператором.
Реалізується оператор while таким чином: якщо значення виразу-умови не дорівнює нулю («істина»), то виконується тіло циклу, а в протилежному випадку, тобто коли значення виразу дорівнює нулю («неправда»), — цикл не працює і керування передається наступному за циклом while оператору. Цикл з передумовою може не виконуватися жодного разу.
Оператор while зручно застосовувати у випадках, коли кількість ітерацій заздалегідь не відома.
Оператор циклу з післяумовою do while звичайно застосовується у випадках, коли тіло циклу виконується хоча б один раз, і має таку форму запису:
do оператор
while (вираз-умова);
У процесі виконання оператора do while спочатку здійснюється вхід до тіла циклу і виконується оператор, що являє собою тіло циклу (цей оператор може бути простим або склади ним); далі перевіряється вираз і, якщо він правдивий («істина»), — цикл повторюється, а коли вираз помилковий («неправда») — здійснюється вихід з циклу.
Оператор break застосовується в двох випадках. По-перше, в операторі switch з його допомогою переривається виконання послідовності. По-друге, оператор break використовується для негайного припинення виконання циклу без перевірки його умови, в цьому випадку оператор break передає управління оператору, наступному після оператора циклу.
Можна сказати, що оператор continue трохи схожий на break. Оператор break викликає переривання циклу, a continue - переривання поточної ітерації циклу і здійснює перехід до наступної ітерації. При цьому всі оператори до кінця тіла циклу пропускаються. У циклі for оператор continue викликає виконання операторів збільшення і перевірки умови циклу. У циклах while і do-while оператор continue передає управління операторам перевірки умов циклу.
Оператор return використовується для виходу з функції. Віднесення його до категорії операторів переходу обумовлено тим, що він змушує програму перейти в точку виклику функції. Оператор return може мати асоційоване з ним значення, тоді при виконанні даного оператора це значення повертається в якості значення функції. У функціях типу void використовується оператор return без значення.
Загальна форма оператора return наступна:
return вираз;
Усередині функції може бути присутнім довільну кількість операторів return. Вихід з функції відбувається тоді, коли зустрічається один з них. Закривається фігурна дужка} також викликає вихід з функції. Вихід програми на неї еквівалентний оператору return без значення. У цьому випадку функція, тип якої відмінний від void, повертає невизначене значення.
Функція, визначена з специфікатором void, не може містити return зі значенням.
Метод Хука - Дживса так само, як і алгоритм Нелдера - Міда , служить для пошуку безумовного
локального екстремуму функції і відноситься до прямих методів, тобто спирається безпосередньо на значення функції. Алгоритм ділиться на дві фази: досліджуючий пошук та пошук за зразком.
На початковому етапі задається стартова точка (позначимо її 1) і кроки h i за координатами. Потім заморожуємо значення всіх координат крім 1-й, обчислюємо значення функції в точках x 0 + h 0 і x 0 -h 0 (де x 0 - перша координата точки, а h 0 - відповідно значення кроку по цій координаті) і переходимо в точку з найменшим значенням функції. У цій точці заморожуємо значення всіх координат крім 2-й, обчислюємо значення функції в точках x 1 + h 1 і x 1 -h 1, переходимо в точку з найменшим значенням функції і т. Д. Для всіх координат. У випадку, якщо для якої-небудь координати значення у вихідній точці менше, ніж значення для обох напрямів кроку, то крок цією координаті зменшується. Коли кроки по всіх координатах h i стануть менше відповідних значень e i, алгоритм завершується, і точка 1 визнається точкою мінімуму.
Метод Нелдера – Міда.
Будується початковий симплекс - множина з n+1 допустимих точок аргументів, де n- розмірність завдання. Назву цей симплекс гіперпірамідою (трикутник, якщо на площині). Далі точки сортуються в порядку погіршення значення функції. Найгіршу точку пробуємо замінити на іншу, отриману як її відображення по прямій з неї через центр мас кращих точок (грубо кажучи, по напряму туди, де функція потенційно покращується), що залишилися. Якщо відображення не дають поліпшення функції, то увесь симплекс пропорційно стискається до кращої з точок. Все повторюється до тих пір, поки або симплекс не вироджується (починають співпадати точки або стягується в маленьку область), або розкид значень функції стає несуттєвим.