Циклы While

 

Цикл while (выражение) является универсальным видом цикла, включаемым во все языки программирования. Тело цикла выполняется до тех пор, пока остается истинным выражение while. В языке C# у этого вида цикла две модификации - с проверкой условия в начале и в конце цикла. Первая модификация имеет следующий синтаксис:

 

while(выражение) оператор

 

Эта модификация соответствует стратегии: "сначала проверь, а потом делай". В результате проверки может оказаться, что и делать ничего не нужно. Тело такого цикла может ни разу не выполняться. Конечно же, возможно и зацикливание. В нормальной ситуации каждое выполнение тела цикла - это очередной шаг к завершению цикла.

 

Цикл, проверяющий условие завершения в конце, соответствует стратегии: "сначала делай, а потом проверь". Тело такого цикла выполняется, по меньшей мере, один раз. Вот синтаксис этой модификации:

 

do

оператор

while(выражение);

 

Рассмотрим пример, в котором участвуют обе модификации цикла while. Во внешнем цикле проверка выполняется в конце, во внутреннем - в начале. Внешний цикл представляет собой типичный образец организации учебных программ, когда в диалоге с пользователем многократно решается некоторая задача. На каждом шаге пользователь вводит новые данные, решает задачу и анализирует полученные данные. В его власти, продолжить вычисления или нет, но хотя бы один раз решить задачу ему приходится. Внутренний цикл do while используется для решения уже известной задачи с палиндромами. Вот текст соответствующей процедуры:

 

/// <summary>

/// Два цикла: с проверкой в конце и в начале.

/// Внешний цикл - образец многократно решаемой задачи.

/// Завершение цикла определяется в диалоге

/// с пользователем.

/// </summary>

public void Loop()

{

string answer, text;

do

{

Console.WriteLine("Введите слово");

text = Console.ReadLine();

int i =0, j = text.Length-1;

while ((i<j) && (text[i] == text[j]))

{i++; j--;}

if (text[i] == text[j])

Console.WriteLine(text +" - это палиндром!");

else

Console.WriteLine(text +" - это не палиндром!");

Console.WriteLine("Продолжим? (yes/no)");

answer = Console.ReadLine();

}

while(answer =="yes");

}//Loop