Программирование >>  Обработка исключительных ситуаций 

1 ... 23 24 25 [ 26 ] 27 28 29 ... 142


if(х>=10) у = 2*t; 2

Console.WriteLineC {0,6} {1.6} . х, у ): 3

Как видите, в этом варианте программы все управление циклом сосредоточь в его заголовке. Это делает программу понятней. Кроме того, областью дейстг служебной переменной х является цикл, а не вся функция, как это было в л тинге 4.3, что предпочтительнее, поскольку переменная х вне цикла не требует

СОВЕТ-

В общем случае надо стремиться к минимизации области действия перемени Это облегчает поиск ошибок в программе.

Любой цикл while может быть приведен к эквивалентному ему циклу for и оборот. Например, два следующих цикла эквивалентны:

Цикл for:

for ( bl; Ь2:: ЬЗ ) оператор;

Цикл whi 1е:

while ( Ь2 )

оператор;

Цикл перебора foreach

Цикл foreach используется для просмотра всех объектов из некоторой труп данных, например массива, списка или другого контейнера. Он будет рассм рен, когда у нас появится в нем необходимость, а именно в разделе Онера1 foreach (см. с. 136).

Рекомендации по выбору оператора цикла

Операторы цикла взаимозаменяемы, но можно привести некоторые рекомен ции по выбору наилучшего в каждом конкретном случае.

Оператор do while обычно используют, когда цикл требуется обязательно вып нить хотя бы раз, например, если в цикле производится ввод данных.

Оператором while удобнее пользоваться в тех случаях, когда либо число ите ций заранее неизвестно, либо очевидных параметров цикла нет, либо модифи цию параметров удобнее записывать не в конце тела цикла.



Оператор foreach применяют для просмотра элементов различных коллекций объектов.

Оператор for предпочтительнее в большинстве остальных случаев. Однозначно - для организации циклов со счетчиками, то есть с целочисленными переменными, которые изменяют свое значение при каждом проходе цикла регулярным образом (например, увеличиваются на 1).

Начинающие часто делают ошибки при записи циклов. Чтобы избежать этих ошибок, рекомендуется:

проверить, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого правильные начальные значения (а также возможно ли выполнение других операторов);

проверить, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла;

предусмотреть аварийный выход из цикла по достижении некоторого количества итераций (пример приведен в следующем разделе);

и, конечно, не забывать о том, что если в теле цикла требуется выполнить более одного оператора, нужно заключать их в фигурные скобки.

Операторы передачи управления

В С# есть пять операторов, изменяющих естественный порядок выполнения вычислений:

оператор безусловного перехода goto;

оператор выхода из цикла break;

оператор перехода к следующей итерации цикла continue;

оператор возврата из функции return;

оператор генерации исключения throw.

Эти операторы могут передать управление в пределах блока, в котором они использованы, и за его пределы. Передавать управление внутрь другого блока запрещается.

Первые четыре оператора рассматриваются в этом разделе, а оператор throw - далее в этой главе на с. 93.

Оператор goto

Оператор безусловного перехода goto используется в одной из трех форм: goto метка;

goto case константное выражение; goto default;

В теле той же функции должна присутствовать ровно одна конструкция вида

метка: оператор;



Оператор break

Оператор break используется внутри операторов цикла или выбора для перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится оператор break.

Для примера рассмотрим программу вычисления значения функции ch х (гиперболический косинус) с точностью в = 10~ с помощью бесконечного ряда Тейлора по формуле

2 4 6 2

х х х х

у = 1 +-+-+-+.. . +-+.. .

2! 4! 6! 2я!

Этот ряд сходится при х\ < со. Для достижения заданной точности требуется суммировать члены ряда, абсолютная величина которых больше е. Для сходящегося ряда модуль члена ряда Сп при увеличении п стремится к нулю. При некотором п неравенство Сп \ > е перестает выполняться и вычисления прекращаются. Алгоритм решения задачи выглядит так: задать начальное значение суммы ряда, а затем многократно вычислять очередной член ряда и добавлять его к ранее найденной сумме. Вычисления заканчиваются, когда абсолютная величина очередного члена ряда станет меньше заданной точности.

До выполнения программы предсказать, сколько членов ряда потребуется просуммировать, невозможно. В цикле такого рода есть опасность, что он никогда не завершится - как из-за возможных ошибок в вычислениях, так и из-за ограниченной

Оператор goto метка передает управление на помеченный оператор. Метка - этс обычный идентификатор, областью видимости которого является функция, в теле которой он задан. Метка должна находиться в той же области видимости, чтс и оператор перехода. Использование этой формы оператора безусловного перехода оправдано в двух случаях:

принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;

переход из нескольких точек функции вниз по тексту в одну точку (например, если перед выходом из функции необходимо всегда выполнять какие-либо действия).

В остальных случаях для записи любого алгоритма существуют более подходящие средства, а использование оператора goto приводит только к усложнению структуры программы и затруднению отладки. Применение этого оператора нарушает принципы структурного и модульного программирования, по которым все блоки, образующие программу, должны иметь только один вход и один выход.

Вторая и третья формы оператора goto используются в теле оператора выбора switch. Оператор goto case константноевтражение передает управление на соответствующую константному выражению ветвь, а оператор goto default - на ветвь default. Надо отметить, что реализация оператора выбора в С# на редкость неудачна, и наличие в нем оператора безусловного перехода затрудняет понимание программы, поэтому лучше обходиться без него.



1 ... 23 24 25 [ 26 ] 27 28 29 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика