4.2. Оператори циклу
Оператори циклу використовуються для обчислень, що повторюються багато разів. Блок, для виконання якого організовується цикл, називається тілом циклу. Решта операторів використовуються для управління процесом повторення обчислень: це початкові установки, перевірка умови продовження циклу і модифікація параметра циклу. Один прохід циклу називається ітерацією.
В усіх мовах програмування є два типи циклів: з передумовою і з пост-умовою. Також є цикл з параметром (for).
Початкові установки використовуються для того, щоб до входу в цикл задати значення змінних, які в ньому використовуються.
Перевірка умови продовження циклу виконується на кожній ітерації або до тіла циклу (тоді говорять про цикл з передумовою), або після тіла циклу (цикл з пост-умовою).
Параметром циклу називається змінна, яка використовується при перевірці умови продовження циклу і примусово змінюється на кожній ітерації, причому, як правило, на одну і ту саму величину. Якщо параметр циклу цілочисельний, він називається лічильником циклу.
Цикл завершується, якщо умова його продовження не виконується. Можливе примусове завершення як поточної ітерації, так і циклу в цілому. Для цього служать оператори break, continue, return і goto. Передавати управління ззовні всередину циклу забороняється.
В С# для організації циклів використовуються чотири типи циклів: for, while, do, foreach. Всі цикли крім foreach успадковані від С++ і мають той самий синтаксис.
Цикл з передумовою while
Синтаксис цикла while:
while (умова)
{список операторів}
Семантика оператора while:
Оператори в тілі циклу виконуються до тип пір, поки умова має значення true.
Приклад 4.4
int a=5678;
while (a>1)
{
a /= 10;
}
Умова в операторі while перевіряється до входження в цикл. Це гарантує, що цикл не буде виконуватися, якщо умова зразу має значення false.
Приклад 4.5
Напишемо програму, яка виводить для аргументу х, що змінюється в заданих границях із заданим кроком, таблицю значень наступної функції:
X={t, x<0
tx, 0<=x<10
2t, x>10 }
Назвемо початкове значення аргументу Xn, кінцеве значення аргументу — Xk, крок зміни аргументу — dX і параметр t. Всі величини дійсні числа (double). Програма повинна виводити таблицю, що складається з двох стовпців: значень аргументу і відповідних ним значень функції.
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double Xn = -2, Xk = 12, dX = 2, t = 2, y;
Console.WriteLine("| x | y |"); // заголовок таблиці
double x = Xn;
while (x <= Xk)
{
y = t;
if (x >= 0 && x < 10) y = t * x;
if (x >= 10) y = 2 * t;
Console.WriteLine("| {0,6} | {1,6} |", x, y);
x += dX;
}
Console.ReadKey();
}
}
}
Цикл з пост-умовою do…while
Синтаксис циклу do
do
{ список операторів }
while(умова);
Семантика циклу do…while
Оператори в тілі циклу виконуються до тип пір, поки умова має значення true.
Умова в операторі while перевіряється після ітерації циклу. В цьому циклі завжди виконується хоча б одна ітерація.
Приклад 4.6
int a=5678;
do
{
a /= 10;
} while (a>1);
Цей тип циклу застосовується в тих випадках, коли тіло циклу необхідно обов'язково виконати хоч б один раз.
Приклад 4.7
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
char answer;
do
{
Console.WriteLine("Будете вчитися?");
answer = (char)Console.Read();
Console.ReadLine();
} while (answer != 'y');
}
}
}
Цикл з перебором (for)
Синтаксис оператора:
for (ініціалізатор; умова; список_виразів)
{ оператори}
Семантика оператора
Ініціалізація використовується для оголошення змінних, які використовуються в циклі, і призначення їм початкових значень. У цій частині можна записати декілька операторів, розділених комою, наприклад:
for ( int i = 0, j = 20; ...
int k, m;
for (k = 1, m = 0; ...
Областю дії змінних, оголошених в частині ініціалізації циклу, є цикл. Ініціалізація виконується один раз на початку виконання циклу.
Вираз типу bool визначає умову виконання циклу: якщо його результат рівний true, цикл виконується.
Модифікації виконуються після кожної ітерації циклу і служать для зміни параметрів циклу. У частині модифікацій можна записати декілька операторів через кому, наприклад:
for ( int i = 0, j = 20; i < 5 && j > 10; i++, j-- ) ...
Простий або складений оператор є тілом циклу. Будь-яка з частин оператора for може бути опущена (але крапки з комою треба залишити на своїх місцях!).
Приклад 4.8. Обчислення суми чисел від 1 до 100:
int s = 0;
for ( int i = 1; i <= 100; i++ )
s += i;
Приклад 4.9. Обчислення ступеню n числа, xn (для n>0)
static public double Power(double x, int n)
{
double z=1;
for (int i=1;n>=i;i++)
{
z = z*x;
}
return z;
}
Цикл перебору FOREACH
Новим видом циклу, не успадкованим від С++, є цикл foreach, зручний при роботі з масивами, колекціями та іншими подібними контейнерами даних.
Синтаксис циклу foreach :
foreach(тип ідентифікатор in контейнер)
{оператори}
Семантика циклу foreach
Тіло циклу виконується для кожного елемента в контейнері. Тип ідентифікатора повинен бути узгоджений з типом елементів, що зберігаються в контейнері даних.
Приклад 4.10
int[] a ={ 10, 20, 30, 40 };
foreach (int i in a) { System.Console.WriteLine(i); };
