Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КТіП Лекції 20110516 (1).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.32 Mб
Скачать
    1. Цикл з передумовою. Оператор while

Оператор while має такий синтаксис:

while ( вираз ) оператор;

де вираз – довільний вираз, що задає умову виконання циклу, оператор – довільний оператор мови, зокрема блок, що формує тіло циклу.

Оператор працює наступним чином:

  1. обчислюється значення виразу, тобто перевіряється умова виконання циклу;

  2. якщо значення виразу дорівнює нулю, тобто умова хибна, то виконання циклу завершується, управління передається оператору, наступному за while;

  3. якщо значення виразу ненульове, тобто умова істинна, то виконується оператор тіла циклу;

  4. відбувається повернення до пункту 1 для наступної перевірки умови виконання циклу.

Наведемо приклад програми, яка виводить на екран числа від 0 до 10.

#include <iostream>

using namespace std;

int main(){

int i;

i = 0;

while ( i < 10 ) {

cout << i << endl;

i++;

}

}

На мал. 6.3 наведена блок – схема роботи цієї програми і блок – схема роботи оператора while.

Мал. 6.3. Блок – схема роботи і приклад використання оператора while

На відміну від оператора for, в операторі while немає окремих виразів для ініціалізації змінних циклу і їх зміни. Ці дії, якщо вони необхідні, виконуються перед циклом або всередині циклу.

Знайдемо максимальне значення функції на інтервалі від 0 до Пі, при цьому будемо використовувати оператор while.

#include <iostream>

using namespace std;

int main(){

const double X1 = 0.;

const double X2 = 3.14159;

double xmax, fmax, d, t, f;

xmax = X1;

fmax = sin( pow( X1, 2 ) ) + pow( cos( X1 ), 2 );

d = 1e-3;

t = X1 + d;

while ( t <= X2 ) {

f = sin( pow( t, 2 ) ) + pow( cos( t ), 2 );

if ( fmax < f ) {

xmax = t;

fmax = f;

}

t += d;

}

cout << xmax << " : " << fmax << endl;

}

Знайдемо значення факторіалу з допомогою оператора while.

#include <iostream>

using namespace std;

int main(){

int n = 5, f = 1;

while ( n )

f *= n--;

cout << f << endl;

}

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

#include <iostream>

using namespace std;

int main(){

setlocale(LC_ALL, "");

int num = 0; // Кількість чисел

int sum = 0; // Сума чисел

int pro = 1; // Добуток чисел

int max = 0; // Найбільше число

int n;

cin >> n;

while ( n ) {

++num;

sum += n;

pro *= n;

if ( n > max ) max = n;

cin >> n;

}

cout << "Кількість\t" << num << endl;

cout << "Сума\t" << sum << endl;

cout << "Добуток\t" << pro << endl;

cout << "Найбільше\t" << max << endl;

}

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

#include <iostream>

using namespace std;

int main() {

double t = 1;

while ( 1 + t / 2 > 1 )

t /= 2;

cout << t << endl;

}

    1. Цикл з постумовою. Оператор do while

Синтаксис оператора такий:

do

оператор

while ( вираз );

Оператор – це довільний оператор мови програмування С++, в тому числі блок операторів, який формує тіло циклу. Вираз – довільний вираз, що задає умову виконання циклу. В цьому операторі спочатку виконується тіло циклу, після цього здійснюється перевірка умови продовження циклу. Блок – схема роботи оператора і приклад його використання наведені на мал. 6.4.

Мал. 6.4. Блок схема і приклад використання оператора do while

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

#include <iostream>

using namespace std;

int main() {

int t, s = 0;

do {

cin >> t;

s += t;

} while ( t != 0 );

cout << s << endl;

}

Знайти перше нульове значення функції для значень х більше нуля. Будемо шукати перше значення функції, яке знаходиться «на відстані» допустимої помилки від нуля, тобто .

#include <iostream>

using namespace std;

int main() {

double f; // Значення функції

double d = 1e-5; // Крок зміни х

double x = 0.; // Поточне значення х

double e = 1e-5; // Допустима помилка розрахунків

do {

f = sin( pow( x, 2. ) ) + pow( cos( x ), 2. );

x += d;

} while ( f < -e || f > e );

cout << "x = " << x << endl; // 1.78519

cout << "f = " << f << endl; // 1.02908e-006

}

Знайти перше нульове значення функції для значень х більше нуля. Будемо знаходити два значення функції – для поточного і наступного значень х. Якщо знак цих двох значень функції буде різним, тобто перше додатне, друге – від’ємне, або навпаки, то між цими двома значеннями х функція переходе через нуль.

#include <iostream>

using namespace std;

int main() {

double f1, f2; // Значення функції для x i x+d

double d = 1e-5; // Крок зміни х

double x = 0.; // Поточне значення х

do {

f1 = sin( pow( x, 2. ) ) + pow( cos( x ), 2. );

f2 = sin( pow( x + d, 2. ) ) + pow( cos( x + d ), 2. );

x += d;

} while ( ( f1 > 0 && f2 > 0 ) || ( f1 < 0 && f2 < 0 ) );

cout << "x = " << x << endl; // 1.78519

cout << "f1 = " << f1 << endl; // 1.02908e-006

cout << "f2 = " << f2 << endl; // -3.04804e-005

}