logo
Модуль 03 Віконні застосування / Лекційний матемріал / Частина 1

3.7. Оператор for

Окрім оператора while, організувати цикл дозволяє і оператор for. Перепишемо вже розглянуту програму розрахунку температур в дещо іншому вигляді (лістинг 3.3).

Лістинг 3.3.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace CelsFahr_For

{

class Program

{

public static void Main(string[] args)

{

Console.WriteLine("Таблиця температур за Фаренгейтом і Цельсієм:");

Console.WriteLine("За Фаренгейтом За Цельсієм");

int fahr;

for (fahr = 0; fahr <= 300; fahr=fahr+20)

Console.WriteLine(" {0:f} {1:f}", fahr, (5.0/9.0)*(fahr-32.0));

Console.Write("Для продовження натисніть будь-яку клавішу>");

Console.Read();

}

}

}

Тут для отримання того ж результату, що і у попередньому випадку застосований оператор циклу for. Тіло цього оператора, як і тіло оператора while, циклічно виконується (прокручується). У нашому випадку тіло for складається всього з одного оператора - Console.WriteLine(...), тому таке тіло не береться у фігурні дужки (якби тіло оператора while складалося тільки з одного оператора, воно теж не бралося би в дужки).

Видно, що запис програми набув компактнішого вигляду. У заголовковій частині оператора for розташовано три вирази, з яких перші два закінчуються крапкою з комою, третій - круглою дужкою, яка позначає межу заголовної частини for (компілятор розуміє що третій вираз завершився). Кажуть, що в даному випадку "цикл йде по змінній fahr": в першому виразі вона отримує початкове значення, другий вираз - це умова закінчення циклу (цикл закінчиться тоді, коли fahr набуде значення, більшого 300), а третій вираз змінює параметр циклу на величину кроку циклу.

Робота відбувається так: ініціалізувалася змінна циклу (т. т. отримує початкове значення), потім перевіряється умова продовження циклу. Якщо вона істинна, то спочатку виконується тіло оператора (в даному випадку функція Console.WriteLine(...)), потім управління передається у заголовкову частину оператора for. Після цього обчислюється третій вираз (змінюється параметр циклу) і перевіряється значення другого виразу. Якщо воно істинне, то виконується тіло, потім управління знову передається на обчислення третьому виразу і т. д. Якщо ж другий вираз стає неправдивим, то виконання оператора for завершується і починає виконуватися оператор, наступний безпосередньо за ним, т. т. за його тілом (а це - завершальна фігурна дужка Main(), що означає припинення роботи функції Main()).

У цьому прикладі треба звернути увагу на аргумент функції Console.WriteLine(...). Замість звичайної змінної там стоїть цілий вираз, який спочатку буде обчислено, а потім його значення виведеться на пристрій виведення. Вираз можна вказувати як аргумент функції, виходячи з правила мови: "У будь-якому контексті, в якому допускається використання змінної деякого типу, можна використати і вираз цього ж типу".

Змінимо програму лістингу 3.3 так, як показано в лістингу 3.4.

Лістинг 3.4.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace CelsFahr_For

{

class Program

{

const int upper = 300;

const int lower = 0;

const int step = 20;

public static void Main(string[] args)

{

Console.WriteLine("Таблиця температур за Фаренгейтом і Цельсієм:");

Console.WriteLine("За Фаренгейтом За Цельсієм");

int fahr;

for (fahr = lower; fahr <= upper; fahr = fahr + step)

Console.WriteLine(" {0:f} {1:f}", fahr, (5.0 / 9.0) * (fahr - 32.0));

Console.Write("Для продовження натисніть будь-яку клавішу>");

Console.Read();

}

}

}

Що нового отримали? В операторі for були замінені конкретні числа на значення змінних, а самі змінні отримали початкові константні значення перед визначенням функції Main(). Результат розрахунку не змінився. Для чого усе це? Ми підвищили гнучкість програми в сенсі її супроводу. Уявіть собі, що ви супроводжуєте досить велику програму, та ще й чужу. Тобто ви в ній, так би мовити, плаваєте. У неї розробник понапихав (інакше не скажеш) масу конкретних цифр. Приходить до вас той, для кого ви супроводжуєте цю програму (т. т. програма працює на цю людину або організацію), і говорить вам, що такі-то числа, закладені раніше в програму, потрібно замінити іншими. Що ви станете робити? Ви візьмете текст програми і почнете в ньому довго і наполегливо шукати числа, які потрібно замінити. При цьому згадуватимете розробника не дуже утішними словами. Ось щоб цього не траплялося, краще усі константи, що беруть участь в розрахунках, виносити в одну область програми (бажано, в початок), щоб можна було надалі без особливих зусиль змінювати їх значення. Форма запису таких величин у вигляді const int upper = 300; і місце їх запису - це вимоги класів, які ми розглядатимемо надалі. Через те, що наша програма оформлена як клас з ім'ям Program, то константи в цьому класі описані як константні згідно потрібного формату.

На завершення відмітимо, що разом з оператором циклу while є оператор циклу do while. Він працює практично так само як і while за одним лише виключенням: while може відразу закінчуватися, не виконуючи жодного разу свого тіла, якщо первинна умова в його заголовку неправдива. Робота оператора розпочинається з перевірки умови в його заголовку: якщо воно неправдиве, оператор не виконується. Але зустрічаються завдання у яких потрібно застосувати while, але щоб і при неправдивій початковій умові тіло виконалося хоч би один раз. Ось це і робить оператор do while.

Вигляд такого оператора наступний:

do

{

// тіло

}

while(умова);

Зверніть увагу, що після заголовка, який розташований вже у кінці оператора, знаходиться крапка з комою, чого в звичайному while не було.