Оператор while используется в том случае, когда количество итераций заранее неизвестно. Существуют две формы оператора: префиксная и постфиксная. В префиксной форме его синтаксис таков:
while (<Условие>)
<Тело_цикла>
Здесь <while> — зарезервированное слово; <Выражение> — выражение типа bool; <Тело_цикла> — произвольный оператор или блок операторов.
Постфиксная форма:
do
<Тело_цикла>
while (<Условие>)
Таким образом, в префиксной форме сначала проверятся истинность условия и только после этого выполняется тело цикла, а в постфиксной сначала выполняется тело цикла и лишь потом проверяется условие: если оно истинно тело цикла выполняется заново. В префиксной форме тело цикла может не выполниться ни разу, в то время как в постфиксной оно будет выполнено хотя бы один раз.
Очевидно, что в операторе while проверяемое условие должно изменяться в теле цикла, в противном случае цикл никогда не завершится естественным образом, и программа «зациклится».
В листинге 7.2 приводится пример, демонстрирующий обе формы оператора (файл Ch07\DemoWhile\Program.cs). Во внешнем цикле с постпроверкой формируется диалог с пользователем, во внутреннем используется префиксная форма для определения все того же палиндрома (см. ранее раздел «Оператор for»). В программу внесено небольшое усовершенствование. Фраза «А роза упала на лапу Азора» в предыдущем варианте программы не распознавалась как палиндром, так как в ней есть различие в регистрах символов и присутствуют несимметричные пробелы. Поэтому в новом варианте программы введенная строка преобразуется к верхнему регистру и из нее удаляются все пробелы.
Листинг 7.2. Анализ палиндрома с предварительным преобразованием строки
public static void Main()
{
string answer, text;
do
{
Console.WriteLine("Введите текст:");
text = Console.ReadLine();
text = text.ToUpper(); // Преобразуем регистр символов
while (text.IndexOf(' ') > 0) // Удаляем пробелы
text = text.Remove(text.IndexOf(' '), 1);
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");
}
0 коммент.:
Отправить комментарий