Цикли служать для багаторазового повторення деякого фрагмента коду.
У Сі-Шарп є чотири оператори циклів: for, while, do-while, foreach.
Цей цикл використовується тоді, коли наперед відомо, скільки повторень потрібно зробити. Він має наступну структуру:
for (ініціалізація лічильника; умова продовження; ітерація)
// блок коду, який буде повторюватися
>
Приклад програми, яка виводить на екран числа 0, 1, 2, 3, 4:
static void Main (string [] args)
for (int i = 0; i <5; i++) // цикл выполнится 5 раз
Console.WriteLine (i);
>
>
Спочатку відбувається створення і ініціалізація лічильника, i = 0. Далі йде перевірка умови (i <5), если результат будет «истина», то дальше выполняется блок кода в теле цикла. В конце итерации происходит изменение значения счетчика (в данном примере увеличение на единицу). После этого вновь происходит проверка условия и так далее. Когда условие будет «ложь», цикл работу завершит.
Приклад програми, яка знаходить і виводить на екран суму елементів масиву:
static void Main (string [] args)
int [] numbers = <4, 7, 1, 23, 43>;
int s = 0;
for (int i = 0; i
>
Console.WriteLine (s);
Console.ReadKey ();
>
Приклад циклу for, коли лічильник зменшується після кожної ітерації:
for (int i = 5; i> 0; i--) // виконається 5 разів
Console.WriteLine (i);
>
Лічильник можна змінювати не тільки на одиницю. Приклад програми, яка виводить парні числа (по число 50):
for (int i = 0; i <= 50; i+=2) //выполнится 26 раз
Console.WriteLine (i);
>
Слово while перекладається, як «поки», що добре його характеризує. Він продовжує виконуватися до тих пір, поки «істинно» деякий умова. Він має таку структуру:
while (умова продовження)
// блок коду, який буде повторюватися
>
Спочатку перевіряється умова, а далі виконується блок коду.
Приклад тієї ж програми, яка виводить на екран числа 0, 1, 2, 3, 4:
Цикл може виконуватися «вічно», якщо задати завжди справжнє умова:
while (true)
Console.WriteLine ( "Вічний цикл");
>
Цей той же цикл while, тільки тут спочатку виконується блок коду, а вже потім йде перевірка умови. Це гарантує хоча б один прохід циклу.
do
// блок коду, який буде повторюватися
>
while (умова продовження);
Приклад програми, що не завершить роботу, поки з клавіатури не введуть число 5:
static void Main (string [] args)
int number;
do
Console.WriteLine ( "Введіть число 5");
number = Convert.ToInt32 (Console.ReadLine ());
>
while (number! = 5);
>
Про циклі foreach ми поговоримо в окремому уроці.
З будь-якого циклу можна достроково вийти, використовуючи оператор break. Використовувати даний оператор є сенс після задоволення деякого умови, інакше цикл завершиться на першій ітерації.
Приклад програми, яка перевіряє, чи є в масиві число кратне 13-ти. Знайшовши таке число, немає сенсу далі перевіряти інші елементи масиву, і тут ми використовуємо оператор break:
static void Main (string [] args)
int [] numbers = <4, 7, 13, 20, 33, 23, 54>;
bool b = false;
for (int i = 0; i
b = true;
break;
>
>
Console.WriteLine (b. "У масиві є число кратне 13". "У масиві немає числа кратного 13");
Console.ReadKey ();
>
Даний оператор дозволяє перейти до наступної ітерації, не завершивши до кінця поточну.
Приклад програми, яка знаходить суму непарних елементів масиву:
static void Main (string [] args)
int [] numbers = <4, 7, 13, 20, 33, 23, 54>;
int s = 0;
for (int i = 0; i
continue; // перехід до наступної ітерації
s + = numbers [i];
>
Console.WriteLine (s);
Console.ReadKey ();
>
Завдання 1. Вивести на екран 20 елементів послідовності 1, 4, 7, 10, 13 ...
Завдання 2. Напишіть програму, яка буде «запитувати» правильний пароль, до тих пір, поки він не буде введений. Правильний пароль нехай буде «root».
Завдання 3. Дано два масиви однакової довжини (по 10 елементів). Створіть третій масив, який буде відображати суму перших двох масивів. Перший елемент третього масиву дорівнює сумі перших елементів двох перших масивів і так далі.
Оператор циклу foreach в Сі-Шарп
Оператор циклу foreach в Сі-Шарп служить для перебору елементів колекції. До колекцій належать масиви, списки List і призначені для користувача класи колекцій. В даному операторі не потрібно створювати змінну-лічильник для доступу до елементів колекції, на відміну від інших циклів. Оператор foreach має наступну структуру:
foreach ([тип] [змінна] in [колекція])
// тіло циклу
>
Приклад програми, в якій знаходиться сума елементів масиву з використанням циклу foreach:
foreach (int el in numbers)
s + = el;
>
Console.WriteLine (s);
Console.ReadKey ();
>
На кожній ітерації в змінну el послідовно записується елемент колекції. На першій ітерації значення змінної el одно "4". на другий ітерації - "7" і т.д.
Як і в інших циклах, в foreach можна використовувати оператори break і continue.
Використовуючи цикл foreach, виведіть на екран всі елементи масиву цілих чисел, які більше 20 і менше 50.
Функції в Сі-Шарп. оператор return
Функція являє собою невелику підпрограму. Якщо просто програма - це вирішення якоїсь прикладної задачі, то функція - це теж рішення, тільки вже в рамках програми і, відповідно, вона виконує завдання «простіше». Функції дозволяють зменшити розмір програми за рахунок того, що не потрібно повторно писати якийсь фрагмент коду - ми просто викликаємо скільки завгодно і де потрібно оголошену функцію.
Функції в Сі-Шарп також називають методами. Між цими двома поняттями різниця невелика, і тут ми будемо використовувати термін функція.
[Модифікатор доступу] [тип значення] [ім'я функції] ([аргументи])
// тіло функції
>
Модифікатор доступу (області видимості) може бути public, private, protected, internal. Для чого це потрібно говоритимемо в окремому уроці, а поки будемо всюди використовувати public.
Між модифікатором і типом може стояти ключове слово static, що означає, що функція буде статичною. Детально говорити про статичних функціях і змінних ми будемо в окремому уроці. Скажу тільки, що з статичної функції можна викликати інші функції, якщо вони теж статичні. Головна функція main - завжди static, тому всі функції в цьому уроці ми будемо оголошувати також статичними.
Функція може повертати значення або не повертати. Якщо функція, наприклад, повертає ціле число, то потрібно вказати тип int. Якщо функція не повертає ніякого значення, то для цього використовується ключове слово void. Функції, які не повертають значення, ще називають процедурами.
Називати функції варто так, щоб ім'я відображало суть функції. Використовуйте дієслова або словосполучення з дієсловами. Приклади: GetAge (), Sort (), SetVisibility ().
Аргументи - це ті дані, які необхідні для виконання функції. Аргументи записуються в форматі [тип] [ідентифікатор]. Якщо аргументів кілька, вони відокремлюються комою. Аргументи можуть бути відсутні.
Перший рядок функції, де зазначаються тип, ім'я, аргументи і т.д. називається заголовком функції.
Отже, вистачить теорії, переходимо до практики.
Приклад функції, яка не повертає значення
Напишемо просту функцію, яка буде замінювати в масиві рядків вказане ім'я на інше. Ця функція буде приймати три аргументи: масив рядків, ім'я, яке необхідно замінити і нове ім'я. Так як функція не повертатиме значення, вказуємо тип void перед ім'ям функції.
public static void ReplaceName (string [] names, string name, string newName)
for (int i = 0; i
names [i] = newName;
>
>
Сама функція дуже проста. Проходимо в циклі за елементами і дивимося, чи рівний елемент зазначеному імені. Якщо так, то замінюємо його на нове ім'я.
Функція написана, і тепер використовуємо її:
class Program
public static void ReplaceName (string [] names, string name, string newName)
for (int i = 0; i
names [i] = newName;
>
>
static void Main (string [] args)
string [] names = <"Sergey", "Maxim", "Andrey", "Oleg", "Andrey", "Ivan", "Sergey">;
ReplaceName (names, "Andrey", "Nikolay"); // виклик функції. Всі рядки "Andrey" в масиві будуть замінені на "Nikolay"
ReplaceName (names, "Ivan", "Vladimir");
>
>
Після виклику функції два рази в цій програмі, масив буде виглядати так: "Sergey", "Maxim", "Nikolay", "Oleg", "Nikolay", "Vladimir", "Sergey".
Приклад функції, яка повертає значення
Напишемо функцію, яка буде знаходити максимальне число в масиві. Аргумент у цій функції буде один - масив цілих чисел. Тип значення, що повертається - ціле число int.
public static int GetMax (int [] array)
int max = array [0];
for (int i = 1; i
max = array [i];
>
return max;
>
Логіка функції проста. Створюємо змінну max, в яку записуємо перший елемент масиву. Далі в циклі порівнюємо кожен елемент зі значенням в max, якщо елемент більше, ніж max, то записуємо в max цей елемент. В кінці функції використовуємо оператор return, щоб повернути наш результат.
Оператор return повинен бути обов'язково в функції, яка повертає значення.
Використовуємо нашу функцію:
class Program
public static int GetMax (int [] array)
int max = array [0];
for (int i = 1; i
max = array [i];
>
return max;
>
static void Main (string [] args)
int [] numbers = <3, 32, 16, 27, 55, 43, 2, 34>;
int max;
max = GetMax (numbers); // виклик такої функції можна використовувати при присвоєнні значення
Console.WriteLine (GetMax (numbers)); // виклик функції також можна використовувати як аргумент при виклику іншої функції. WriteLine () - теж функція.
Console.ReadKey ();
>
>
Коли зустрічається цей оператор, відбувається вихід з функції і код нижче (якщо він є) виконуватися не буде (наприклад, в функцію переданий такий аргумент, при якому немає сенсу виконувати функцію). Він схожий на оператор break, який використовується для виходу з циклів. Цей оператор також можна використовувати і в функціях, які не повертають значення. Оператор return допустимо використовувати кілька разів в функції, але цього робити не рекомендується.
Завдання 1. Напишіть функцію, яка буде змінювати в масиві цілих чисел всі елементи, які дорівнюють вказаним значенням (аргумент) на протилежне значення за знаком. Наприклад, всі елементи масиву які дорівнюють 5, будуть змінюватися на -5.
Завдання 2. Напишіть функцію, яка буде знаходити мінімальне число з трьох.
Завдання 3. Напишіть функцію, яка буде повертати вказаний елемент ряду Фібоначчі. Ряд Фібоначчі - це ряд, в якому кожен наступний елемент дорівнює сумі двох попередніх. 1 1 2 3 5 8 13 21 ... Функція приймає порядковий номер елемента, і повертає відповідний елемент.