Программирование линейных и разветвляющихся алгоритмов
Begin
Begin
операторы тела процедуры
end;
Функциейназывается подпрограмма, предназначенная для вычисления какого-либо параметра. К функции обращаются по её имени, данному в описании функции. Подпрограммы-функции помещают в описании основной программы. От процедуры функцию отличает заголовок, начинающийся служебным словом Function и завершающийся указанием типа функции. В теле описания функции должен быть хотя бы один оператор, который присваивает значение переменной имени функции.
Формат описания функции:
Function<имя функции>(список параметров):<тип функции>;
[описание локальных параметров];{их может и не быть}
операторы; <имя функции>:= <значение функции> {тело функции}
end;
Отметим, что в форматах процедур и функций обязательно используются операторные скобки begin – end. Это связано с общим правилом применения этих скобок внутри программы: если в подпрограммах используется болееодного оператора, текст должен записываться в операторных скобках.
В операторах обращения к процедурам и в функциях фактические параметры записываются в круглых скобках.
В описаниях процедур и функций на месте фактических параметров расположены формальные параметры. Количество, тип и расположение формальных и фактических параметров должно быть одинаковым.
Все формальные параметры можно разбить на три категории:
- параметры-значения, которые не меняются подпрограммой и остаются в основной программе неизменными;
- параметры -переменные, которые подпрограмма может изменить в основной программе;
- параметры-процедуры и параметры-функции, т.е. параметры процедурного типа.
Идентификаторы формальных параметров могут быть любыми, но если имя параметра совпадает с именем объекта основной программы, то этот объект становится недоступным программе.
Тип формальных параметров может быть любым допустимым типом, но в заголовке программы нельзя объявлять новые типы.
Параметры-значения передаются из основной программы в подпрограмму в виде копий, поэтому в основной программе они не могут быть заменены подпрограммой. Параметр-значение указывается в заголовке подпрограммы своим именем и, через двоеточие, типом.
Параметры-переменные в подпрограмму передаются адресами. Адресапередаются в порядке, объявленном в заголовке подпрограммы. Поэтому подпрограмма имеет доступ к этим параметрам и может их изменять. В заголовке подпрограммы параметры-переменные указываются служебным словом Var. Действие этого слова распространяется до ближайшей точки с запятой, т.е. в пределах одной группы.
При использовании параметров-переменных экономится память и увеличивается скорость решения задачи. Однако в некоторых случаях возникает нежелательное изменение параметра.
Параметры-процедуры и параметры-функции также используются в качестве формальных параметров. Фактически эти параметры являются параметрами-значениями и записываются без служебного слова Var. В качестве фактического параметра при этом используется соответствующая процедура или функция, имеющая соответствующее число параметров требуемых типов.
Параметры-процедуры и параметры-функции, как и другие формальные параметры, не должны быть стандартными подпрограммами и не должны объявляться внутри других подпрограмм.
ЛЕКЦИЯ 6
Рассмотрим технологию программирования линейных и разветвляющихся алгоритмов на языке Турбо Паскаль.
По определению линейный алгоритм не содержит условий и представляет собой последовательность операций, определённую математической моделью. В качестве примера рассмотрим следующую задачу.
ЗАДАЧА 1
Вычислить значение функции y = ((a+b)/(c+a)2)*cos(x) ,где
a,b,c – произвольные числа;
x – аргумент в радианах.
Схема решения предусматривает следующие этапы:
1.Постановка задачи
Задано: a,b,c,x – действительные числа
Найти: y = ((a + b)/(c + a)2)*cos(x)
2.Формализация задачи
Задача представляет собой последовательность арифметических операций, выполняемых с учётом приоритетов действий и наличия скобок. Для простоты и наглядности её можно разбить на отдельные блоки, введя для них вспомогательные переменные. Вычислив значения каждого блока, переходят к вычислению всего выражения.
z = a + b {числитель}
t = sqr(c + a) {знаменатель}
Тогда значение искомой функции упрощается до вида
y = (z/t)*cos(x)
3. Блок-схема алгоритма программы (рис.12)
1. Начало
2. Объявление переменных a,b,c,x,y,z,t
3. Ввод данных a,b,c,xс клавиатуры
4. Вычисление числителя z = a + b
5. Вычисление знаменателя t = sqr(c + a)
6. Вычисление функцииy = (z/t)*cos(x)
7.Вывод исходных данныхa,b,c,xи результатаyв формате данных
8. Конец
Поскольку процедуры вычисления квадрата значения переменной и функции косинуса включены в библиотеку подпрограмм, объявлять их в разделе uses нет необходимости.
4. Текст программы
program zadacha1;