Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб роб 2.doc
Скачиваний:
0
Добавлен:
14.11.2019
Размер:
111.62 Кб
Скачать

If (I) //помилка

Таким чином, необхідно використовувати вирази, що повертають значення типу boolean, або перетворювати до цього типу явно.

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

Припустимо, що у нас є два вирази – X і Y, які повертають значення типу boolean. Нижче приведена таблиця, яка показує, що відбуватиметься, якщо ми почнемо комбінувати ці вирази за допомогою логічних операцій.

X

Y

X&&Y

X||Y

true

true

true

true

true

false

false

true

false

true

false

true

false

false

false

false

Оператор switch представляє альтернативний спосіб опису умови if з перевіркою якогось виразу на різні значення. Синтаксис цього оператора:

switch (вираз)

{

case значение1

. . . .

break;

case значение2:

case значениеЗ:

break;

default:

. . . .

break;

}

Під виразом розуміється будь-який вираз, який має цілий тип або тип даних char, або enum, або string.

Цього оператора обчислює значення виразу і починає проходити по всіх мітках case, порівнюючи значення що співпадає із значенням виразу. Якщо програма виявила таку мітку, то виконуються всі оператори, які знаходяться після цієї мітки до оператора break, після якого здійснюється перехід в кінець оператора switch. У випадку, якщо мітка не знайдена, то перехід здійснюється на мітку default. Мітка default може бути відсутня, тоді перехід здійснюється відразу в кінець оператора switch.

char aLabel;

. . . .

switch (aLabel)

{

case 'A':

Console.WriteLine("aLabel is equals A");

break;

case 'В':

Console.WriteLine ("aLabel is equals B");

break;

default:

Console.WriteLine("aLabel unknown");

break;

}

Якщо необхідно виконати один і той же блок коду для декількох значень, то записують послідовність case виразів. В цьому випадку працює механізм відсутності оператора break, тобто в прикладі нижче, вирази приймає значення 'а', то перехід здійснюється на мітку case 'а':, але операторів після цієї мітки немає і немає оператора break, тому виконуються всі оператори підряд, тобто що йдуть після мітки case 'A':.

char aLabel;

. . . .

switch (aLabel)

{

case 'a':

case 'A':

Console.WriteLine ("aLabel is equals а or A");

break;

case 'b':

case 'В':

Console.WriteLine ("aLabel is equals b or B.");

break;

default:

Console.WriteLine("aLabel unknown");

break;

}

Відзначимо, що мітки, вказані в case, повинні бути унікальні. На відміну від інших мов програмування, можна використовувати goto-оператор для переходу на інші мітки в операторові switch.

switch (aLabel)

{

case 'a':

. . . .

goto case 'с';

case 'b':

. . . .

break;

case 'с':

. . . .

goto default;

default:

. . . .

break;

Цикли

У мові програмування С# існує чотири оператори, які дозволяють організовувати цикли, це while, do, for, foreach.

Цикл while. Найпростішим типом циклу є while. Синтаксис цього оператора:

while (лог. вираз)

{ Тіло циклу }

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

Фігурні дужки можна опускати, якщо оператор повинен виконувати усередині себе один рядок коду. Нижче наведено приклад програми з оператором while. Цей приклад видасть послідовність чисел від 0 до 4.

using System;

class whileTest

{

public static void Main()

{

int i=0;

while (i!=5)

{

Console.WriteLine(i);

i++;

} } }

Цей же приклад можна записати іншим чином:

using System;

class whileTest2

{

public static void Main()

{

int i=0;

while (i!=5)

Console.WriteLine(i++);

}

}

Цикли while можуть бути вкладеними, так, програма нижче видає на екран таблицю множення в стовпчик.

using System;

class whileTest3

{

public static void Main()

{

int i=2;

while (i!=10)

{

int j=1;

while (j!=10)

Console.WriteLine("{0}*{1}={2}",i,j,i*j++);

i++;

} } }

Оператор do аналогічний операторові while, і його відмінність полягає тільки в тому, що він перевіряє умову після виконання коду усередині оператора. Синтаксис оператора:

do

{ Тіло циклу }

while (вираз);

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

using System;

class doTest

{

public static void Main()

{

int i = 0;

do

{

Console.WriteLine (i);

i++;

}

while (i!=5);

} }

Буде надрукована на екран послідовність чисел від нуля до 4.

Оператор for. Цей оператор присутній у всіх мовах програмування. Його синтаксис:

for (ініціалізація; вираз; модифікація)

{ Тіло циклу }

У блоці ініціалізації відбувається оголошення і установка початкових значень для змінних, які ми збираємося використовувати в циклі. Ця частина виконується один раз на початку роботи циклу. Цей блок може бути єдиним непорожнім блоком.

Друга частина – це вираз, який повертає логічне значення і обчислюється кожного разу перед виконанням операторів в блоці for. Якщо цей вираз повертає значення false, то оператор for завершує свою роботу.

using System;

class forTest

{

public static void Main()

{

for (int i=0;i<5;)

{

Console.WriteLine(i);

i++;

} } }

Попередня програма аналогічна програмі для циклу while, яка видає цифри від 0 до 4, за винятком того, що оголошення змінної i відбувається безпосередньо в операторі for. Оператор for з попереднього прикладу можна змінити, включивши в нього і зміну змінній i.

Остання частина виконується відразу після виконання всіх операторів в блоці for і призначена для зміни значень змінних, що беруть участь в умові. З урахуванням цього попередній приклад матиме вигляд:

using System;

class forTest2

{

public static void Main()

{

for (int i=0;i<5;i++)

{

Console.WriteLine (i);

} } }

Оператора for дуже просто можна представити за допомогою оператора while.

ініціалізація

while (вираз)

{ оновлення змінних }

Проте оператор for вважається зручним, оскільки дозволяє зібрати розрізнені частини оператора while разом (частина у фігурних дужках). Крім того, кожен з трьох виразів (або всі разом) в дужках може бути відсутнім.

using System;

class forTest3

{

public static void Main()

{

int i=0;

for (;i<10;)

Console.WriteLine (i);

i++;

} } }

Цей приклад повністю аналогічний наступному.

using System;

class forTest4

{

public static void Main()

{

for (int i=0; i<10; i++ )

{

Console.WriteLine(i);

} } }

Або ж з використанням оператора while програму можна записати і так:

using System;

class whileTest4

public static void Main()

{

int i=0;

while(i<10)

{

Console.WriteLine (i);

i++;

} } }

Основна відмінність оператора for полягає в можливості оголошувати змінні в блоці ініціалізації. Причому змінних одного типу ми можемо оголосити декілька, перерахувавши їх через кому. Змінна, оголошена в операторові for, вважається локальною для блоку for, тому використовувати її поза цим блоком не вдасться і код нижче видасть помилку:

using System;

class forTest4

{

public static void Main()

{

for {int i=0;i<10;i++)

{ Console.WriteLine(i); }

Console.WriteLine(i); /помилка компілювання