Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб4_C#_112.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
246.33 Кб
Скачать

Лабораторная работа № 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 – деление на ноль.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]