понеділок, 19 березня 2018 р.

Цикли (С#)


Припустимо, що потрібно декілька різів виконати одну і ту ж операцію. Для цього можна декілька разів підряд написати один код і ніяких проблем. А якщо операція повинна виконуватись  100 разів? Тут виникає проблема, через те, що писати 100 рядків коду нецікаво та абсолютно неефективно. Я якщо доведеться змінити формулу, яка виконується 100 раз? Проблему вирішують цикли, які виконують вказану дію визначену кількість разів.

У C # є такі види циклів:


for

foreach

while

do ... while

цикл for


В загальному вигляді цикл for виглядає так:
for (ініціалізація; Умова; Порядок виконання;)
Дія;
Після оператора for в дужках вказуються три оператори, розділених знаком ";".
1. Ініціалізація - початкове значення змінної лічильника;
2. Умова - поки ця умова повертає істину, дія буде виконуватись;
3. Порядок виконання - команда, яка повинна збільшувати лічильник.

Отже, поки умова, вказана в дужках, правильна, буде виконуватись вказана дія. Зверніть увагу, що циклічно уде виконуватись тільки одна команда. Якщо необхідно виконати декілька дій, то їх потрібно вписати у фігурні дужк, так само як ми робили це з логічними операціями:
for (ініціалізація; Умова; Порядок виконання;)
{
Дія 1;
Дія 2;
}
Дії, які винує цикл, ще називають тілом циклу.
Розглянемо приклад.
Розрахуємо фаторіал числа 5. Факторіал числа 5 - це результат перемноження  чисел від 1 і до вказаного числа. Тобто в нашому випадку це 1*2*3*4*5. 

Наступний приклад показує, як можна розрахувати  факторіал числа 5:
int sum =1, max=5;
for (int i =2; i<=max; i++)
{
sum *=i;
}
Console.WriteLine(sum);

До початк циклу оголошуються дві цілочисельні змінні sum і max. Перша - буде викоритовуватись у розрахунку факторіалу, друга - визначає максимальне значення, до якого потрібно перебирати математичний ряд.
Перейдемо до огляду цикла. Зверніть увагу, що в дужках оператора for в першому операторі оголошена змінна і, якій присвоюється значення 2. Дійсно, тут можна оголушвати змінні, але тут потрібно зайти вперед і сказати про область видимості такої змінної. Вона буде доступна тільки всередині циклу. За межами циклу змінну не буде видно. Наприклад наступний код буде помилковим:
int sum =1, max=5;
for (int i =2; i<=max; i++)
{
sum *=i;
}
Console.WriteLine(sum);
Після циклу викликається метод WriteLine(), який намагається вивести в консоль значення змінної і. Якщо спроувати скомпілювати цей проект, то компілятор видасть помилку і оголосить, що змінної і не існуж. Якщо потрбіно бачити змінну і за межами циклу, то її потрібно оголосити перед циклом.

int sum =1, max=5, і;
for (int i =2; i<=max; i++)
{
sum *=i;
}
Console.WriteLine(sum);
 Тепер змінна і оголошена до циклу, а в дужках оператора for тільки задається значення. Тепер значення змінної буде доступно і за межами циклу і код буде правильним.
Чому цикл починається з 2, а не з 0, або 1?  На нуль множити не можна, тому що результату не буде, а на 1 немає сенсу - результат не зміниться. 
Повертаємося до нашого циклу. Другий оператор циклу for - це умова (i<=max;). Це ознчає, що цикл буде виконуватись від 2 і до того часу, поки значення змінної і не стане більшим значення max. В умові не обов'язково використовувати змінну, можна просто написати і<=5.
Останній оператор  циклу визначає, як буде змінюватись лічильник. В даному випалку змінна і збільшується на 1. На кожному етапі лічильника буде додаватися одиниця.
Тепер переглянемо логіку виконання циклу. Коли починає виконуватись цикл, змінна і попередньо дорівнює 2, а змінна sum = 1. Це значить, виконавши дію: sum *=i (це те ж саме, що й написати sum = sum  *i), в змінну sum буде записаний результат перемноження на 2.
Потім програма збільшить значення лічильника і а одиницю (тобто виконає операцію і++). Після збільшення лічильника відбувається перевірка, якщо лічильник перевищив значення max, то цикл переривається і виконання програми продовжується. В нашому випадку лічильник на другому кроці дорівнює 3, це значить, що поотрібно продовжити виконання циклу. Знову виконується дія sum *=i. Після виконання першого кроку циклу змінна sum = 2, означає, що  відбудеться перемноження цього числа на значення лічильника, тобто на 3. Результат (6) буде записаний в змінну sum.
Знову збільшуємоу лічильник на 1 і перевіряємо. І досі лічильник не перевищив значення max. 
Таким чином, тіло циклу виконується від 2 до 5, тобто 4 рази з значеннями лічильника 2,3,4,5. Як тільки лічильник стане = 6, він перевищить значення змінної max і його виконання перерветься.


Цикл While 

Цикл While, виконується поки умова правильна. В загальному вигляді While виглядає так:

while (умова)
Дія;

Цикл виконує тільки одну дію. Якщо потрібно виконати декілька дій, то їх необхідно об'єднати фігурними дужками:
while (умова)
{
Дія1;
Дія2;
....
}

Цикл do... while

Цикл While має одне обмеження - якщо умова завчасно непрвильна, то дія не буде виконана взагалі. Іноді виникає необхідність виконати дію один раз, незалежно від результату перевірки умови. В цьому випадку можна скористатися циклом do... while, який виглядає так: 
do
Дія;
while (умова);
Спочатку визначимо розбіжності - після дужок оператора while стоїть ";". Друга відміність - умова стоїть після дії. Це означає, що спочатку виконується дія, а вже потім перевіряється умова. Наступниу крок циклу буде виконаний, тілки якщо  умову виконано.

Важливим на даному етапі є розуміння інкременту та декременту (і++ та і--) в цьому допоможе відео





Немає коментарів:

Дописати коментар

ТЕСТОВА ТЕХНОЛОГІЯ ПЕРЕВІРКИ ЗНАНЬ ЗАСОБАМИ ХМАРНИХ ТЕХНОЛОГІЙ

В даний час, в умовах реформування української освіти, тестова технологія стала одним із інноваційних форм перевірки знань.   Тестова ...