Язык программирования Pascal Процедуры и функции А. Жидков
Вспомогательный алгоритм - подпрограмма Подпрограммы применяются когда:часть алгоритма неоднократно повторяется в программе;можно использовать фрагменты разработанных ранее алгоритмов;для разбиения крупных программ на части в соответствии с модульным принципом программирования. В паскале реализовано два типа подпрограмм процедуры и функции.
Процедура( функция) представляет собой последовательность операторов, которая имеет имя, список параметров и может быть вызвана из различных частей программы. Имя процедуры в тексте программы называется вызовом. Вызов активирует процедуру (функцию) - начинают выполняться её операторы.После выполнения процедуры программа продолжается с оператора стоящего за вызовом. Отличие процедур от функций в том, что функции возвращают значение.
Описание процедур и функций Все процедуры или функции должны быть описаны в разделе описаний основной программы. Описание процедуры имеет вид:procedure имя (список формальных параметров);раздел описаний локальных параметров begin операторы тела процедуры end; Описание функции имеет вид:function имя (список формальных параметров): тип значения функции;раздел описаний локальных параметров begin операторы тела функции end;
Список формальных параметров состоит из одной или нескольких секций, разделенных символом " ; ". Секция состоит из списка переменных, перечисляемых через запятую, знака “:” и типа. Секция может предваряться служебным словом var - тогда параметры передаются по ссылке, (экономия памяти и времени).Если var отсутствует параметры передаются значениями.Список формальных параметров вместе с окружающими скобками может отсутствовать.
Раздел описаний локальных параметров Раздел описаний процедуры или функции устроен так же, как и раздел описаний программы. Здесь описываются локальные переменные, константы и вложенные процедуры и функции. Все такие локальные объекты доступны лишь внутри данной подпрограммы и не видны извне.
Локальные и глобальные параметры Глобальными называются переменные, объявленные в основной программе и доступные как программе, так и всем ее подпрограммам.Локальными называются переменные, объявленные внутри подпрограммы и доступные только ей самой.Обмен информацией между основной программой и подпрограммой может осуществляться двумя способами: через глобальные переменныес помощью параметров подпрограммы.Подпрограмма может использовать любые глобальные переменные кроме тех, которые имеют те же имена, что и ее локальные переменные. Если в подпрограмме описана локальная переменная, имя которой совпадает с именем некоторой глобальной переменной, то данная глобальная переменная становится недоступной в этой подпрограмме, и при указании идентификатора переменной произойдет обращение к локальной переменой подпрограммы, а не одноименной глобальной переменной. Память для локальных (т.е. описанных в подпрограмме) переменных выделяется на время исполнения данной подпрограммы в специальной области, называемой стеком. При завершении работы подпрограммы память освобождается, поэтому все внутренние результаты работы подпрограммы не сохраняются от одного обращения к другому.
Решение задач с использованием подпрограмм Заданы координаты вершин двух треугольников на плоскости. Определить какой из треугольников имеет большую площадь. Дано:Координаты ABC(Xa, Ya) (Xb,Yb) (Xc,Yc)Координаты DEF(Xd, Yd) (Xe,Ye) (Xf,Yf)Найти:Smax=max(Sabc,Sdef)
Решение:Формула длинны отрезка по координатам концовФормула площади треугольника по трем сторонам(Формула Герона)
Схема программы Предлагается Разделить алгоритм на процедуры:Ввод координат вершин треугольникаОпределение длины сторонОпределение площади треугольника.
Процедура ввода данных procedure input (var x1,y1,x2,y2,x3,y3:real); begin writeln ('--------------------------'); writeln ('ввод координат вершин треугольника'); writeln ('введите координаты 1 вершины'); write ('x1='); read (x1); write ('y1='); read (y1); writeln ('введите координаты 2 вершины'); write ('x2='); read (x2); write ('y2='); read (y2); writeln ('введите координаты 3 вершины'); write ('x3='); read (x3); write ('y3='); read (y3); end;
Функция расчета длины отрезка function dline (var x1,y1,x2,y2:real):real;begindline:=sqrt(sqr(x2-x1)+sqr(y2-y1));end;
Функция расчета площади треугольника по формуле Герона function geron (var a,b,c:real):real; var p:real; begin p:=(a+b+c)/2; geron:=sqrt(abs(p*(p-a)*(p-b)*(p-c))); end;
begin input (xa,ya,xb,yb,xc,yc); {вызов процедуры} input (xd,yd,xe,ye,xf,yf); a:=dline(xb,yb,xc,yc); {вызов функции} b:=dline(xa,ya,xc,yc); c:=dline(xb,yb,xa,ya); d:=dline(xe,ye,xf,yf); e:=dline(xd,yd,xf,yf); f:=dline(xd,yd,xe,ye); Sabc:=geron(a,b,c); {вызов функции} Sdef:=geron(d,e,f); writeln ('Sabc=',Sabc,'Sdef=',Sdef); Smax:=Sabc; if Sdef>Sabc then Smax:=Sdef; writeln ('Smax=',Smax); end.
Окончательный текст программы program Smaxtr;Var xa,ya,xb,yb,xc,yc,a,b,c,Sabc: real; xd,yd,xe,ye,xf,yf,d,e,f,Sdef: real; Smax:real; procedure input (var x1,y1,x2,y2,x3,y3:real); beginwriteln ('ввод координат вершин треугольника'); writeln ('введите координаты 1 вершины'); write ('x1='); read (x1); write ('y1='); read (y1); writeln ('введите координаты 2 вершины'); write ('x2='); read (x2); write ('y2='); read (y2); writeln ('введите координаты 3 вершины'); write ('x3='); read (x3); write ('y3='); read (y3); end; function dline (var x1,y1,x2,y2:real):real;begindline:=sqrt(sqr(x2-x1)+sqr(y2-y1));end; function geron (var a,b,c:real):real; var p:real; begin p:=(a+b+c)/2; geron:=sqrt(abs(p*(p-a)*(p-b)*(p-c))); end; begin input (xa,ya,xb,yb,xc,yc); input (xd,yd,xe,ye,xf,yf); a:=dline(xb,yb,xc,yc); b:=dline(xa,ya,xc,yc); c:=dline(xb,yb,xa,ya); d:=dline(xe,ye,xf,yf); e:=dline(xd,yd,xf,yf); f:=dline(xd,yd,xe,ye); Sabc:=geron(a,b,c); Sdef:=geron(d,e,f); writeln ('Sabc=',Sabc,'Sdef=',Sdef); Smax:=Sabc; if Sdef>Sabc then Smax:=Sdef; writeln ('Smax=',Smax); end.
Тестовое задание и результаты тестаΔABCA(0,0)B(-1,1)C(1,1)Sabc=1ΔDEFD(-1,1)E(1,1)F(1,-1)Sdef=2
Задание на самоподготовку1. Составить программу для вычисления высот треугольника со сторонами а, b, c по формулам: 2. Составить подпрограмму вычисления площади трапеции пооснованиям и высоте. Используя эту подпрограмму, найти площади заданных трапеций:a=6,5 b=3,4 h=2,5a=13,4 b=8,3 h=5,7a=15,5 b=8,4 h=6,5
Решение задачи на самоподготовку 2. Составить подпрограмму вычисления площади трапеции по основаниям и высоте. Используя эту подпрограмму, найти площади заданных трапеций:1. a=6,5 b=3,4 h=2,52. a=13,4 b=8,3 h=5,73. a=15,5 b=8,4 h=6,5 PROGRAM Trapec;Const N=3;var i:integer;a,b,h,s: array[1..N] of real;Procedure STR(a, b, h: real ; var s: real);begins:=(a+b)/2*h;end;BEGINfor i:=1 to N Dobeginwriteln('a=',' b=',' h=');readln(a[i],b[i],h[i]);end;for i:=1 to N DobeginSTR (a[i],b[i],h[i],s[i]);Writeln (' a=', a[i]:6:2,' b=', b[i]:6:2,' h=', h[i]:6:2);Writeln ( ' s=', s [i]:7:3);end;END.