Лабораторная работа 6
Процедуры и функции
Подпрограмма самостоятельный именованный фрагмент программы, реализующий определенный алгоритм и допускающий многократное обращение к нему из различных частей основной программы. В турбо-паскале подпрограмма может быть оформлена в виде процедуры или функции.
Процедуры
Объявление процедуры начинается с ключевого слова ~procedure~, за которым следуют имя процедуры и список формальных параметров. Список параметров с указанием их типов заключается в круглые скобки. Перед параметрами, с помощью которых в вызывающую программу возвращается результат работы процедуры, ставится слово VAR. После строки с именем процедуры следует тело процедуры, содержащее раздел описаний процедцры и раздел исполняемых операторов процедуры.
program Lab6;
{ Объявление процедуры с именем pifagor }
procedure pifagor(a, b: real; var c: real);
begin
c:=sqrt(a*a+b*b);
end;
{ Объявление переменных главной программы }
var
a, b, c : real;
{ Основная программа }
begin
write('Введите длину катета a = '); readln(a);
write('Введите длину катета b = '); readln(b);
{ Вызов процедуры. В третий параметр (с) записывается значение переменной c, вычисляемый внутри процедуры }
pifagor(a,b,c);
writeln('c = ', c:5:2);
end.
Функции
Функции - это подпрограмма, результатом работы которой является некоторое значение, подобное переменной. Функция, как и процедура, может иметь список параметров, следующих за именем функции в круглых скобках. Но если имя процедуры используется только для ее вызова, то с именем функции связывается ее значение. Для этого в теле любой функци нужно осуществить присваивание ей (её имени) вычисленного значения.
program Lab6;
{ Объявление функции, вычисляющей сумму квадратов катетов прямоугольного треугольника }
function pifagor(a, b: real): real;
begin
{ присваиваем результат работы функции её имени }
pifagor:=sqrt(a*a+b*b);
end;
{ Объявление переменных главной программы }
var
a, b, c : real;
begin
write('Введите длину катета a = '); readln(a);
write('Введите длину катета b = '); readln(b);
{ Вызов функции }
c:= pifagor(a, b);
{ Функция может использоваться в выражениях, как и любая встроенная функция (sin, cos, ...) }
c:= 2*pifagor(a, b);
end.
Пример задания
Составить программу на языке Паскаль для вычисления значения функции \[y = \frac{\sin ax}{x^2 + a^2}\]
в точках \(x = {0.2, 0.7, 1.0, 1.2, 1.8, 2.0, 2.2}\) при заданных значениях \(a = {2, 2.5, 3, 7, 4.1, 4.9}\). Нахождение значения функции \(f(x)\) при заданных значениях а оформить в виде подпрограммы. Результат вывести в виде двумерной таблицы.
program lab6;
{ Определяем тип данных -- вектор и двумерный массив }
type vector= array [1..20] of real;
massiv= array [1..20,1..20] of real;
{ Объявление переменных }
var x,a:vector;
i,j,k,n,m:integer;
y:massiv;
{ Объявление процедуры, которая записывает двумерный массив в параметр y (тип массив) }
{ Входные параметры процедуры -- размеры массива и массивы x и a }
procedure p(n, m : integer; x, a : vector; var y : massiv);
begin
for i:=1 to n do
for j:= 1 to m do
y[i,j]:=sin(a[j]*x[i])/(sqr(x[i])+sqr(a[j]));
end;
{ Тело основной программы }
begin
Write ('Введите количество значений x и a= ');
Readln(n,m);
{ Ввод значений x }
for i:=1 to n do
begin
Write ('Введите x[',i,']=');
Readln(x[i]);
end;
{ Ввод значений a }
for j:= 1 to m do
begin
Write ('Введите a[',j,']=');
Readln(a[j]);
end;
{ Вызов процедуры p и заполнение массива y }
p(n, m, x, a, y);
{ После того как массив заполнен, выводим его в виде таблицы}
{ Вывод шапки таблицы }
writeln (' Таблица');
writeln('┌───────┬───────┬───────┬───────┬───────┬───────┬───────┐');
write('│ x \ a │');
{ Вывод a в первой строке }
for i:=1 to m do
write(a[i]:4:1,' │');
{ Перевод строки }
writeln;
{ Для каждой строки таблицы от 1 до n }
for i:=1 to n do
begin
writeln('├───────┼───────┼───────┼───────┼───────┼───────┼───────┤');
{ вывод x в первую колонку i-ой строки }
write('|', x[i]:3:1,' ','│');
{ вывод y в i-ой строке }
for j:=1 to m do
write(y[i, j]:7:3,'│');
{ Перевод строки }
writeln;
end;
{ Вывод подвала таблицы }
Writeln('└───────┴───────┴───────┴───────┴───────┴───────┴───────┘');
{ Ожидание, пока пользователь не нажмет Enter }
readln;
end.