Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Цикл з параметром. Оператор forСодержание книги
Поиск на нашем сайте Синтаксис оператора for такий:
for (вираз_1; вираз_2; вираз_3) оператор;
Вираз 1 встановлює початкові значення змінних циклу, його називають виразом ініціалізації. Вираз 2 задає умову виконання циклу, його називають виразом умови. Вираз 3 виконує зміну значень змінних циклу, його називають виразом ітерації. Оператор – довільний оператор мови, в тому числі блок, який задає дії, що мають виконуватись кількаразово, його називають тілом циклу. Оператор працює наступним чином: 1) обчислюється вираз 1, який використовується для надання змінним циклу початкових значень; 2) обчислюється значення виразу 2, тобто перевіряється умова виконання циклу; 3) якщо значення виразу 2 дорівнює нулю (умова хибна), то виконання циклу завершується, управління передається оператору, наступному за for; 4) якщо значення виразу 2 ненульове (умова істинна), то виконується оператор тіла циклу; 5) обчислюється вираз 3, який застосовується для зміни значень параметрів циклу; 6) відбувається безумовний перехід до кроку 2. Блок – схема роботи оператора for наведена на мал. 6.1. На цьому ж малюнку наведена блок – схема виконання такої програми:
#include <iostream> using namespace std; int main() { for (int i = 1; i <= 10; i++) cout << "i = " << i << endl; }
Параметром циклу є змінна і, значення якої змінюються при виконанні оператора циклу і виводяться на екран. Початковим значенням змінної є одиниця (задається виразом 1), останнім – десять (задається виразом 2). На кожному кроці виконання оператора for (ще кажуть, при кожному проході тіла циклу, на кожній ітерації) значення змінної збільшується на одиницю (задається виразом 3). Змінна і оголошена всередині оператора for. Такі змінні є локальними змінними циклу, їх можна використовувати тільки в межах даного оператора for. Початкову частину оператора циклу for (вираз_1; вираз_2; вираз_3) називають заголовком циклу. Після заголовка знак; не ставлять, крім випадків порожнього оператора. Всередині заголовка знак; застосовують для відокремлення між собою трьох складових виразів. Кожен з виразів, або всі вони, можуть бути відсутні, але знаки; ставити обов’язково. Тобто, попередню програму можна переписати так:
#include <iostream> using namespace std; int main(){ int i; i = 1; for (; i <= 10;) { cout << "i = " << i << endl; i++; } }
Мал. 6.1. Блок – схема роботи і приклад використання оператора for
Якщо вираз 2 відсутній, то умова вважається істиною. Для виходу з такого циклу можна застосовувати оператор break, який перериває виконання найближчого оточуючого оператора циклу. Тобто, попередню програму можна переписати так:
#include <iostream> using namespace std; int main(){ int i; i = 1; for (;;) { cout << "i = " << i << endl; if (++i > 10) break; } }
Приклад програми: знаходження суми ряду 1/1+1/2+1/3+… Суму будемо знаходити двома способами: з заданою точністю і підсумовуванням певної кількості елементів ряду.
#include <iostream> using namespace std; int main(){ double s, t, e; int i; s = 0; e = 1e-5; i = 1; for (t = 1 / i; t >= e; t = 1. / i) { s += t; i++; } cout << s << endl; s = 0; t = 1; for (i = 1; i <= 100000; i++) { t = 1. / i; s += t; } cout << s << endl; }
Недоліком цієї програми можна вважати ініціалізацію змінних в різних місцях програми, так само, як і збільшення параметрів циклу. В таких випадках зручно використовувати операцію «кома». Вона має найнижчий пріоритет серед операцій мови С++ і призначена для об’єднання декількох послідовно записаних виразів в один загальний вираз. Вирази, об’єднані з допомогою операції кома, виконуються зліва на право, значенням загального виразу стає значення самого правого під виразу. Приклад використання операції кома:
#include <iostream> using namespace std; int main(){ int a = 1, b = 2, c = 3, t; t = a + b, --c, a + c; // t = a + c cout << t << endl; }
Використаємо операцію кома при організації циклу. Знайдемо суму ряду 1/1+1/2+1/4+1/8+… Як і у попередньому прикладі, суму будемо знаходити двома способами: з заданою точністю і підсумовуванням певної кількості елементів ряду.
#include <iostream> using namespace std; int main(){ double s, t, e; int i; for (i = 0, s = 0, t = 1, e = 1e-5; t >= e; ++i, t = 1 / pow(2., i)) s += t; cout << s << endl; for (i = 0, s = 0, t = 1; i <= 100000; ++i, t = 1 / pow(2., i)) s += t; cout << s << endl; }
Знайдемо значення факторіалу з допомогою оператора for.
#include <iostream> using namespace std; int main(){ int f, i, n; cin >> n; for (f = 1, i = 2; i <= n; ++i) f *= i; cout << f << endl; }
Знайдемо суму ряду 1/1!+1/2!+1/3!+1/4!+1/5!+…
#include <iostream> using namespace std; int main(){ int f, i, n, j; double s; cin >> n; // кількість елементів ряду for (s = 0, i = 1; i <= n; ++i) { for (f = 1, j = 2; j <= i; ++j) f *= j; cout << s << " + 1 / " << f << endl; s += 1. / f; } cout << s << endl; }
Внутрішнього циклу для обчислення факторіала можна позбавитись, якщо зберігати значення факторіалу, знайдене для попереднього елементу ряду.
#include <iostream> using namespace std; int main() { int f, i, n, j; double s; cin >> n; // кількість елементів ряду for (s = 0, i = 1, f = 1; i <= n; ++i, f *= i) { cout << s << " + 1 / " << f << endl; s += 1. / f; } cout << s << endl; }
Схожий метод можна використовувати для програм, в яких необхідно отримати послідовність виду 1, -1, 1, -1, 1, … Зробимо це двома способами: з допомогою піднесення до степеня n числа -1 і з допомогою множення попереднього значення на -1.
#include <iostream> using namespace std; int main(){ int i, n = 10, t; for (i = 0; i < n; i++) cout << i << ": " << pow(-1., i) << endl; for (i = 0, t = 1; i < n; i++, t *= -1) cout << i << ": " << t << endl; }
Знайти максимальне значення функції
Мал. 6.2. Графік функції
#include <iostream> using namespace std; int main(){ const double PI = 3.14159; const double X1 = 0.; const double X2 = PI; double xmax, fmax, d, t, f; cin >> d; xmax = X1; fmax = sin(pow(X1, 2)) + pow(cos(X1), 2); for (t = X1; t <= X2; t += d) { f = sin(pow(t, 2)) + pow(cos(t), 2); cout << t << "\t" << f << endl; if (fmax < f) { xmax = t; fmax = f; } } cout << xmax << ": " << fmax << endl; }
Знайти перше нульове значення функції
#include <iostream> using namespace std; int main() { double f; // Значення функції double d = 1e-5; // Крок зміни х double x = 0.; // Поточне значення х double e = 1e-5; // Допустима помилка розрахунків int n = 10000000; // Максимально допустима кількість ітерацій int i; f = sin(pow(0, 2.)) + pow(cos(0.), 2.); for (x = d, i = 1;! (-e < f && f < e); x += d, ++i) { f = sin(pow(x, 2.)) + pow(cos(x), 2.); if (i >= n) { cout << "Not found" << endl; break; } } cout << "x = " << x << endl; // 1.78519 cout << "f = " << f << endl; // 1.02908e-006 }
|
||
|
Последнее изменение этой страницы: 2021-12-15; просмотров: 127; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.006 с.) |