В языке Паскаль имеется два вида подпрограмм – процедуры и функции.
Имея один и тот же смысл и аналогичную структуру, процедуры и функции различаются назначением и способом их использования.
Все процедуры в языке Паскаль делятся на 2 вида: встроенные и пользовательские.
Встроенные определены заранее и могут вызываться без предварительного описания.
Пользовательские – именованная группа операторов, реализующая определенную последовательность действий.
Вызов пользовательских процедур и функций осуществляется по имени.
Описание процедуры:
Рисунок 9 - Синтаксическая диаграмма описания процедуры
Описание функции:
Рисунок 10 - Синтаксическая диаграмма описания функции
Пример 10.1. Рассчитать значение y(x) по формуле
Для расчета значения tg(x) используется подпрограмма-функция tg(а) с одним параметром.
Program Project1;
var x,y:real;
function tg(a:real):real;
begin
tg:=cos(a)/sin(a);
end;
begin
write('x='); readln(x);
y:=sqr(tg(x+1))+tg(x+0.5)+7*tg(x);
writeln('y=',y:6:2);
readln;
end.
Пример 10.2. Условие из предыдущего примера. В программе для расчета значения tg(x) используется подпрограмма-процедура tg(a,b) с двумя параметрами.
Program Project2;
var x,y:real; x1,x2,x3:real;
procedure tg(a:real; var b:real);
begin
b:=cos(a)/sin(a);
end;
begin
write('x='); readln(x);
tg(x+1,x1); tg(x+0.5,x2); tg(x,x3);
y:=sqr(x1)+x2+7*x3;
writeln('y=',y:6:2);
readln;
end.
Пример 10.3. Рассчитать периметр ( в м) и площадь прямоугольника (в м2). Длины сторон (x, y) вводятся с клавиатуры в см. В программе используется подпрограмма-процедура parametr(a, b, p, s).
Program Project3;
var x,y:integer; s1,p1:real;
procedure parametr(a,b:integer; var p,s:real);
begin
p:=2*(a+b)/100;
s:=a*b/10000;
end;
begin
x:=30; y:=40;
parametr(x,y,p1,s1);
writeln('p1=',p1:6:2, ' s1=',s1:6:2);
readln;
end.
Пример 10.4. Условие из предыдущего примера. В программе используются две подпрограммы-функции.
Program Project4;
var x,y:integer; s1,p1:real;
function p(a,b:integer):real;
begin
p:=2*(a+b)/100;
end;
function s(a,b:integer):real;
begin
s:=a*b/10000;
end;
begin
x:=30; y:=40;
p1:=p(x,y);
s1:=s(x,y);
writeln('p1=',p1:6:2, ' s1=',s1:6:2);
readln;
end.
Пример 10.5. Условие из предыдущего примера. В программе используется процедура parametr без параметров.
Program Project5;
var a,b:integer; p,s:real;
procedure parametr;
begin
p:=2*(a+b)/100;
s:=(a*b)/10000;
end;
begin
write('a='); readln(a); write('b='); readln(b);
parametr;
writeln('p=',p:6:2, ' s=',s:6:2);
a:=50; b:=80;
parametr;
writeln('p=',p:6:2, ' s=',s:6:2);
readln;
end.
Пример 10.6. Условие из предыдущего примера. В программе используются две функции (s и p) без параметров.
Program Project6;
var a,b:integer; p1,s1:real;
function p:real;
begin
p:=2*(a+b)/100;
end;
function s:real;
begin
s:=a*b/10000;
end;
begin
a:=30; b:=40;
p1:=p;
s1:=s;
writeln('p1=',p1:6:2, ' s1=',s1:6:2);
readln;
end.
Варианты заданий (2 задания)
Задание 1. Написать программу с подпрограммой-функцией.
Задание 2. Написать программу с подпрограммой-процедурой (с параметром или параметрами).
1. Даны действительные s и t. Рассчитать f(t,-2s,1.17)+f(2.2,t,s-t), где
подпрограмма.
2. Даны действительные а, b, с. Получить
, где max(x,y) подпрограмма.
3. Даны действительные числа S и t. Рассчитать
f(t,-3*s,2.5-t)+f( 5.2,3*t,s-t), где
подпрограмма.
4. Даны действительные числа S и t. Рассчитать
f(1.5*t,2*s)+f(t,3-s)-f(2*s-3,t+s), где
подпрограмма.
5. Даны действительные числа S и t. Рассчитать
h(s,t)+h(h2 (s-t,s*t),h4 (s-t,s+t))+h(1,1), где
подпрограммы.
6. Даны действительные числа a, b. Рассчитать Y=min(a,b), Y1=min(min(a*b,a+b), min(a2 –b*a,b3-3*a)), Y2=min(Y12+Y,5.25),
где min(x,x1) подпрограмма.
7. Даны действительные числа S и t. Рассчитать
f(t,4*s,2.5*t)+f( 5,2*t,s+t),
где подпрограмма.
8. Даны действительные числа S и t. Рассчитать
h(s,t)+h3 (s-t,s*t)+h2 (s-t,s+t)+h(1,1), где
подпрограмма.
9. Даны действительные числа a, b, c. Рассчитать
, где max(x,x1) описать как подпрограмму.
10. Вычислить К = (x + y + z) / 3, где x – наибольшее значение из параметров х1, х2, y - из y1, y2, z – из z1, z2. Использовать подпрограмму для нахождения наибольшего значения из двух параметров.
11. В порт в среднем приходят 3 корабля в день. Какова вероятность того, что в день придет 2 корабля, 4 корабля? Вероятность вычислять по формуле
Р = 3 * е - 3 / к!. Использовать подпрограмму для расчета к!.
12. Вычислить Z = (v1 + v2 + v3) / 3, где v1,v2,v3 – объемы шаров с радиусами r1, r2, r3 соответственно. Использовать подпрограмму для расчета объёмов шаров. Объем шара вычислять по формуле V = 4 / 3*Пi*R3.
13. Определить число сочетаний из n по m (n>m), по формуле С=n!/m!(n-m). Использовать одну подпрограмму для расчета n! и m!.
14. Вычислить Z = (n + m) / 2, где n – наименьшее значение из параметров n1, n2, m – из m1, m2. Использовать подпрограмму для нахождения наименьшего значения из двух параметров.
15. Составить программу вычисления значения функции
S = x2 + y2 + sin(2 * x2 * y2) + x + z + sin(2 * x * z) + y2 + z2 + sin(2 * y2 * z2) , используя подпрограмму для расчета a + b + sin(2 * a * b).