5.6. Операторы цикла5.6.1. Цикл forОператор цикла for обобщает известную конструкцию цикла типа арифметической прогрессии. Его синтаксис: for (инициализаторы; условие; список_выражений) оператор Оператор, стоящий после закрывающей скобки, задает тело цикла. В большинстве случаев телом цикла является блок. Инициализаторы задают начальное значение одной или нескольких переменных, часто называемых счетчиками или просто переменными цикла. Условие задает условие окончания цикла, соответствующее выражение при вычислении должно получать значение true или false. Список выражений, записанный через запятую, показывает, как меняются счетчики цикла на каждом шаге выполнения. Если условие цикла истинно, то выполняется тело цикла, затем изменяются значения счетчиков и снова проверяется условие. Как только условие становится ложным, цикл завершает свою работу. В нормальной ситуации тело цикла выполняется конечное число раз. Счетчики цикла зачастую объявляются непосредственно в инициализаторе и соответственно являются переменными, локализованными в цикле. В тех случаях, когда предусматривается возможность преждевременного завершения цикла с помощью одного из операторов перехода, счетчики объявляются до цикла, что позволяет анализировать их значения при выходе из цикла. В качестве примера рассмотрим классическую задачу: является ли строка текста палиндромом. Для ее решения цикл for подходит наилучшим образом. Здесь используются два счетчика - один возрастающий, другой убывающий. Вот текст соответствующей процедуры: /// <summary> 5.6.2. Циклы WhileЦикл while (выражение) является универсальным видом цикла, включаемым во все языки программирования. Тело цикла выполняется до тех пор, пока остается истинным выражение while. В языке C# у этого вида цикла две модификации - с проверкой условия в начале и в конце цикла. Первая модификация имеет следующий синтаксис: while(выражение) оператор Эта модификация соответствует циклу с предусловием. Тело такого цикла может ни разу не выполняться. В нормальной ситуации каждое выполнение тела цикла - это очередной шаг к завершению цикла. Цикл, проверяющий условие завершения в конце, соответствует циклу с постусловием. Тело такого цикла выполняется, по меньшей мере, один раз. Вот синтаксис этой модификации: do Приведем пример, в котором участвуют обе модификации цикла while. Во внешнем цикле проверка выполняется в конце, а во внутреннем - в начале. Внешний цикл представляет собой типичный образец организации учебных программ, когда в диалоге с пользователем многократно решается некоторая задача. На каждом шаге пользователь вводит новые данные, решает задачу и анализирует полученные данные. В его власти, продолжить вычисления или нет, но хотя бы один раз решить задачу ему приходится. Внутренний цикл do while используется для решения уже известной задачи с палиндромами. Вот текст соответствующей процедуры: /// <summary> 5.6.3. Цикл forEachНовым видом цикла, не унаследованным от С++, является цикл foreach, удобный при работе с массивами, коллекциями и другими подобными контейнерами данных. Его синтаксис: foreach (тип идентификатор in контейнер) оператор Цикл работает в полном соответствии со своим названием - тело цикла выполняется для каждого элемента в контейнере. Тип идентификатора должен быть согласован с типом элементов, хранящихся в контейнере данных. Предполагается также, что элементы контейнера (массива, коллекции) упорядочены. На каждом шаге цикла идентификатор, задающий текущий элемент контейнера, получает значение очередного элемента в соответствии с порядком, установленным на элементах контейнера. С этим текущим элементом и выполняется тело цикла - выполняется столько раз, сколько элементов находится в контейнере. Цикл заканчивается, когда полностью перебраны все элементы контейнера. Серьезным недостатком циклов foreach в языке C# является то, что цикл работает только на чтение, но не на запись элементов. Так что наполнять контейнер элементами приходится с помощью других операторов цикла. В приведенном ниже примере показана работа с трехмерным массивом. Массив создается с использованием циклов типа for, а при нахождении суммы его элементов, минимального и максимального значения используется цикл foreach: /// <summary>
|