Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 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; }
Знайти максимальне значення функції на інтервалі від 0 до Пі. Графік функції представлений на мал. 6.2. Вивести на екран таблицю значень цієї функції з заданим користувачем кроком зміни х.
Мал. 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; просмотров: 67; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.116.67.212 (0.021 с.) |