Оператор циклу for. Загальна форма. Приклади розвʼязку задач
Зміст
- 1. Призначення оператора циклу for. Загальна форма
- 2. Різновиди циклу for. Приклади
- 3. Приклади циклу for, в якому кількість ітерацій наперед відома
- 4. Приклади циклу for, в якому кількість ітерацій є наперед невідомою
- 5. Поняття вкладеного циклу for
- 6. Приклади розвʼязку задач, в яких цикл for є вкладеним в інші цикли
- Зв’язані теми
Пошук на інших ресурсах:
1. Призначення оператора циклу for. Загальна форма
Цикл for призначений для організації циклічного процесу. З допомогою циклу for можна організовувати циклічний процес будь-якого типу, в якому:
- кількість ітерацій циклу наперед відома;
- кількість ітерацій циклу невідома і визначається на основі виконання деякої умови.
Загальна форма оператора циклу for
for (ініціалізація; умова; вираз) { // деякі інструкції, оператори // ... }
де
- ініціалізація – вираз, що ініціалізує змінну-лічильник. Ця змінна визначає кількість ітерацій, які мають виконатись в циклі;
- умова – логічний вираз, який визначає необхідність виконання наступної ітерації циклу. Якщо значення умова рівне true, то виконується наступна ітерація циклу. Якщо значення умова = false, то відбувається припинення виконання циклу і перехід до наступного оператора, що слідує за оператором for;
- вираз – деякий вираз, який змінює значення змінної-лічильника. Необовʼязково вираз може змінювати значення змінної лічильника. Змінна-лічильник може змінювати своє значення в тілі циклу також.
Якщо оператор циклу for застосовується для одного оператора, то в загальній формі фігурні дужки можна опустити
for (ініціалізація; умова; вираз)
оператор;
тут оператор – один оператор або одна інструкція.
⇑
2. Різновиди циклу for. Приклади
У циклі for можна опускати будь-яку з його частин (ініціалізація, умова, вираз). Наступні приклади демонструють універсальність циклу for, який може бути використаний по різному.
Приклад 1. У прикладі опущена частина, що ініціалізує змінну-лічильник. Обчислюється сума
s = 2 + 4 + 8 + … + 100
Фрагмент коду, що розв’язує дану задачу наступний:
// обчислити суму 2+4+8+...+100 int sum = 0; int i = 0; // немає частини ініціалізації змінної-лічильника for (; i <= 100; i += 2) sum += i; // sum = 2550
Приклад 2. У прикладі опущена частина, що перевіряє умову виконання наступної ітерації. Приклад обчислює суму елементів масиву A.
// обчислити суму елементів масиву A double[] A = { 2.5, 1.2, 0.8, 3.3, 4.2 }; double sum = 0; int i; // немає частини, що перевіряє умову виконання циклу for (i = 0; ; i++) { if (i == A.Length) break; sum += A[i]; } // sum = 12.0
Приклад 3. У прикладі опущена частина виразу, що змінює змінну-лічильник. Дано дійсне число a та натуральне число n. Обчислити:
a × (a+1) × … × (a+n-1)
Фрагмент коду, що розв’язує дану задачу
// обчислити добуток a*(a+1)*...*(a+n-1) int mult; int i; int n, a; n = 5; a = 4; mult = 1; // відсутня частина приросту змінної-лічильника i for (i = 0; i < n; ) { mult = mult * (a + i); i++; } // mult = 6720
Приклад 4. У прикладі цикл for не містить ініціалізації та умови. Задано натуральне число n. Визначити максимальну цифру цього числа.
Розвʼязок даної задачі з використанням циклу for (додаток типу Console Application)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // визначити максимальну цифру числа n int n; int t, d; int max; // ввід n Console.Write("n = "); n = Convert.ToInt32(Console.ReadLine()); t = n; max = 0; // максимальна цифра for (; t > 0; ) // цикл не містить ініціалізації та приросту лічильника { d = t % 10; if (max < d) max = d; t = t / 10; } Console.WriteLine("Max = {0}", max); } } }
Результат виконання вищенаведеної програми:
n = 283915 Max = 9
Приклад 5. У прикладі цикл for не містить умови та виразу. Вихід з циклу for здійснюється з допомогою інструкції break.
Задано масив B чисел типу float. Знайти позицію pos першого елементу масиву, значення якого лежить в діапазоні від -5 до +5.
Фрагмент коду, що розв’язує дану задачу
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // знайти позицію першого входження float[] B = { 12.4f, -11.9f, 7.5f, 2.3f, 1.8f }; int pos; for (pos = 0; ; ) // цикл for не містить умови та виразу { if (pos == B.Length) break; if ((B[pos] >= -5) && (B[pos] <= 5)) break; pos++; } if (pos == B.Length) Console.WriteLine("Шуканого елементу немає в масиві."); else Console.WriteLine("pos = {0}", pos); } } }
Результат виконання програми
pos = 3
Приклад 6. У прикладі демонструється “пустий” цикл for. В загальному пустий цикл for виглядає наступним чином:
for ( ; ; ) { // деякі інструкції // ... }
⇑
3. Приклади циклу for, в якому кількість ітерацій наперед відома
Приклад 1. Знайти суму всіх цілих чисел від 100 до 200. Фрагмент програми, що розвʼязує дану задачу з використанням циклу for наступний:
// обчислити суму int sum; int i; sum = 0; for (i = 100; i <= 200; i++) sum += i; // sum = 15150
Приклад 2. Дано натуральне число n. Розробити програму, яка знаходить наступну суму
Фрагмент коду, що розвʼязує дану задачу
// обчислити суму double sum; int i; int n; n = 10; sum = 0; for (i = 1; i <= n; i++) sum = sum + 1.0 / i; // sum = 2.92896825396825
Приклад 3. Рекурентні співвідношення. Послідовність чисел a0, a1, a2, … утворюється за законом:
Дано натуральне число n. Отримати a1, a2, …, an.
Текст програми, яка розвʼязує дану задачу, наступний:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // отримати a1, a2, ..., an double a0, ak; int k; int n; n = 10; // задано деяке n a0 = 1; k = 0; Console.WriteLine("a[{0}] = {1}", k, a0); for (k = 1; k <= n; k++) { ak = k * a0 + 1.0 / k; Console.WriteLine("a[{0}] = {1}", k, ak); a0 = ak; } } } }
У результаті виконання вищенаведеного коду, буде виведено наступний результат
a[0] = 1 a[1] = 2 a[2] = 4.5 a[3] = 13.8333333333333 a[4] = 55.5833333333333 a[5] = 278.116666666667 a[6] = 1668.86666666667 a[7] = 11682.2095238095 a[8] = 93457.8011904762 a[9] = 841120.321825397 a[10] = 8411203.31825397
⇑
4. Приклади циклу for, в якому кількість ітерацій є наперед невідомою
Приклад 1. Дано дійсне число a. Знайти таке найменше n, що
Розв’язок задачі для додатку типу Console Application
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { // цикл for, в якому кількість ітерацій наперед невідома int n; double a; double t; Console.Write("a = "); a = Convert.ToDouble(Console.ReadLine()); // цикл обчислення for (n = 1, t = 0; t < a; n++) t = t + 1.0 / n; Console.Write("n = {0}", n - 1); } } }
Виконання даної програми дасть наступний результат
a = 2 n = 4
Приклад 2. Задано число a (1<a≤1.5). Знайти таке найменше n, що в послідовності чисел
останнє число є менше ніж a.
Нижче наведено розв’язок задачі для додатку типу Console Application
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // знайти найменше n int n; double a; double t; Console.Write("a = "); a = Convert.ToDouble(Console.ReadLine()); // у частині ініціалізації містяться два вирази for (n = 2, t = 1 + 1.0 / n; t >= a; n++) t = 1 + 1.0 / n; Console.WriteLine("n = {0}", n-1); } } }
Як видно з вищенаведеного коду, у циклі for в частині ініціалізації містяться два вирази, розділених комою:
for (n = 2, t = 1 + 1.0 / n; t >= a; n++)
t = 1 + 1.0 / n;
Виконання програми для деякого значення a може бути, наприклад, таким
a = 1.3 n = 4
⇑
5. Поняття вкладеного циклу for
Цикл for може бути вкладеним в будь-який інший управляючий оператор, яким може бути:
- оператор умовного переходу if;
- оператор варіанту switch;
- оператор циклу for;
- оператор циклу while;
- оператор циклу do…while.
Кількість рівнів вкладення необмежена.
⇑
6. Приклади розвʼязку задач, в яких цикл for є вкладеним в інші цикли
Приклад 1. У прикладі цикл for вкладений в інший цикл for.
Надрукувати числа у вигляді наступної таблиці:
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
Фрагмент коду, що розв’язує дану задачу для додатку типу Console Application:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // у циклі for вкладено інший цикл for for (int i = 1; i <= 5; i++) { for (int j = 1; j <= i; j++) Console.Write("{0} ", i); Console.WriteLine(); } } } }
Приклад 2. Цикл for вкладений у цикл while.
Знайти всі цілі числа з проміжку від 1 до 300, у яких рівно 5 дільників.
Фрагмент коду, що розв’язує дану задачу
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { // знайти всі числа від 1 до 300 у яких рівно 5 дільників int num; int i, k; num = 1; while (num <= 300) { k = 0; for (i = 1; i <= num; i++) // цикл for вкладений у цикл while if (num % i == 0) k++; if (k == 5) Console.WriteLine("{0}", num); num++; } } } }
Результат виконання програми
16 81
⇑
Зв’язані теми
- Оператор умовного переходу if. Повна та скорочена форми. Конструкція if-else-if
- Оператор вибору switch. Вкладені оператори switch
- Оператор циклу while. Приклади