Лабораторная работа № 4 программирование циклических процессов
1 Цель и порядок работы
Цель работы - изучить операторы, используемые при организации циклических вычислительных процессов, получить практические навыки в составлении программ.
Порядок выполнения работы:
ознакомиться с описанием лабораторной работы;
получить задание у преподавателя по вариантам;
разработать схему алгоритма решения задачи;
написать программу, соответствующую схеме алгоритма;
ввести программу, отладить и выполнить ее на ЭВМ;
оформить отчет.
2 Общие сведения
2.1 Понятие цикла
С помощью уже рассмотренных к данному моменту операторов, можно реализовать в программе только структуры следования и ветвления, которые обеспечивают выполнение операторов, входящих в программу, не более одного раза. Поэтому ясно, что, используя только эти структуры, можно реализовать лишь небольшой процент алгоритмов. Возможностей этих операторов явно недостаточно для решения подавляющего большинства задач, связанных с организацией повторяющихся вычислений, обработкой массивов данных и т. д.
Для реализации подобных вычислений предназначены операторы циклов, которые задают повторяющееся выполнение одного или нескольких операторов (блока) и позволяют записать эти действия в компактной форме.
Цикл — одна из важнейших алгоритмических структур. Переменные, изменяющиеся в цикле, называются переменными цикла. Параметром цикла называется переменная, которая используется при проверке условия продолжения работы цикла и принудительно изменяется в теле цикла, очень часто на одну и ту же величину. Рассмотрим важнейшие концепции организации циклов.
Алгоритм циклической структуры в наиболее общем виде должен содержать:
подготовку цикла: задание начальных значений переменным цикла перед первым его выполнением;
тело цикла; действия, повторяемые в цикле для различных значений переменных цикла;
изменение значений переменных цикла при каждом новом его выполнении;
управление циклом: проверку условия продолжения работы цикла.
Один проход тела цикла называется итерацией. Если параметр цикла целочисленный, он называется счетчиком цикла.
Различают арифметические циклы, количество повторений которых можно определить заранее, и циклы с неизвестным числом повторений (итерационные циклы). В итерационном цикле условие продолжения работы цикла содержит переменные, значения которых изменяются в цикле по рекуррентным формулам. Рекуррентной называется формула, в которой новое значение переменной вычисляется с использованием ее предыдущего значения.
Передавать управление извне внутрь цикла запрещается (при этом возникает ошибка компиляции).
2.2 Операторы управления
Любой цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого используются специальные операторы, которые относятся к группе операторов, изменяющих естественный порядок выполнения вычислений.
В С# есть пять таких операторов:
- оператор безусловного перехода goto;
- оператор выхода из цикла break;
- оператор перехода к следующей итерации цикла continue;
- оператор возврата из функции return;
- оператор генерации исключения throw.
Эти операторы могут передать управление в пределах блока, в котором они использованы, и за его пределы. Передавать управление внутрь другого блока запрещается.
Первые четыре оператора рассматриваются в этой лабораторной работе, а оператору throw посвящена специальная лабораторная работа.
Оператор goto
Оператор безусловного перехода используется в одной из трех форм:
goto метка;
goto case константное_выражение;
goto default;
В теле функции должна присутствовать ровно одна конструкция вида
метка: оператор;
Оператор goto метка передает управление на помеченный оператор. Метка — это обычный идентификатор, областью видимости которого является функция, в теле которой он задан. Метка должна находиться в той же области видимости, что и оператор перехода. После выполнения оператора Goto опять восстанавливается естественный порядок выполнения операторов, но начиная уже с помеченного оператора. Если помеченный оператор не является оператором управления, то будет выполняться следующий за ним оператор и т. д.
При использовании Goto следует учитывать следующие требования:
Goto не должен передавать сообщения внутрь цикла;
вход в блок должен осуществляться через заголовок.
В общем случае необходимо избегать применения оператора Goto и по возможности стараться писать программы без этого оператора, так как его использование нарушает принципы структурного и модульного программирования, по которым все блоки, образующие программу, должны иметь только один вход и один выход. Использование этой формы оператора безусловного перехода оправдано в двух случаях:
принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;
переход из нескольких точек функции вниз по тексту в одну точку (например, если перед выходом из функции необходимо всегда выполнять какие-либо действия).
В остальных случаях для записи любого алгоритма существуют более подходящие средства, а использование оператора goto приводит только к усложнению структуры программы и затруднению отладки.
Вторая и третья формы оператора goto используются в теле оператора выбора switch.
Оператор:
goto case константное_выражение
передает управление на соответствующую константному выражению ветвь, а оператор
goto default — на ветвь default.
Оператор break
Оператор break используется внутри операторов цикла или выбора для перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится оператор break.
Оператор continue
Оператор перехода к следующей итерации текущего цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.
Оператор return
Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Синтаксис оператора:
return [ выражение ];
Тип выражения должен иметь неявное преобразование к типу функции. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.
