Программирование линейных и разветвляющихся алгоритмов

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;