Контрольні питання Запис логічних виразів і правила їх обчислення.
Основні логічні операції і таблиці для обчислення результатів цих операцій.
Правила складання схем алгоритмів, що розгалужуються.
Інструкція if та її варіанти. Приклади.
Інструкція switch та приклад її використання.
Пояснення текстів функцій програми.
Написати підпрограму з розгалуженнями за завданням викладача, наприклад, функцію для визначення максимального (мінімального, середнього) з двох (трьох) чисел.
Написати підпрограму обчислення стипендії в залежності від статусу студента (бюджет чи ні) та середнього балу.
Рекомендована література Берн Страуструп. Язык программированя С++. Второе дополненное издание. – М: Бином-Пресс, 2008. – 369 с
Прата Стивен. Язык программирования С++. Лекции и упражнения. Учебник: Пер. с англ./Стивен Прата – СПб.:ООО «ДиаСофтЮП», 2003. –1104 с.
Шилдт Герберт. Полный справ очник по С++. Пер. с англ. – М: Вільямс, 2004. 783 с.
Шпак З.Я. Програмування мовою С. – Львів: Оріяна-Нова, 2012. – 432с.
5Лабораторна робота № 5. Побудова циклів з операторми „while” і „do...while” Мета роботи:
Познайомитися з особливостями та принципами використання циклів while та do…while.
Створити проект, що забезпечує вирішення математичних задач чисельними методами.
Короткі теоретичні відомості 5.1.1 Циклічні алгоритми Алгоритми вирішення багатьох задач є циклічними, тобто для досягнення результату певна послідовність дій повинна бути виконана декілька разів.
Наприклад, для того щоб знайти прізвище людини у списку, треба перевірити перше прізвище списку, потім друге, третє і т. д. доти, поки не буде знайдено потрібне прізвище або не закінчиться список.
Алгоритм, в якому є послідовність операцій (група операторів), яка повинна бути виконана декілька разів, називається циклічним, а сама послідовність операцій іменується тілом циклу.
У програмах на мові С цикл може бути реалізований за допомогою операторів while, do...while і for. Цикл, який створюється за допомогою оператора for, буде розглянуто в наступній роботі. Поки ж ми розглянемо оператора while і do... while.
Особливість циклів, що створюються за допомогою цих операторів, в тому, що в них заздалегідь не відомо, скільки разів буде виконуватися тіло циклу. Виконання повторюється, поки задовольняється деяка умова. А параметри, що впливають на умову змінюються у тілі циклу.
Типовими прикладами використання таких циклів є обчислення із заданою точністю, пошук у масиві або у файлі.
5.1.2 Оператор while Особливість ццого оператора полягає у тому, що умова перевіряється перед виконанням тіла циклу, тому цикл while називають циклом з передумовою.
В узагальненому вигляді оператор while записується так (рис.5.1).

Рисунок 5.1 – Синтаксис оператора while
На цьому рисунку <умова виконання > - це вираз логічного типу, що визначає умову за якої виконуються <оператора тіла циклу >.
Загалом, оператор while виконується у такий спосіб:
обчислюється значення виразу <умова виконання>;
якщо значення виразу <умова виконання > дорівнює false або 0, тобто умова не виконується, виконання <операторів тіла циклу > припиняється;.
якщо значення виразу <умова виконання дорівнює true або не 0 (умова виконується), то виконуються <оператора тіла циклу >, розташовані між фігурними дужками;
після цього знову все повторюється.
Слід зауважити, що для того щоб цикл завершився, потрібно щоб послідовність операторів, розташованих між фігурними дужками, впливала на значення <умови виконання >.
На рисунку 5.2 представлено схему алгоритму виконання цього циклу.
.
Рисунок 5.2 – Схема алгоритму виконання циклу while
Як приклад розглянемо функцію, що підраховує суму цифр цілого числа. Виділяти окремі цифри числа, починаючи з останньої можна за допомогою операції %10. Далі число можна поділити на 10, що призведе до втрати останньої цифри і передостання цифра стане останньою. Після цього операцію %10 можна повторити, і так далі, доки число після чергового ділення на 10 не стане нулем.
Текст цієї функції наведено нижче: uint sumFig(int x){ int sum=0; while(fabs(x)>0){ sum+=x%10; x/=10; } return sum; }
У мові С цикл while може виглядати дещо незвично, якщо у виразі для перевірки умови використовувати операцію присвоєння, або операцію «,» (кома). Операція кома пов’язує декілька виразів, що розглядаються як один. Результатом такої послідовності буде результат обчислення останнього виразу.
Використання таких можливостей може призвести до скорочення тіла циклу і навіть до його зникнення, так як це відбулося у наступній функції, яка робить те саме, що й попередня.
uint sumFig(int x){ int sum=0; while(sum+=x%10, fabs(x/=10)>0); return sum; }
5.1.3 Оператор do…while Особливість цього оператора полягає у тому, що умова перевіряється після виконання тіла циклу, внаслідок чого <оператори тіла циклу > виконуються, принаймні, один раз. Тому цикл do…while називають циклом з постумовою.
У мові програмування С оператор do…while виглядає таким чином (рисунок 5.3):

Рисунок 5.3 – Синтаксис оператора do…while
На рисунку <умова повтору тіла циклу > - це вираз логічного типу, що визначає умову за якої будуть знов виконані <оператора тіла циклу >.
Цикл виконується таким чином:
спочатку виконуються <оператори тіла циклу >, розташовані між фігурними дужками;.
потім обчислюється значення виразу <умова повтору тіла циклу >.
якщо значення виразу <умова повтору тіла циклу > дорівнює true або не 0 (умова виконується), то знову виконуються <оператори тіла циклу >, розташовані між фігурними дужками;
якщо значення виразу <умова виконання > дорівнює false або 0, тобто умова не виконується, виконання <операторів тіла циклу > припиняється.
Схема алгоритму виконання цього циклу представлена на рисунку 5.4.

Рисунок 5.4 – Схема алгоритму виконання циклу do…while
Як приклад використання циклу do…while розглянемо програму, вхід до якої контролюється паролем. Цикл do…while тут буде доречним, бо спочатку потрібно ввести пароль, а потім перевірити його правильність. Якщо пароль не правильний, то введення паролю слід повторити.
Текст цієї програми наведено нижче.
string p="qwerty"; string inpt; do{ cout<<"/nВведiть пароль "; cin>>inpt; }while(p!=inpt); cout<<"OK!\n"; …
5.1.4Переривання циклу Під час програмування деяких задач виникає потреба перервати виконання циклу, не чекаючи виконання умов виходу з циклу. Така можливість забезпечується оператором break. Цей оператор може бути розташований у будь-якому місці тіла циклу. В результаті цикл відразу ж припиняється.
На відміну від break оператор continue перериває виконання тільки тіла циклу і одразу ж переходить до обчислення умови продовження циклу.
Крім цих операторів можна використовувати оператор return, який перериває виконання не тільки циклу, але і всієї функції.
Можна використовувати і оператор exit, але в цьому випадку завершиться робота головної програми.
5.1.5Ітераційні алгоритми Алгоритми називають ітераційними, якщо в них багаторазово повторюються обчислення за однією і тією ж формулою, причому отриманий результат використовується в якості вихідних даних для наступного розрахунку. Обчислення повторюються доти, поки не буде виконана деяка умова.
У таблиці 5.1 наведені приклади рівнянь, які можуть бути вирішені методом ітерацій, і відповідні ітераційні формули. Спосіб отримання ітераційної формули дуже простий. Рівняння вирішується відносно невідомої змінної, причому в праву частину ітераційної формули входить та ж невідома змінна.
Таблиця 5.1 Рівняння, які вирішуються методом ітерацій Варіант
| Рівняння
| Ітераційна формула
| Обмеження
| 1
| 2
| 3
| 4
| 0
|

|

| 00
|
1
|

|

| a>0, b>0,
b/a<6, x0<π/2
| 2
|

|

| a>0, b>0,
c>0, x0>0
| 3
|

|

| a>1, b>0,
x0>0
| 4
|

|

| ab>c,
|x0|<π/(2b)
| 5
|

|

| a>0, b>0
c>1, x0>0
| 6
|

|

| a>0, c>0,
x0>0
| 7
|

|

| a>1, c>1,
b1
| 8
|

|

| a>0, b>0,
c>0, x0>0
| 9
|

|

| a>0, b>0,
c>0, x0>0
| Використання ітераційних алгоритмів дозволяє розв’язувати, наприклад, трансцендентні рівняння. Однак ці методи не є універсальними. Їх можна застосовувати лише тоді, коли результати послідовних ітерацій сходяться, тобто поступово наближаються до деякого значення, яке і буде рішенням рівняння. Алгоритм розв'язання рівнянь, наведених у таблиці 5.1 полягає в наступному.
Береться якесь наближене до розв’язку значення х0 (початкове наближення) і підставляється до ітераційної формули. Отримане за ітераційною формулою нове приблизне значення розв’язку порівнюється з попереднім. Якщо ці значення істотно відрізняються один від одного, то нове наближене значення підставляється в ітераційну формулу замість старого і на його основі отримують нове наближене значення. Так триває доти, поки нове і старе наближення стануть достатньо близькими один до одного.
Приклад ітераційного алгоритму для обчислення кубічного кореня Прикладом ітераційного алгоритму може служити алгоритм обчислення кубічного кореня методом Ньютона, який полягає у послідовному обчисленні наближених значень кореня за формулою 5.1.
(5.1)
де а – число, з якого добувається корінь, xold – попереднє наближене значення кореня, xnew – наступне, більш точне, ніж xold значення кореня.
Таким чином, формула 5.1 дозволяє послідовно уточнювати значення кореня, використовуючи попередній результат. В якості початкового значення для x можна взяти число, з якого добувається корінь.
Зазвичай обчислення проводяться доти, поки різниця між двома послідовними наближеннями за модулем не стане менше деякого, наперед заданого, достатньо малого числа.
В алгоритмі передбачено переривання циклу за допомогою оператора break в тому випадку, якщо змінна Xold дорівнює нулю, для того, щоб виключити ділення на 0.
Схему алгоритму, що реалізує цей метод, наведено на рисунку 5.5. Для реалізації цього алгоритму використовується цикл do…while.
5.1.6Алгоритми обчислення сум нескінченних рядів У цих алгоритмах послідовно підсумовуються члени нескінченного ряду. Накопичення суми має сенс тільки у тому випадку, якщо ряд сходиться, тобто значення членів ряду поступово зменшуються. Накопичення суми проводять доти, поки черговий член ряду не стане менше деякого, наперед заданого, достатньо малого числа. Подібність таких алгоритмів з попереднім полягає в тому, що обчислення кожного наступного члена ряду проводиться за значенням попереднього. 
Рисунок 5.5 – Схема алгоритму знаходження кубічного кореня
В якості прикладу обчислення суми рядурозглянемо алгоритм обчислення синуса деякого числа. Синус можна представити як суму нескінченного ряду 5.2.
(5.2)
Особливість даного ряду полягає в тому, що кожен член ряду, починаючи з другого, може бути знайдений з попереднього за формулою 5.3.
(5.3)
Алгоритм обчислення синуса за формулою 5.2 з використанням співвідношення 5.3 представлений на рисунку 5.6.
Слід мати на увазі, що ряд 5.2 при великих значеннях х сходиться повільно, а факторіал і «х в ступені» ростуть дуже швидко. Це призводить до того, що значущі цифри цих чисел перестають міститися в розрядній сітці і, отже, обрізаються, внаслідок чого результат спотворюється.
Для усунення цього недоліку в розглянутий алгоритм перед основним циклом накопичення суми ряду варто було б додати додатковий цикл. У цьому циклі змінна х повинна зменшуватися кожен раз на величину періоду синуса, який дорівнює 2π. Цикл працює доти, поки х не стане менше, ніж 2π.

Рисунок 5.6 – Алгоритм обчислення синуса Таблиця 5.2 Завдання на обчислення сум нескінченних рядів
| №
| Функція
| Ряд
| Рекурентна формула
| 1
| 2
| 3
| 4
|
0
|
e
|

|

|
1
|

|

|
, для х<1
|
2
|

|

|
, для х<1
|
3
|

|

|
, для х<1
|
| Продовження таблиці 5.2
| 1
| 2
| 3
| 4
|
4
|

|

|
, для х>1
|
|
|
|
|
5
|
cos(x)
|

|
, для х<π
|
6
|
sh(x)
|

|
для х<1
|
7
|
arctg(x)
|

|
для х<1
|
8
|
ln(1+x)
|

|
, для х<1
| 9
|

|

|
, для х<π
| перейти в каталог файлов
| Образовательный портал
Как узнать результаты егэ
Стихи про летний лагерь
3агадки для детей |