Структури вибору

С# підтримує дві структури вибору, це конструкція if... та конструкція switch. Завдяки цим двом операторам можна реалізовувати розгалуження у наших програмах.

Умова if...

Розглянемо синтаксис цієї конструкції.

if(вираз)
{
……
//блок1
}
else
{
……
//блок 2
}

Вираз в дужках повертає значення або істина (true), або фальш (false), тобто значення типу boolean. Якщо вираз істинний, то виконуються оператори, які стоять в блоці 1, якщо вираз хибний, то виконуються оператори, що стоять в блоці 2.

Оператора if можна використовувати і без оператора else:

if(вираз)
{
……
//блок1
}

В цьому випадку виконуються оператори, що стоять в блоці 1, якщо вираз істинний; якщо вираз помилковий, то жоден з операторів блоку if не виконується.
Розглянемо приклад.

using System;
class StatementDemo01
{
    public static Main()
    {
        Console.WriteLine("Input first string:");
        string firstString=Conole.ReadLine();
        Console.WriteLine("Input second string:");
        string secondString=Console.ReadLine();
        if (firstString.Equals(secondString)) {
            Console.WriteLine("First string is equals second string");
        }
        else {
            Console.WriteLine ("First string is not equals second string");
        }
    }
}

Приклад, який приведений вище, демонструє роботу оператора if. Користувач вводить з клавіатури 2 рядки, і якщо вони рівні, то користувачу виводиться повідомлення про рівність цих рядків, інакше виводиться повідомлення про нерівність рядків.
У випадку, якщо в блоці if всього один рядок коду, то ви можете не вказувати фігурні дужки, хоча це і є поганим стилем програмування. Так, два приклади нижче еквівалентні:

//приклад 1
if(x==0) {
    х=х+10;
}
//приклад 2
if(x==0)
    х=х+10;

Якщо необхідно зробити вибір більш ніж між двома варіантами, то існує складніша версія умови if з множинним вибором. Для побудови таких конструкцій використовується вираз else if.

if (x<0) {
    х=х+10;
}
else if (x>10) {
    х=х-10;
    }
    else {
        х=5;
    }

В даному прикладі відбувається перевірка умови в першому if, і якщо умова істинна, то виконується код x=x+10, після чого здійснюється перехід на оператор, що йде за всім блоком if. У випадку, якщо перша умова помилкова, перевіряється умова в другому блоці if, і якщо воно повертає значення true, то виконується код х=х-10. Якщо жодна з умов не повернула значення true, то перехід здійснюється в блок else. Важливим є те, що після виконання операторів в одному з блоків оператора if програма переходить відразу на оператор, що йде за if, навіть якщо умови в нижчестоящих блоках цього оператора істинні.
Структури if можуть бути вкладені один в одного:

if (x<10) {
    if (y<5) {
        y=y+х;
        }
    else {
        у=у-х;
        }
}

Відзначимо, що на відміну від мови C++ тип int не приводиться автоматично до типу boolean, тому ми не можемо використовувати конструкцію, допустиму в C++:

int i=0;
  ……
if(i)  //помилка 
{
  ……
}

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

 

 X X&&Y  X||Y 
true  true   true   true  
true  alse  false true 
false true  false true
false false false false

Припустимо, нам необхідно перевірити, чи потрапляє змінна а в інтервал від -10 до 10. Для цього ми можемо написати наступний код, в якому ми використовуємо логічну операцію «і»:

using System;
class StatementDemo02
{
    static void Main() {
        double а;
        a=Convert.ToInt32 (Console.ReadLine ());
        if ((a>-10)&&(a<10)) {
            Console.WriteLine("а is in (-10;10)");
        }
        else {
            Console.WriteLine("а is not in (-10; 10)");
        }
    }
}

Припустимо, що ми хочемо перевірити, чи потрапляє а в інтервал, який не містить проміжок [-10;10].

using System;
class StatementDemo03 {
    static void Main()
    {
        double а;
        a=Convert.ToInt32(Console.ReadLine());
        if ((a<-10)||(a>10)) {
            Console.WriteLine("а is in (-10;10)");
        }
        else {
            Console.WriteLine("а is not in (-10;10)");
        }
    }
}

В даному прикладі ми використовували логічну операцію «або». Умови можуть бути значно складніше по своїй структурі.

Додати коментар

Loading