Оператор цикла do-while

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

Оператор while::=

do

<Тело цикла>

while (<Условие цикла>)

 

где:

<Условие цикла>::= <Логическое выражение>

<Тело цикла> ::= <Оператор>;

::= <Составной оператор>;

Выбор между циклом while и do-while зависит от конкретной вычислительной задачи. В большинстве случаев, вполне подходит цикл со входным условием while. Например, если цикл используется для прохождения по списку чисел (или любых других объектов), сле­дует учесть, что список может быть и пустым. В этом случае цикл не должен исполнять­ся ни разу. Применение цикла do-while в такой ситуации дает ошибочный код.

Хотя цикл do-while используется не так часто, как while, он хорошо подходит для решения определенных вычислительных задач. Одна из таких задач связана с тем бло­ком программы, который постоянно запрашивает, получает, обрабатывает и выводит информацию, введенную пользователем. Часто ввод обрабатывается в цикле. В этом случае он должен быть получен до использования. Другими словами, тело цикла, где обрабатывается ввод, должно исполниться хотя бы один раз до проверки его условия. Именно по такой схеме и работает цикл с выходным условием do-while.

Задание. Напишите программу калькулятор с использованием меню, которое по окончании работы запрашивала бы продолжать или нет. Если продолжать, то вновь происходит запрос на введение чисел, если нет, то программа выводит сообщение «Завершение работы». В качестве основы используйте программу калькулятор с оператором switch. Программа должна хотя бы раз сработать.

using System;

 

class class1

{

public static void Main()

{

int a=0, b=0;

double c=0;

bool exit=false;

string operation;

do

{

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

a=Convert.ToInt32(Console.ReadLine());

b=Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Введите операцию: сумма, разность, произведение, частное.");

operation = Console.ReadLine();

 

switch(operation)

{

case "сумма":

{

c=a+b;

Console.WriteLine("Сумма чисел {0} и {1} равна {2}",a,b,c);

break;

}

case "разность":

{

c=a-b;

Console.WriteLine("Разность чисел {0} и {1} равна {2}",a,b,c);

break;

}

case "произведение":

{

c=a*b;

Console.WriteLine("Произведение чисел {0} и {1} равна {2}",a,b,c);

break;

}

case "частное":

{

c=a/b;

Console.WriteLine("Частное чисел {0} и {1} равна {2}",a,b,c);

break;

}

default:

{

Console.WriteLine("Ошибка ввода");

break;

}

}

Console.WriteLine("Вы хотите завершить программу: да, нет");

string q = Console.ReadLine();

if (q=="да")

exit=true;

} while(exit==false);

Console.ReadLine();

}

}