Процедуры и функции на языке программирования Паскаль.
Язык программирования 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) Формулы для решения задачи Решение:Формула длинны отрезка по координатам концовФормула площади треугольника по трем сторонам(Формула Герона) Схема программы Предлагается Разделить алгоритм на процедуры:Ввод координат вершин треугольникаОпределение длины сторонОпределение площади треугольника. начало Ввод вершин треугольника Длина стороны треугольника Площадь треугольника по формуле Герона Sabc
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 х у A B C D E F Решение задачи на самоподготовку 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);
begin
s:=(a+b)/2*h;
end;
BEGIN
for i:=1 to N Do
begin
writeln('a=',' b=',' h=');
readln(a[i],b[i],h[i]);
end;
for i:=1 to N Do
begin
STR (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.