Циклический алгоритм реализует повторение некоторых действий, то есть включает в себя циклы.
Циклом называется последовательность действий, выполняемых многократно, каждый раз при новых параметрах.
В языке Турбо Паскаль имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программы.
Оператор 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 < логическое выражение >;
При использовании оператора Repeat – Until (цикла с постусловием)необходимо учитывать следующее:
§ перед выполнением оператора логическое выражение его окончания (или продолжения) должно быть определено;
§ последовательность операторов должна содержать хотя бы один оператор, влияющий на значение логического выражения, иначе оператор 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 – локальные. Глобальные переменные – это переменные из раздела описаний основной части программы, а локальные – из раздела описаний процедур и функций. Локальные переменные существуют только в течение работы процедуры, определяются (создаются) при её вызове и исчезают после её завершения.
При описании процедуры указывается список формальных параметров. Каждый параметр является локальным по отношению к описываемой процедуре (x,y,z -формальные). Фактические параметры – это параметры, которые передаются процедуре при обращении к ней (a,b,c - фактические). Число и тип формальных и фактических параметров должны совпадать с точностью до их следования.
Формальные параметры процедуры делятся на параметры-переменные и параметры-значения.
Параметры-переменные – это те формальные параметры, перед которыми в описании ставится слово Var. Если в процессе работы процедуры их значение изменяется, то и изменяется значение этих переменных в основной программе. Если формальный параметр описан как параметр-переменная, то при вызове процедуры ему должен соответствовать фактический параметр в виде переменной нужного типа.
Параметры-значения – перед ними в описании формальных параметров не ставится служебное слово Var. И в процедуре работают только значения этих параметров. В основной программе после выхода из процедуры их значения не изменяются, то есть остаются теми же, что и до начала процедуры. Если формальный параметр описан как параметр-значение, то при вызове процедуры ему может соответствовать произвольное выражение того же типа.
Результат – одно или несколько значений. Оно передается в основную программу как значение ее параметров.
Функцией в Турбо Паскале называется особым образом оформленный фрагмент программы, имеющий собственное имя.
Общий вид функйии:
Function <имя функции> [(список параметров)]: <тип результата>;
В теле функции обязательно должен быть хотя бы один оператор присвоения, где в левой части стоит имя функции, а в правой – её значение. Иначе значение функции не будет определено.