2.2 Подпрограммы-функции, определенные пользователемФункции пользователя описываются в разделе описания функций и процедур основной программы. Описание функции строится как законченная программа, т.е. может состоять из заголовка и шести разделов: описания, меток, констант, типов, переменных, функций и процедур и раздела операторов. Заканчивается описание функции символом точка с запятой. Написать программу, вычисляющую с помощью подпрограммы-функции, выражение: f1(x)=x+256.4; f2(y)=y+256.4; f3(z)=z+256.4; Program Prim30; Var x,y,z,f1,f2,f3:real; function f(x:real):real; {заголовок функции;} { f - имя функции, это же и имя} {результата, х - формальный параметр} Begin f:=(x+256.4); end; {тело функции} BEGIN {начало основной программы} writeln('ввести x,y,z'); f1:=f(x); {обращение к подпрограмме f с фактическим параметром x} f2:=f(y); {обращение к подпрограмме f с фактическим параметром y} f3:=f(z); {обращение к подпрограмме f с фактическим параметром z} writeln(f1:20,f2:20,f3:20); Написать программу, вычисляющую G: Оформим вычисления в виде подпрограммы-функции: Program Prim31; Var h,x,y,z,g:real; function f(a,b:real):real; {входные формальные параметры a,b} Begin f:=sqr(ln(a)+sin(b))/(cos(a)*exp(b)); end; BEGIN writeln ('введите полжительные h,x,y,z'); readln(h,x,y,z); if (x>=1) and (x<3) then if (x>=3) and (x<5) then if (x>=5) and (x<=9) then writeln('g=0'); readln; END. В этой программе описание формулы начинается словом function, имя функции f, результат вычисления функции типа real. Тело функции заключено в операторные скобки begin, end; a, b называются формальными параметрами. В данной функции нам не понадобились разделы описаний. При выполнении основной программы, которая начинается begin, встречается выражение f(x, y). Встретив такое выражение, машина по имени f определяет, что это обращение к функции. затем машина проверяет совпадение количества и типа фактических параметров (x, y) с формальными (a, b). При их совпадении в тело функции вместо формальных параметров подставляются фактические и тело выполняется, полученный результат используется при вычислении выражения, стоящего в операторе writeln. Составить программу вычисления при условии, что а<b: Если a и b не укладываются в заданные пределы, нужно сообщить об этом пользователю и спросить, будут ли другие диапазоны -- ответ: "Y, N". Если заданы не те буквы (y, n), повторить вопрос. Прежде чем писать программу, определимся с функциями: exp(x/10)+sqrt(x/(x+3)) - оформим в виде функции f1; sqrt(sqr(x)/(3*x+10)) - в виде f2; sin(x)+f1 - в виде f3; cos(x)+f1 - в виде f4; cos(x)-f2 - в виде f5; вычисления по методу трапеций с точностью 0.1 oформим в виде подпрограммы-функции f6. Program Prim32; Var lit:char; function f1(x:real):real; Begin function f2(x:real):real; Begin function f3(x:real):real; Begin function f4(x:real):real; Begin function f5(x:real):real; Begin function f6(a,b:real):real; label K,N1,K1,KC,T; Var Begin s1:=9.999e+10; N1: h:=(b-a)/n; for i:=1 to n do Begin if (0<=a)and(b<5) then goto kc; if (5<=a)and(b<10) then goto kc; if (10<=a)and(b<=16) then goto kc; KC: x:=x+h; if abs(s-s1)<0.1 then else K: f6:=s; T: writeln('пределы интегрирования не соответствуют условию'); f6:=-9999999999.; K1: end; BEGIN NAH: writeln('введите значения a,b'); readln(a,b); if z=-9999999999. then writeln('z=',z); P: readln; writeln(' будем еще вычислять z ? , если "да" ', 'то нажмите клавишу "y" , если нет, то любую клавишу '); readln(lit); if (lit='Y') or (lit='y') then END. |