Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Операторы повторения цикла и выхода из цикла

К группе операторов управления следует отнести также операторы вызова стандартных процедур Continue и Break (доступные только в версии Турбо Паскаль 7.0). Эти два оператора являются очень полезными, гак как улучшают структуру программы, позволяя обходиться в циклах без операторов перехода ("выводящих" из цикла или передающих управление на конец цикла - для следующего его повторения). Они очень естественны при описании логики алгоритма.

Continue начинает очередную итерацию цикла (любого типа). Его исполнение вызывает переход на вычисление очередного значения параметра цикла или вычисление условия в том операторе повторения, в котором находится этот оператор Continue.

Break завершает цикл (самый внутренний цикл из охватывающих этот оператор), т.е. выполняет выход из оператора цикла (любого вида) на оператор, следующий за ним.
В качестве примеров применения обоих операторов приведем еще два варианта указанного выше оператора цикла с предусловием, выполняющего поиск значения х в массиве:

m := 1; while m <= N do if a[m] <> x then begin m := m + 1;
Continue end else Break;
m := 1; while m <= N do if a[m] = x then Break else tn := m + 1;

Иногда в программе нужно организовать "бесконечный" цикл, т.е. цикл, завершающийся не проверкой условия цикла, а некоторым условием, проверяемым в теле цикла. В этом случае организуют цикл с предусловием (в котором условие дает всегда истинное значение, например while true) или цикл с постусловием (в котором условие дает всегда ложное значение, например until false). Типичный случай использования бесконечного цикла- выдача программой меню действий (операций), которые может выполнять эта программа.

 

Рекомендации к программированию алгоритмов со сложной логикой

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

Большинство управляющих операторов языков программирования построено именно таким образом - таковы составной оператор, условный оператор, оператор выбора, операторы повторения.

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

Решение указанной проблемы для операторов повторения достигается путем использования операторов Continue и Break.

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

Укажем несколько приемов надежного и экономичного программирования, используемых при программировании "ветвящихся" алгоритмов.

1.         Тщательно проанализировав задачу (или подзадачу), выделить все данные, определяющие ветвление. Ветвящийся алгоритм описать как совокупность непересекающихся ветвей, обязательно с исчерпывающей предварительной проверкой значений всех данных, определяющих ветвление.

2.         Завершать каждую из ветвей подходящим оператором завершения (Exit, Break, Continue, Halt).

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

4.         Завершение структурного оператора сопровождать подходящим комментарием.


Приведем примеры программ, иллюстрирующих рассмотренные управляющие операторы и приемы их применения при создании надежных программ.

 

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

program d_5_8;
{ЗАДА ЧА : По вещественным коэффициентам квадратного уравнения найти его
корни.
ПРИЕМЫ:
-ввод исходных данных с запросом и с контролем допустимости значения данного,
-проверка всех конфигураций значений исходных данных, влияющих на выделение частных случаев решения задачи,
-структурирование программы путем выделения ветвей для частных случаев и завершения каждой ветви оператором Exit.
РЕКОМЕНДАЦИИ}

 

Вычисление N! (факториала).
В программе выделены три диапазона области допустимых значений N, в которых вычисления N! ведутся в арифметике с типами longint. real или extended. Контроль попадания заданного N в один из диапазонов обеспечивает надежность, правильность и экономичность вычислений. Цель этой программы состоит не в том, чтобы показать необходимость построения всегда экономичных вычислений, а в том, чтобы убедить в необходимости анализа области допустимых значений и выбора правильного и разумного представления (типа) данных.

program d_5_9;
{ЗАДАЧА: Вычислить значение факториала
ПРИЕМЫ:
-вычисление факториала выполняется итеративно:
0' =1, N'=1*2*3 *N(npuN>0),
-в целой арифметике вычисления с типом LONGINT можно выполнить (без переполнения) только для 0 <= N <= 12,
-в вещественной арифметике (тип real) вычисления (без переполнения) можно выполнить для N < = 33 (эти значения N получены при тестировании программы),
-при значениях N > 33 вычисления нужно проводить с типом DOUBLE или EXTENDED, что возможно только при наличии сопроцессора 8087 и при включенной директиве $N+,
РЕКОМЕНДАЦИИ.
-определить, для каких значений N можно выполнять вычисления с типом INTEGER,
-при наличии сопроцессора реализовать функции вычисления факториала с типами DOUBLE или EXTENDED}




 

Комментарии:


Добавить свой комментарий:


Введите значение:
 









   
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru