Программирование с использованием функций
И процедур
При решении различных задач может возникнуть необходимость проводить вычисления по одним и тем же алгоритмам. В языке Паскаль предусмотрена возможность объединения любой последовательности операторов в подпрограмму. Выделяют два вида подпрограмм: процедуру (Procedure) и функцию (Function).
Функции
Функция – это группа операторов, в результате выполнения которых вычисляется одно значение, присваиваемое имени функции. Описание функций включает заголовок; раздел описаний; блок операторов функции:
function имя функции (формальные параметры): тип;
Раздел описаний
Begin
Раздел операторов
Имя функции := результат
end;
Особенности использования функции:
– функция располагается после раздела var основной программы и до раздела begin основной программы;
– обращение к функции осуществляется в операторе присваивания или вывода y:=f (b1, b2, …);
– функция имеет единственный результат, который передается через имя функции (присваивается имени функции);
– формальные параметры указывают в любом порядке, например:
function sum (k :real; f: integer; r: real) : real;
function sum (k, r : real; f : integer) : real;
– формальные и фактические параметры должны соответствовать по количеству, порядку следования и типу;
– тип массива, передаваемого в функцию, должен быть описан в разделе type основной программы.
Пример 1. Определить число сочетаний, используя функцию для вычисления факториала.
С =N! / M!(N – M)!.
Var
c: real;
n, m, l: integer;
function Fact (k: integer) : real;
Var
i : integer;
p : real;
Begin
p : =1 ;
for i:=1 to k do
p:= p*i;
Fact := p;
End;
Begin
Write (‘Введите n, m =>’);
ReadLn (n, m);
if n > m then
Begin
l :=n – m;
c := Fact (n) /Fact (m) / Fact (l);
WriteLn (‘Число сочетаний =’, c:12:1);
End;
Else
WriteLn (‘Нельзя вычислить’);
End.
Пример 2. Вычислить функцию y. Для вычисления суммы использовать функцию.
y= ax + bx +c, где а= , b= , c= .
Type
mas=array[1..12] of real;
Var
p, t, r:mas;
i:integer;
x, y :real;
function Sum (z: mas; k:integer): real;
Var
s:real; j: integer;
Begin
s := 0;
for j := 1 to k do
s := s+z[j];
Sum := s
End;
Begin
Write (‘Введите х=>’);
ReadLn (x);
WriteLn (‘Введите р[8]’);
for i := 1 to 8 do
Read (p[i]);
ReadLn;
WriteLn (‘Введите т[10]’);
for i := 1 to 10 do
Read (t[i]);
ReadLn;
WriteLn (‘введите r[12]);
for i := 1 to 12 do
Read (r[i]);
ReadLn;
y:=Sum (p, 8)*x*x+Sum (t, 10)*x+Sum (r,12);
WriteLn (‘y=’, y:15:3);
End.
Пример 3.Найти максимальный элемент отдельно в массивах А(10), В(20) среди тех элементов, которые принадлежат отрезку (С, D), используя функцию. Для каждого массива задать свой отрезок. Найти среди найденных элементов наибольший.
Type
ms=array[1..20] of real;
Var
a, b:ms;
ca, da, cb, db, amax, bmax : real;
i: integer;
function Max (x: ms; n: integer; c1, d1: real) :real;
Var
p, m: real;
Begin
p := 0;
for i := 1 to n do
if (x[i] >=c1) and (x[i] <=d1) then
if p=0 then
Begin
m:=x[i];
p:=1;
End
Else
if m<x[i] then
m:= x[i];
if p=0 then
WriteLn (‘Нет элементов из отрезка’)
Else
WriteLn (‘ max=’, max:5:1);
Max :=m;
WriteLn (‘Массив’);
for i:=1 to n do
Write (x[i] :5:1,’_’);
WriteLn;
End;
{Основная программа}
Begin
Write(‘Введите [с, d] для а =>’);
ReadLn (ca, da);
WriteLn (‘Введите массив а[10] ’);
for i:=1 to 10 do
Read (a[i]);
ReadLn;
Write(‘Введите [с, d]’ для в=>);
ReadLn (cb, db);
WriteLn (‘Введите b [20]’);
for i:=1 to 20 do
Read (b[i]0;
ReadLn;
amax :=Max (a, 10, ca, da);
bmax :=Max (b, 20, cb, db);
if amax>bmax then
WriteLn (‘больше элемент из а’);
Else
WriteLn (‘больше элемент из в’);
ReadLn;
End.
Пример 4. Даны матрицы D (2, 3), F (4, 5), найти отдельно в каждой матрице количество элементов кратных 7, используя подпрограмму – функцию.
Type
matr = array [1..4, 1..5] of integer;
Var
d, f : matr;
kd, kf, i, j : integer;
function Kol (a:matr; n1, n2 : integer) : integer;
Var
k: integer;
Begin
k:=0;
for i := 1 to n1 do
for j := 1 to n2 do
if a[i, j] mod 7 = 0 then
k := k+1;
WriteLn (‘Матрица’);
for i := 1 to n1 do
Begin
for j := 1 to n2 do
Write (a[i, j]);
WriteLn;
end;
kol := k;
End;
{Основная программа}
Begin
WriteLn (‘Введите d[2, 3]’);
for i := 1 to 2 do
for j := 1 to 3 do
Read (d[i, j]);
ReadLn;
kd := Kol (d, 2, 3);
WriteLn (‘kd=’, kd);
WriteLn (‘введите f[4, 5]’);
for i := 1 to 4 do
for j:= 1 to 5 do
Read (f[i, j]);
ReadLn;
kf := Kol (f, 4, 5);
WriteLn (‘kf=’, kf);
End.
Дата добавления: 2017-01-29; просмотров: 1038;