- •Цикл с постусловием (цикл do … while)
- •Вложенные циклы
- •Обработка исключений. Оператор try-catch
- •Практическая часть
- •Задания для самостоятельной работы
- •1. Используя цикл с условием, составить программу для решения следующей задачи:
- •2. Используя цикл с условием, составить программу для решения следующей задачи:
- •3. Используя вложенные циклы, составить программу для решения следующей задачи:
Лабораторная работа № 4
Программирование циклических алгоритмов
Теоретическая часть
Цикл с предусловием (цикл while)
Циклом с предусловием называется такой цикл, в котором истинность условия проверяется каждый раз перед выполнением операторов тела цикла.
Синтаксис цикла с предусловием в С#:
while (условие)
оператор_тела_цикла; // тело цикла
Понятно, что цикл с предусловием может не выполниться ни одного раза, если условие будет ложным на первом же шаге цикла.
Обратите внимание, что условие обязано стоять в скобках, так же, как для оператора if. Если операторов тела цикла несколько, нужно ставить их в операторные скобки {...}.
Цикл while выполняется до тех пор, пока истинно (не равно нулю) условие. Таким образом, в следующем фрагменте:
int a=0;
while (a<10) a++; // цикл №1
while (a>10) a--; // цикл №2
while (a<10) a=0; // цикл №3
цикл № 1 выполнится 10 раз, цикл № 2 ни одного раза, а цикл № 3 будет выполняться бесконечное количество раз.
Бесконечным или вечным циклом (зацикливанием) называется цикл, число шагов которого не ограничивается условием.
В случае цикла с предусловием зацикливание может выглядеть так:
while (1) оператор;
Вечный цикл – не обязательно программистская ошибка. Иногда его вставляют в программу специально, хотя это не лучшая практика – снижается читабельность и надежность.
Естественно, в этом случае нужно предусмотреть выход внутри тела цикла.
Цикл с постусловием (цикл do … while)
Циклом с постусловием называется цикл, в котором истинность условия проверяется каждый раз после выполнения тела цикла.
В языке С# синтаксис цикла с постусловием таков:
do
оператор_тела_цикла; // тело цикла
while (условие);
Как и для цикла while, условие обязательно ставится в скобки, а если в теле цикла несколько операторов, мы заключаем их в операторные скобки {...}.
Даже если условие сразу окажется ложным, тело цикла мы выполняем еще до его проверки, значит, цикл с постусловием обязательно выполнится хотя бы один раз.
Как цикл с предусловием, цикл do...while выполняется до тех пор, пока условие остается истинным. Таким образом, в следующем фрагменте:
int a=0;
do a++; while (a<10); // цикл №1
do a--; while (a>10); // цикл №2
do a=0; while (a<10); // цикл №3
В этом примере цикл №1 выполнится 10 раз, цикл №2 – один раз (!), а цикл №3 – бесконечное количество раз.
Вложенные циклы
Циклы можно вкладывать друг в друга, при этом на разных уровнях могут использоваться циклы разных типов. Для вывода таблиц, обработки значений функции двух переменных используются двойные циклы.
Циклы закрываются по "принципу матрешки": первый цикл закрывается последним. Вот так:
while (...)
{ // while-начало
for (...)
{ // for-начало
} // for-конец
} // while-конец
Обработка исключений. Оператор try-catch
В предыдущих лабораторных работах, в некоторых программах мы не учитывали непредвиденные ситуации, которые могут приводить к ошибкам. Например, когда нам необходимо было ввести число. Если вместо числа мы ввели бы строку, то при конвертации этой строки в численный тип программа бы аварийно завершила работу, и мы получили бы ошибку.
Такие ошибки и другие непредвиденные ситуации в С# называются исключениями.
Обработка исключений – это описание реакции программы на подобные события (исключения) во время выполнения программы. Реакцией программы может быть корректное завершение работы программы, вывод информации об ошибке и запрос повторения действия (при вводе данных).
Примерами исключений может быть:
- деление на ноль;
- конвертация некорректных данных из одного типа в другой;
- попытка открыть файл, которого не существует;
- доступ к элементу вне рамок массива;
- исчерпывание памяти программы;
- другое.
Для обработки исключений в С# используется оператор try-catch. Он имеет следующую структуру:
try
{
//блок кода, в котором возможно исключение
}
catch ([тип исключения] [имя])
{
//блок кода – обработка исключения
}
Работает это все очень просто. Выполняется код в блоке try, и если в нем происходит исключение типа, соответствующего типу, указанному в catch, то управление передается блоку catch. При этом весь оставшийся код от момента выбрасывания исключения до конца блока try не будет выполнен. После выполнения блока catch, оператор try-catch завершает работу.
Если тип выброшенного исключения не будет соответствовать типу, указанному в catch – исключение не обработается, и программа завершит работу аварийно.
Одному блоку try может соответствовать несколько блоков catch.
Ниже приведены некоторые из часто встречаемых типов исключений.
Exception – базовый тип всех исключений. Блок catch, в котором указан тип Exception будет «ловить» все исключения.
FormatException – некорректный формат операнда или аргумента (при передаче в метод).
NullReferenceException - в экземпляре объекта не задана ссылка на объект, объект не создан.
IndexOutOfRangeException – индекс вне рамок коллекции.
FileNotFoundException – файл не найден.
DivideByZeroException – деление на ноль.
