12_Lektsia_Podprogrammy_1_R

ПРОЦЕДУРНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
Подпрограммы, их разновидности
Подпрограмма – это именованная часть программы, которая выполняет определенное логически завершенное действие (часть общей задачи) и может быть вызвана из любого места программы, где это не запрещено синтаксисом.

Градация подпрограмм:
подпрограммы-процедуры и подпрограммы-функции.
стандартные и подпрограммы пользователя.

Встроенные или стандартные подпрограммы являются частью языка, они могут вызываться без предыдущего объявления.
Подпрограмма пользователя – это именованная группа команд, которую создают и описывают в основной программе в разделах описания подпрограмм (разделы procedure и function).

Необходимо помнить правило:
любое имя в программе должно быть обязательно описано прежде чем оно появится среди выполняемых операторов.
ОПРЕДЕЛЕНИЕ И ИСПОЛЬЗОВАНИЕ ПОДПРОГРАММ ТИПА ФУНКЦИЯ

Функцией называется подпрограмма, которая возвращает единственное значение в точку вызова и «носителем» этого значения является ее имя.

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

Function имя_функции (список_формальных_параметров) : тип_результата;
//локальные_объявления
begin
операторы;
имя_функции := возвращаемое_значение
end;

С помощью параметров осуществляется передача входных данных в функцию.

Параметры, которые указывают в заголовке подпрограммы при ее объявлении, называют формальными.

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


ОПРЕДЕЛЕНИЕ И ИСПОЛЬЗОВАНИЕ ПОДПРОГРАММ ТИПА ФУНКЦИЯ
Если формальные параметры разных типов, то синтаксис списка формальных параметров выглядит следующим образом:
формальный_параметр1 : тип1; ... формальный_параметрN : типN;

Если формальные параметры одного типа, то синтаксис списка формальных параметров выглядит следующимj образом:
формальный_параметр1, формальный_параметр2 : тип;

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


Допустимыми типами результата являются следующие:
все простые типы;
строки;
указатели.

Таким образом, результатом функции не могут быть структурированные типы.

ОПРЕДЕЛЕНИЕ И ИСПОЛЬЗОВАНИЕ ПОДПРОГРАММ ТИПА ФУНКЦИЯ

Вызов и выполнение функции производятся при вычислении указателя функции
имя функции (список_фактических_параметров);
который входит в некоторое выражение в точке вызова.
Например:
имя_переменной := имя функции (список_фактических_параметров);
или
writeln(имя функции (список_фактических_параметров));

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

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


Также надо помнить, что имена соответствующих пар фактических и формальных параметров могут не совпадать.
Задача 1. Необходимо вычислить значение выражения z = tg x+ctg y +tg2x.

{1} program FunctionTg;
{2} var x,y,z:real;
{3} //Объявление функции
{4} function tg(a:real):real;
{5} begin
{6} tg:=sin(a)/cos(a)
{7} end;
{8} //Начало основной программы
{9} begin
{10} writeln('Enter real x,y');
{11} readln(x,y);
{12} z:=tg(x)+1/tg(y)+sqr(tg(x));
{13} writeln('z=',z:5:2);
{14} //Конец основной программы
{15} end.

Строки {12} и {13} можно заменить одной
writeln('y=',tg(x)+1/tg(x)+sqr(tg(x)):5:2);


ОПРЕДЕЛЕНИЕ И ИСПОЛЬЗОВАНИЕ ПОДПРОГРАММ ТИПА ПРОЦЕДУРА
Процедура – подпрограмма, результатом работы которой может быть как целый набор значений, так и отсутствие значений, которые поворачиваются, в вызывающую программу (результат работы не сводится к вычислениям).

Синтаксис объявления процедуры имеет такой вид:

procedure имя_процедуры(список_формальных_параметров);
//локальные_объявления
begin
операторы;
end;

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

Параметры, которые указывают в заголовке подпрограммы при ее объявлении, называют формальными.

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



ОПРЕДЕЛЕНИЕ И ИСПОЛЬЗОВАНИЕ ПОДПРОГРАММ ТИПА ПРОЦЕДУРА

Различают:
параметры-аргументы (другой термин: параметр-значение) – входные данные для процедуры;
параметры-результаты (другой термин: параметр-переменные), через которые можно возвращать результаты работы процедуры в основную программу.

Перед списками параметров-результатов каждого типа должно стоять зарезервированное слово var.

Синтаксис вызова процедуры имеет вид:
имя_процедуры (список_фактических_параметров);

Вызов процедуры является отдельным оператором.

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

Задача 2. Решить два квадратных уравнения. Уравнения невырожденные.
program Pract_procedure;

var a1, b1, c1, x11, x21:real;
ok1:boolean;

procedure EnterKoef(var a,b,c:real);
begin
writeln('Enter koeficient yravnenia');
write('a=');readln(a);
write('b=');readln(b);
write('c=');readln(c);
writeln;
writeln('Yravnenie:');
writeln(a:4:1,'*x2+(',b:4:1,')*x+',c:4:1,')=0');
writeln;
end;

{ У процедуры SqRoot шесть параметров:
первые три предназначенных для передачи в процедуру входных данных – коэффициентов уравнения.
Параметры х1 и х2 используются для возвращения результата – корни решения; параметр оk служит для передачи информации о том, что решение существует. }

procedure SqRoot(a,b,c:real; var x1,x2:real;
var ok:boolean);
var d:real;
begin
d:=sqr(b)-4*a*c;
if d<0 then ok:=false
else
begin
ok:=true;
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
end;
end;
procedure Rezultat(x1,x2:real; ok:boolean);
begin
if ok=true
then
writeln ('x1=',x1:4:1,' x2=',x2:4:1)
else
writeln('Net resheniya');
writeln;
writeln
end;
Задача 2. Решить два квадратных уравнения. Уравнения невырожденные.
begin
EnterKoef(a1,b1,c1);
SqRoot(a1,b1,c1,x11,x21, ok1);
rezultat(x11,x21, ok1);
EnterKoef(a1,b1,c1);
SqRoot(a1,b1,c1,x11,x21, ok1);
rezultat(x11,x21, ok1);
end.

Рис. 2. Блок-схема
алгоритму основної
програми

Начало


Ввести значения
x и y

Вивести значение
z

Конец


z=tg(x)+1/tg(y)+
tg2(x)

Вычислить
tg:=sin a / cos a

Начало

Конец

Рис. 1. Блок-схема
алгоритма подпрограммы



Заголовок 1 Заголовок 215

Приложенные файлы

  • doc 18047955
    Размер файла: 74 kB Загрузок: 0

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