Energy
education

сайт для тех, кто хочет изучать энергетику

8. Принятие решений

Структура принятия решений требует чтобы программист определил одно или несколько условий для вычисления или проверки программой, вместе с выражением или выражениями, которые будут выполняться, если условие определено как истина (true), и возможно, другие выражения которые будут выполняться, если условие определено как ложь (false).

Ниже приведена общая форма типичной структуры принятия решений в большинстве языков программирования:

Decision making statements in C#

C# предусматривает следующие типы выражений для принятия решения.

ВыражениеОписание
Оператор ifОператор if содержит логическое выражение за которым следует один или более операторов.
Оператор if...elseОператор if может сопровождаться дополнительным оператором else, которое выполняется, когда логическое выражение ложно.
Вложенный оператор ifВы можете использовать один оператор if или else if внутри другого оператора if или else if.
Оператор switchОператор switch позволяет проверять переменную на соответствие списку значений.
Вложенный оператор switchВы можете использовать один оператор swicth внутри другого оператора switch.

Оператор if

Оператор if содержит логическое выражение за которым следует один или более операторов.

Синтаксис выражения if в C#:

    
if(boolean_expression)
{
   /* операторы будут выполняться, если логическое выражение истинно */
}
    

Если логическое выражение имеет значение true, тогда блок кода внутри выражения if будет выполнен. Если логическое выражение имеет значение false, тогда первый оператор после окончания условного оператора (после закрывающей фигурной скобки), будет выполнен.

Схема последовательных операций:

C# if statement

Пример:

    
using System;
namespace DecisionMaking
{
    
    class Program
    {
        static void Main(string[] args)
        {
            /* определение локальной переменной */
            int a = 10;
            /* проверка логического условия использованного выражением if */
            if (a < 20)
            {
                /* если условие истинно вывести следующие */
                Console.WriteLine("a меньше чем 20");
            }
            Console.WriteLine("значение a : {0}", a);
            Console.ReadLine();
        }
    }
}
    

Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:

    
a меньше чем 20;
значение a : 10
    

Оператор if...else

Оператор if может сопровождаться дополнительным выражением else, которое выполняется, когда логическое выражение ложно.

Синтаксис выражения if...else в C#:

    
if(boolean_expression)
{
   /* операторы будут выполняться, если логическое выражение истинно */
}
else
{
  /* операторы будут выполняться, если логическое выражение ложно */
}
    

Если логическое выражение принимает значение true, тогда блок кода внутри if будет выполнен, иначе будет выполнен блок кода внутри else block.

Схема последовательных операций:

C# if...else statement

Пример:

    
using System;
namespace DecisionMaking
{
    
    class Program
    {
        static void Main(string[] args)
        {
            /* определение локальной переменной */
            int a = 100;
            /* проверка логического условия */
            if (a < 20)
            {
                /* если условие истинно вывести следующие */
                Console.WriteLine("a меньше чем 20");
            }
            else
            {
                /* если условие ложно вывести следующие */
                Console.WriteLine("a не меньше чем 20");
            }
            Console.WriteLine("значение a : {0}", a);
            Console.ReadLine();
        }
    }
}
    

Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:

    
a не меньше чем 20;
значение a : 100
    

Оператор if...else if...else

Оператор ifможет сопровождаться дополнительным выражением else if...else, которое очень полезно для тестирования различных условий с использованием одного выражения if...else if.

Когда используется оператор if , else if , else нужно иметь ввиду несколько моментов:

  • if может иметь или не иметь else и он должен идти после всех else if.
  • if может иметь сколько угодно else if и они должны идти до else.
  • Когда else if выполнен, не один из оставшихся else if или else не будет проверяться.

Синтаксис выражения if...else if...else в C#:

    
if(boolean_expression 1)
{
   /* выполняется когда логическое выражение 1 верно */
}
else if( boolean_expression 2)
{
   /* выполняется когда логическое выражение 2 верно */
}
else if( boolean_expression 3)
{
   /* выполняется когда логическое выражение 3 верно */
}
else 
{
   /* выполняется когда ни одно из логических выражений не верно */
}
    

Пример:

    
using System;
namespace DecisionMaking
{
    
    class Program
    {
        static void Main(string[] args)
        {
            /* определение локальной переменной */
            int a = 100;
            /* проверка логического условия */
            if (a == 10)
            {
                /* если условие истинно вывести следующие */
                Console.WriteLine("Значение a = 10");
            }
            else if (a == 20)
            {
                /* если условие else if истинно */
                Console.WriteLine("Значение a = 20");
            }
            else if (a == 30)
            {
                /* если условие else if истинно  */
                Console.WriteLine("Значение a = 30");
            }
            else
            {
                /* если не одно условие не выполнилось */
                Console.WriteLine("Ни одно из значений не совпало");
            }
            Console.WriteLine("Точное значение a : {0}", a);
            Console.ReadLine();
        }
    }
}
    

Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:

    
Ни одно из значений не совпало
Точное значение a : 100
    

Вложенный оператор if

Всегда можно в C# вложить оператор if-else, что означает, что вы можете использовать один оператор if или else if внутри другого оператора if или else if.

Синтаксис для вложенного оператора if следующий:

    
if( boolean_expression 1)
{
   /* выполняется когда логическое выражение 1 верно */
   if(boolean_expression 2)
   {
      /* выполняется когда логическое выражение 2 верно */
   }
}
    

Вы можете вкладывать оператор else if...else также как и оператор if.

Пример:

    
using System;
namespace DecisionMaking
{
    
    class Program
    {
        static void Main(string[] args)
        {
            //* определение локальной переменной */
            int a = 100;
            int b = 200;
            /* проверка логического условия */
            if (a == 100)
            {
                /* если условие истинно вывести следующие */
                if (b == 200)
                {
                    /* если условие истинно вывести следующие */
                    Console.WriteLine("Значение a = 100 и b = 200");
                }
            }
            Console.WriteLine("Точное значение a : {0}", a);
            Console.WriteLine("Точное значение b : {0}", b);
            Console.ReadLine();
        }
    }
}
    

Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:

    
Значение a = 100 и b = 200
Точное значение a : 100
Точное значение b : 200
    

Оператор switch

Оператор switch позволяет проверять переменную на соответствие списку значений. Каждое значение называется случай (case), и переменная проверяется для каждого случая switch.

Синтаксис для выражения switch в C# следующий:

    
switch(expression){
    case constant-expression  :
       statement(s);
       break; /* необязательно */
    case constant-expression  :
       statement(s);
       break; /* необязательно */
  
    /* вы можете иметь любое количество выражения для проверки */
    default : /* необязательно */
       statement(s);
}
    

Следующие правила применяются к выражениям switch:

  • Выражения используемые в выражении switch должны быть целыми или перечислимого типа, либо такого класса, в котором класс имеет функцию преобразования в целое или перечислимый тип.
  • Вы можете иметь любое количество выражений внутри switch. Каждый случай следует перед значением, которое будет сравниваться и двоеточием.
  • Выражение для условия должно быть того же типа, что и переменная в switch, и оно должно быть константой или литералом.
  • Когда переменная будет равнться выражению в условии, операторы после условия будут выполняться пока не достигнут оператора break.
  • Когда оператор break будет достигнут, switch прекратит работу, и передаст управление следующему оператору после выражения switch.
  • Не каждый case нуждается в break. Если break не записан, управление передастся следующему случаю пока break не будет достигнут.
  • Оператор switch может иметь необязательный случай по умолчанию default, который должен дыть записан в конце switch. Случай по умолчанию может быть использован для выполнения действий в случае когда не одно условеи не было выполнено. Для случая по умолчанию break не нужен.

Схема последовательных операций:

switch statement in C#

Пример:

    
using System;
namespace DecisionMaking
{
    
    class Program
    {
        static void Main(string[] args)
        {
            /* определение локальной переменной */
            char grade = 'B';
            switch (grade)
            {
                case 'A':
                    Console.WriteLine("Отлично!");
                    break;
                case 'B':
                case 'C':
                    Console.WriteLine("Хорошо");
                    break;
                case 'D':
                    Console.WriteLine("Удовлетворительно");
                    break;
                case 'F':
                    Console.WriteLine("Лучше попробуй снова");
                    break;
                default:
                    Console.WriteLine("Неправильная оценка");
                    break;
            }
            Console.WriteLine("Ваша оценка  {0}", grade);
            Console.ReadLine();
        }
    }
}
    

Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:

    
Хорошо
Ваша оценка B
    

Вложенный оператор switch

Возможно использование оператора switch как часть другого оператора switch. Даже если условия в обоих случаях одинаковые это не вызовет ошибки.

Синтаксис для вложенного оператора switch следующий:

    
switch(ch1) 
{
   case 'A': 
      printf("Эта A часть внешнего switch" );
      switch(ch2) 
      {
         case 'A':
            printf("Эта A часть внутреннего switch" );
            break;
         case 'B': /* внутренный случай B */
      }
      break;
   case 'B': /* внешний случай B */
}
    

Пример:

    
using System;
namespace DecisionMaking
{
    
    class Program
    {
        static void Main(string[] args)
        {
            int a = 100;
            int b = 200;
            switch (a)
            {
                case 100:
                    Console.WriteLine("Это часть внешнего switch");
                    switch (b)
                    {
                        case 200:
                        Console.WriteLine("Это часть внутреннего switch");
                        break;
                    }
                    break;
            }
            Console.WriteLine("Точное значение a : {0}", a);
            Console.WriteLine("Точное значение b : {0}", b);
            Console.ReadLine();
        }
    }
}
    

Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:

    
Это часть внешнего switch
Это часть внутреннего switch
Точное значение a : 100
Точное значение b : 200
    

Оператор ? : :

Оператор ? : может заменить оператор if...else. Обшая форма для оператора следующая:

    
Exp1 ? Exp2 : Exp3;
    

Где Exp1, Exp2, и Exp3 - выражения.

Значение выражения ? определяется когда выражение Exp1 вычисляется. Если значение вычисленого выражения true, тогда выражение Exp2 вычисляется и становиться значеним всего выражения ?. Если значение выражения Exp1 false, тогда вычисляется выражение Exp3 и уже оно становиться значением всего выражения.