Задача 1. Вычислить площадь четырёхугольника со сторонами a,b,c,d и диагональю e.ПОВТОРЕНИЕ
ФУНКЦИИ Рассмотрим задачу вычисления суммы тангенсов трёх чисел x,y,z. Для её решения можно воспользоваться следующей программой: Program tangens; Var x,y,z:real; Begin ReadLn(x,y,z); Writeln((sin(x)/cos(x)+sin(y)/cos(y)+sin(z)/cos(z)):8:2) End. В операторе вывода три раза повторяется одно и то же выражение с разными значениями параметра. Это выражение - sin(x)/cos(x), которое вычисляет тангенс числа, так как в Паскале нет стандартной функции для его вычисления. Но эту функцию можно написать самим и в этом случае программа будет иметь следующий вид: Program tangens; Var x,y,z:real; Function tan(a:real):real; Begin tan:=sin(a)/cos(a) End;
Begin ReadLn(x,y,z); Writeln((tan (x)+ tan (y)+ tan (z)):8:2) End. Функция – это подпрограмма, в результате работы которой получается скалярная величина (т.е. одно значение), которая обязательно присваивается переменной с тем же именем, что и имя функции. Вызов функций, созданных пользователем, производится аналогично вызову стандартных функций, то есть внутри выражений либо в операторе присваивания, либо в операторе вывода. Описание функций: Function < имя функции > ( < список формальных параметров > ):< тип результата >; < описательная часть > Begin < тело функции > < имя функции >:=< выражение >; end;
Описание функции идет после описания переменных, до начала основной части. Значения, передаваемые в функцию, называются фактическими параметрами. В предыдущей задаче в качестве фактических параметров использовались переменные x,y,z. Параметры, описываемые внутри функции, называются формальными. Желательно, чтобы их имена не совпадали с именами фактических во избежание путаницы. При вызове функции формальному параметру присваивается значение фактического. Имя функции одновременно является и именем переменной, которой будет присвоен результат выполнения функции, поэтому необходимо, чтобы был описан её тип. Если имя функции используется в левой части оператора присваивания, то оно играет роль обычной переменной и пишется без параметров: tan:=sin(a)/cos(a). Это можно делать только внутри самой функции. Если имя функции записывается в правой части оператора присваивания или внутри оператора вывода, то это означает вызов функции и наличие параметров необходимо: b:=tan(x) или write(tan(x)). В качестве фактических параметров могут использоваться не только переменные, но и выражения: writeln(tan((x+y+z)*2)). В этом случае при вызове функции формальный параметр получит значение этого выражения. В нашем случае переменная a получит значение (x+y+z)*2. Задача 1. Вычислить площадь четырёхугольника со сторонами a,b,c,d и диагональю e. Чтобы вычислить площадь такого четырёхугольника, необходимо вычислить площади двух треугольников, из которых он состоит, а затем сложить. Для вычисления площади отдельного треугольника воспользуемся формулой Герона. Program geron; Var a,b,c,d,e:real; Function S(x,y,z:real):real; Var p:real; { локальная переменная. Память выделяется тогда, когда функция начинает свою работу. После завершения работы эта часть памяти освобождается, и значение переменной будет снова неопределено } Begin p:=(x+y+z)/2; S:=sqrt(p*(p-x)*(p-y)*(p-z)) End;
Begin Readln(a,b,c,d,e); Writeln(‘S=’,(S (a,b,e)+ S (c,d,e)):8:2) End. Внутри функции мы использовали локальную переменную p, которая видна только внутри этой функции и не оказывает никакого влияния на переменные, описанные в основной программе. Задача 2. Найти наибольший общий делитель для значений a+b, |a-b| и a*b. Будем использовать функцию для вычисления наибольшего общего делителя двух произвольных чисел. Для этого воспользуемся правилом Эвклида: НОД(M-N,N), если M>N НОД(M,N)= НОД(M,N-M), если N>M N, если N=M Проверим эту формулу на числах 24 и 40. НОД(24,40)=НОД(24,16)=НОД(8,16)=НОД(8,8)=8 Запишем программу: Program NOD; Var a,b,rez:integer;
Function Evklid(M,N:integer):integer; Begin While M<>N do If M<>N then M:=M-N Else N:=N-M; Evklid:=N End;
Begin ReadLn(a,b); Rez:= Evklid (Evklid (a+b,abs(a-b)),a*b); Writeln(‘НОД=’,Rez) End. В данной программе мы воспользовались так же правилом: НОД(x,y,z)=НОД(НОД(x,y),z).
|