Energy
education

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

9. Циклы

Возможна такая ситуация когда вам нужно выполнить блок кода несколько раз. В общем случае выражения выполняются последовательно: первое выражение выполняется первым, второе - вторым и т.д.

Языки программирования предоставляют различные возможности для создания более сложных структур исполнения выражений.

Выражения цикла позволяют выполнять выражения или группы выражений множество раз и имеют схожую структуру в большинстве языков программирования:

Loop Architecture

C# поддерживает следующие типы циклов.

Тип циклаОписание
цикл whileПовторяет оператор или группу операторов пока заданое условие условие истина (true). Проверка условия происходит перед выполнением тела цикла.
цикл forВыполняет последовательность операторов множество раз и сокращяет код, который необходим для управления переменной цикла.
цикл do...whileПохож на оператор while, за исключением того, что он проверяет условие после выполнения тела цикла.
вложенные loopsВы можете использовать один или несколько циклов внутри любого другого цикла while, for or do..while.

Цикл while

Оператор цикла while в C# многократно выполняет оперторы в теле цикла пока заданое условие истина (true).

Синтаксис цикла while в C#:

    
while(condition)
{
   statement(s);
}
    

Здесь statement(s) может быть одиночным оператором или блоком операторов, сondition может быть любым условием. Цикл прдолжает повторяться пока условие истина.

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

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

while loop in C#

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

Пример:

    
using System;
namespace Loops
{
    
    class Program
    {
        static void Main(string[] args)
        {
            /* определение локальной переменной */
            int a = 10;
            /* запуск цикла while */
            while (a < 20)
            {
                Console.WriteLine("значение a: {0}", a);
                a++;
            }
            Console.ReadLine();
        }
    }
}
    

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

    
значение a: 10
значение a: 11
значение a: 12
значение a: 13
значение a: 14
значение a: 15
значение a: 16
значение a: 17
значение a: 18
значение a: 19
    

Цикл for

Цикл for является структурой повторного управления, которая позволяет эффективно написать цикл, который нужно выполнить определенное количество раз.

Синтаксис цикла for в C#:

    
for ( init; condition; increment )
{
   statement(s);
}
    

Вот процесс управления в цикле for:

  1. Шаг init будет выполнен первым, и только один раз. Этот шаг позволяет определить и инициализировать любые переменные управления циклом.
  2. Следующим выполняется шаг condition. Если результат выполнения истина (true), будет выполнено тело цикла. Если результат - ложь (false), тело цикла выполняться не будет и управление передастся следующему оператору после цикла.
  3. После того, как операторы в теле цикла for будут выполнены, управление перейдет шагу оператора increment. Этот оператор позволяет изменять любые переменные управления циклом. Этот оператор может оставаться пустым, но требует присутствия точки с запятой после условия.
  4. Условие выполняется заново. Если If iрезультат выполнение истина, цикл запускается и процесс повторяется (тело цикла, затем шаг увеличения, и затем опять условие). После того как условие станет равным лжи, цикл останавливается.

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

for loop in C#

Пример:

    
using System;
namespace Loops
{
    
    class Program
    {
        static void Main(string[] args)
        {
            /* запуск цикла for */
            for (int a = 10; a < 20; a = a + 1)
            {
                Console.WriteLine("значение a: {0}", a);
            }
            Console.ReadLine();
        }
    }
}
    

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

    
значение a: 10
значение a: 11
значение a: 12
значение a: 13
значение a: 14
значение a: 15
значение a: 16
значение a: 17
значение a: 18
значение a: 19
    

цикл do...while

В отличие от циклов for и while, которые проверяют условия цикла вверху цикла, цикл do...while проверяет условие внизу цикла.

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

Синтаксис цикла do...while в C#:

    
do
{
   statement(s);
}while( condition );
    

Следует отметить, что условие находиться в конце цикла, и операторы statement(s) в цикле выполняются впервые перед проверкой цикла.

Если результат выполнения условия истина (true), управление передастся назад к do, и операторы statement(s) в цикле будут выполнены снова. Этот процесс повторяется до тех пор, пока результат выполнения условия не станет ложью (false).

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

do...while loop in C#

Пример:

    
using System;
namespace Loops
{
    
    class Program
    {
        static void Main(string[] args)
        {
            /* определение локальной переменной */
            int a = 10;
            /* запуск цикла do */
            do
            {
               Console.WriteLine("значение a: {0}", a);
                a = a + 1;
            } while (a < 20);
            Console.ReadLine();
        }
    }
} 
    

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

    
значение a: 10
значение a: 11
значение a: 12
значение a: 13
значение a: 14
значение a: 15
значение a: 16
значение a: 17
значение a: 18
значение a: 19
    

Вложенные циклы

C# позволяет использовать оди цикл внутри другого. Ниже показаны несколько примеров иллюстрирующих данную технологию.

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

    
for ( init; condition; increment )
{
   for ( init; condition; increment )
   {
      statement(s);
   }
   statement(s);
}
    

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

    
while(condition)
{
   while(condition)
   {
      statement(s);
   }
   statement(s);
}
    

Синтаксис для оператора вложенного цикла do...while в C# следующий:

    
do
{
   statement(s);
   do
   {
      statement(s);
   }while( condition );
}while( condition );
    

И последние, вы можете вложить любой тип цикла в любой тип цикла по желанию. Например цикл for может быть вложен в цикл while или наоборот.

Пример:

Данная программа использует вложенный цикл for для нахождения простых чисел от 2 до 100:

    
using System;
namespace Loops
{
    
   class Program
   {
      static void Main(string[] args)
      {
         /* определение локальной переменной */
         int i, j;
         for (i = 2; i < 100; i++)
         {
            for (j = 2; j <= (i / j); j++)
               if ((i % j) == 0) break; // если условие верно - не простое
            if (j > (i / j)) 
               Console.WriteLine("{0} простое число", i);
         }
         Console.ReadLine();
      }
   }
} 
    

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

    
2 простое число
3 простое число
5 простое число
7 простое число
11 простое число
13 простое число
17 простое число
19 простое число
23 простое число
29 простое число
31 простое число
37 простое число
41 простое число
43 простое число
47 простое число
53 простое число
59 простое число
61 простое число
67 простое число
71 простое число
73 простое число
79 простое число
83 простое число
89 простое число
97 простое число
    

Операторы управления циклом:

Операторы управления циклом меняют последовательность исполнения операторов в теле цикла.

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

Оператор управленияОписание
Оператор breakОстанавливает оператор цикла или switch и передает управление оператору располеженному сразу после оператора цикла или switch.
Оператор continueСообщает циклу о необходимости пропустить оставшиюся часть тела цикла и перепроверить условие цикла для выбора дальнейшего действия.

Оператор break

Оператор break в C# используется в двух случаях:

  1. Когда оператор break помещен в цикл, и останавливает его выполнение.
  2. Оператор может использоваться для прерывания выполнения оператора case в операторе switch.

Если используются вложенные циклы ( т.е. один цикл внутри другого цикла), оператор break остановит выполнение только вложенного цикла.

Синтаксис для оператора break в C# следующий:

    
break;
    

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

c# break statement

Пример:

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

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

    
значение a: 10
значение a: 11
значение a: 12
значение a: 13
значение a: 14
значение a: 15
    

Оператор continue

Оператор continue в C# работает примерно как оператор break. Вместо принудительной остановки, оператор continue принудительно запускает следующую итерацию цикла, пропуская операторы в теле цикла после оператора continue.

Для цикла for, оператор continue инициирует проверку условия с изменением управляюших переменных. Для циклов while и do...while, оператор continue инициирует пропуск кода до проверки цикла.

Синтаксис оператора continue в C# следующий:

    
continue;
    

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

C# continue statement

Пример:

    
using System;
namespace Loops
{
    
    class Program
    {
        static void Main(string[] args)
        {
            /* определение локальной переменной */
            int a = 10;
            /* запуск цикла do */
            do
            {
                if (a == 15)
                {
                    /* пропуск итерации */
                    a = a + 1;
                    continue;
                }
                Console.WriteLine("значение a: {0}", a);
                a++;
            } while (a < 20);
 
            Console.ReadLine();
        }
    }
}
    

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

    
значение a: 10
значение a: 11
значение a: 12
значение a: 13
значение a: 14
значение a: 16
значение a: 17
значение a: 18
значение a: 19
    

Бесконечный цикл:

Цикл становиться бесконечным циклом если условие никогда не станет ложным (false).

Пример:

    
using System;
namespace Loops
{
    
    class Program
    {
        static void Main(string[] args)
        {
            for (; ; )
            {
                Console.WriteLine("Эй! Я в ловушке.");
            }
 
        }
    }
}
    

или

    
using System;
namespace Loops
{
    
    class Program
    {
        static void Main(string[] args)
        {
            while(true)
            {
                Console.WriteLine("Эй! Я в ловушке.");
            }
 
        }
    }
}