Программирование алгоритмов циклической структуры

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

Циклом называется последовательность действий, выполняемых многократно, каждый раз при новых параметрах.

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

 

Оператор For.Оператор задает многократное выполнение некоторого оператора (может быть и составным) с одновременным изменением значения управляющей переменной. Вид оператора:

For <управляющая переменная>:= <нач.знач.> To <кон.знач.> Do <оператор>;

For <управляющая переменная>:= <нач.знач.> DownTo <кон.знач.> Do <оператор>;

Начальное иконечное значения управляющей переменной могут быть представлены константами, переменными или арифметическими выражениями. Они определяются один раз в начале выполнения оператора For и не заменяются во время выполнения этого оператора. Если окажется, что <нач.знач.> больше <кон.знач.> при использовании слова To, то оператор после слова Do («тело» цикла) не будет выполнен ни разу и выполнение цикла с параметром закончится (соответственно при DownTo, если <нач.знач.> меньше <кон.знач.> ). Управляющая переменная, а так же её начальное и конечное значения должны быть одного типа, обязательно порядкового. Оператор после слова Do выполняется один раз для каждого значения управляющей переменной. Если в операторе For используется слово To, то значение управляющей переменной увеличивается на единицу при каждом повторении А, А+1, …, В-1, В, при DownTo – уменьшается на единицу.

 

Оператор While.Данный оператор имеет вид:

While <логическое выражение> Do <оператор (составной оператор)>;

Оператор While содержит логическое выражение, значение которого (True или False) управляет повторным выполнением оператора, им может быть и составной оператор. Значение выражения вычисляется перед выполнением оператора. Если результат равен True, то оператор выполняется, при значении False – нет. Если вначале логическое выражение имеет значение False, оператор после слова Do вообще не выполняется. В операторе обязательно изменение значений переменных, влияющих на значение логического выражения.

 

Оператор Repeat – Until.Оператор Repeat (повторять) – Until (до тех пор, пока) содержит логическое выражение (после Until), которое управляет повторением выполнения последовательности операторов, записанных между Repeat и Until. Повторение продолжается до тех пор, пока логическое значение не примет значение True. Последовательность операторов тела цикла выполняется не менее одного раза.

Структура оператора:

Repeat

<оператор 1>;

<оператор 2>;

<оператор N>;

Until <логическое выражение>;

При использовании оператора RepeatUntil(цикла с постусловием)необходимо учитывать следующее:

§ перед выполнением оператора логическое выражение его окончания (или продолжения) должно быть определено;

§ последовательность операторов должна содержать хотя бы один оператор, влияющий на значение логического выражения, иначе оператор Repeat Until работает бесконечно долго;

§ логическое выражение в конечном итоге должно принять значение True

 

 

Подпрограммы ЯП Pascal (процедуры и функции)

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

В этом случае указную последовательность операторов следует оформить в виде подпрограммы.

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

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

В языке программирования Pascal определены два вида подпрограмм – процедуры и функции.

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

Структура процедур и функций аналогична структуре полной программы на языке Паскаль:

1. Заголовок подпрограммы – задает имя подпрограммы и список формальных параметров с указанием их типов;

2. Раздел описаний;

3. Тело подпрограммы.

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

Процедурой в Турбо Паскале называется особым образом оформленный фрагмент программы, имеющий собственное имя.

Общий вид процедуры:

Procedure <имя процедуры> (<параметры>);

Label <метки>;

Const <описание констант>;

Type <описание типов данных>;

Var <описание переменных>;

<процедуры и функции>;

begin

<основное тело процедуры>;

end;

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

Begin Procedure Sum(x,y:integer; Var z:Integer);

. . . Begin

Readln(a,b); z:=x+y;

Sum(a,b,c); end;

Writeln(c);

. . .

end.

Процедура вызывается указанием ее имени, используемого для обозначения процедуры. Линейный ход выполнения основной программы становится нелинейным – управление вычислительным процессом передается на участок программного кода, занимаемый процедурой. После выполнения процедуры осуществляется возврат на оператор основной программы, следующий за вызовом процедуры. Итак, взаимодействие программы и процедуры по управлению обозначено, рассмотрим взаимодействие по данным. В программе определены переменные a,b,c. В процедуре – x,y,z её параметры, но они являются переменными процедуры. При вызове процедуры Sum(a,b,c) из основной программы значение переменной a присваивается переменной x процедуры Sum, а значение переменной b становится значением переменной y. Стрелки на рисунке в одну сторону. Связь переменных c и z обозначена двойной стрелкой, то есть при изменении значения переменной z необходимо произвести соответствующее изменение значения переменной c. Это обратная связь по данным от процедуры к основной программы. На такой тип связи указывает слово Var в описании параметров процедуры.

В любой программе все переменные делятся на глобальные и локальные. В фрагменте программы переменные a,b,c – глобальные, а x,y,z – локальные. Глобальные переменные – это переменные из раздела описаний основной части программы, а локальные – из раздела описаний процедур и функций. Локальные переменные существуют только в течение работы процедуры, определяются (создаются) при её вызове и исчезают после её завершения.

return false">ссылка скрыта

При описании процедуры указывается список формальных параметров. Каждый параметр является локальным по отношению к описываемой процедуре (x,y,z -формальные). Фактические параметры – это параметры, которые передаются процедуре при обращении к ней (a,b,c - фактические). Число и тип формальных и фактических параметров должны совпадать с точностью до их следования.

Формальные параметры процедуры делятся на параметры-переменные и параметры-значения.

Параметры-переменные– это те формальные параметры, перед которыми в описании ставится слово Var. Если в процессе работы процедуры их значение изменяется, то и изменяется значение этих переменных в основной программе. Если формальный параметр описан как параметр-переменная, то при вызове процедуры ему должен соответствовать фактический параметр в виде переменной нужного типа.

Параметры-значения – перед ними в описании формальных параметров не ставится служебное слово Var. И в процедуре работают только значения этих параметров. В основной программе после выхода из процедуры их значения не изменяются, то есть остаются теми же, что и до начала процедуры. Если формальный параметр описан как параметр-значение, то при вызове процедуры ему может соответствовать произвольное выражение того же типа.

Результат – одно или несколько значений. Оно передается в основную программу как значение ее параметров.

 

Функцией в Турбо Паскале называется особым образом оформленный фрагмент программы, имеющий собственное имя.

Общий вид функйии:

Function <имя функции> [(список параметров)]: <тип результата>;

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