Что мы делаем ежедневно? Думаю, у каждого из нас свой список дел. Однако раз за разом повторяются одни и те же операции для достижения одних и тех же целей. Это и есть цикл. В программировании циклы используются при обработке множеств / файлов или же для вычисления математических выражений.

Цикл разработки проекта / Цикл разработки программного продукта

Выделяют несколько видов циклов:

  • while … do (с предусловием );
  • do … while (с постусловием);
  • for (с параметром)

Цикл с параметром (цикл for)

Может использоваться в ситуациях, когда до входа в цикл известно количество итераций (повторений цикла). Имеет следующий вид:

for(<инициализация>; <условие>; <порядок выполнения>) 
{
    <действия>
}
  1. Инициализация — установка начальных параметров счетчика;
  2. Условие — условие выхода из цикла, как только оно вернет ложь — произойдет выход из цикла;
  3. Порядок выполнения — команда увеличения счетчика.

Действия, выполняемые циклически, называются телом цикла. Рассмотрим наиболее общий пример: поиск факториала числа. Факториал числа вычисляется по формуле:

N = 1 * 2 * 3 * ... * N

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

int n = Convert.ToInt32(Console.ReadLine()); // Пользователь вводит число.
int factorial = 1; 
for(int i = 2; i <= n; i++) // Вычисление факториала.
{
    factorial *= i; 
}

Console.WriteLine(factorial); // Выводим факториал пользователю.

Итак, пользователь вводит любое число. После чего, мы вычисляем факториал по вышеуказанной формуле. Начальное значение факториала необходимо установить в единицу. Цикл начинаем с двойки и повторяем до тех пор, пока счетчик меньше или равен введенному пользователем значению. Если использовать оператор «меньше», мы потеряем умножение на старшее число при вычислении факториала. Порядок выполнения указан как i++, это значит, что на каждой итерации цикла счетчик i увеличивается на единицу. В виде порядка управления может выступать и более сложная математическая формула.

Цикл while (цикл с предусловием)

В данном случае действия цикла повторяются до тех пор, пока выполняется указанное условие. Этот цикл функционирует по принципу: «Сперва думаем, после делаем». В общем виде выглядит так:

while(<Условие>)
{
    <Действия>
}

Рассмотрим пример вычисления факториала при помощи while.

int n = Convert.ToInt32(Console.ReadLine()); // Пользователь вводит число.
int factorial = 1; 
int i = 2; 
while(i <= n) // Вычисление факториала.
{
    factorial *= i; 
    i++; // Увеличиваем счетчик.
}

Console.WriteLine(factorial); // Выводим факториал пользователю.

Чтобы не получить бесконечного цикла, необходимо изменять параметр, проверяемый в условии. Именно для этого мы увеличиваем i.

Цикл do…while (цикл с постусловием)

Этот вид цикла подобен while, с той лишь разницей, что проверка условия производится после выполнения тела цикла.

do
{
    <Действия>
} while(<Условие>);

И снова рассмотрим вычисление факториала.

int n = Convert.ToInt32(Console.ReadLine()); // Пользователь вводит число.
int factorial = 1; 
int i = 2; 
do // Вычисление факториала.
{
factorial *= i; 
i++; // Увеличиваем счетчик.
} while(i <= n);

Console.WriteLine(factorial); // Выводим факториал пользователю.

Цикл foreach

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

foreach(var <Элемент массива> in <Массив>)
{
    <Действия>
}

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

var sym = Console.ReadKey(); // Читаем символ с клавиатуры 
var cities = {"Москва", "Казань", "Петергоф", "Пермь", "Минск", "Сан-Диего", "Вызима"}; 
var founded = ""; // Найденные города. 
foreach(var city in cities) 
{
    if(city.StartsWith(sym))
    {
        founded += city + " ";
    }
}

Console.WriteLine(founded);

Пользователь вводит символ, после чего для каждого элемента массива проверяется, начинается ли он с заданного символа. И, если условие выполняется, элемент массива запоминается в результирующей строке. Главным плюсом foreach является то, что он исключает возможность выхода за границы массива.

Управление циклом. Команды break и countinue

Для управления циклом в языке C# используются два оператора: break и continue.

Оператор break используется для прерывания выполнения цикла. Пусть, нам нужно найти некоторый элемент в массиве. Так, используя цикл, мы можем выйти из цикла, как только найдем искомый элемент.

int index = 0; 
var wanted = Console.ReadLine(); 
var array; 

for(int i = 0; i < array.Length; i++)
{
    if(array[i] == wanted) 
    {
        index = i; 
        break; 
    }
}

Так мы находим индекс искомого слова в массиве, при этом не выполняем лишних операций после того, как найдем искомый элемент.

Оператор continue используется для перехода к следующей итерации цикла. Рассмотрим задачу: необходимо вычислить сумму пяти частных вида:

1 / (i - a)

Как вы видите, при i = a будет получена ошибка «Деление на ноль». В данном случае мы можем пропускать значение счетчика, которое приводит к ошибке.

var sum = 0;
for(int i = 0; i < n; i++) 
{
    if (i - a == 0)
    {
        continue; 
    }

    sum+= 1 / (i - a);
}

Вот мы и рассмотрели основы работы с циклами в C#. Удачных вам экспериментов, коллеги.

Рекомендую также изучить статью Логические операции и условные операторы C#

P.S. Присоединяйся в любой удобной для тебя социальной сети. Для меня очень важно оставаться с тобой на связи, ведь у меня есть еще много полезной информации о программировании для тебя, которой я хочу с тобой поделиться.

Вконтакте
Facebook
Telegram
Twitter
Одноклассники
Дзен
Google+

 
×
%d такие блоггеры, как: