Программирование с использованием функций

И процедур

 

При решении различных задач может возникнуть необходимость проводить вычисления по одним и тем же алгоритмам. В языке Паскаль предусмотрена возможность объединения любой последовательности операторов в подпрограмму. Выделяют два вида подпрограмм: процедуру (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; просмотров: 1032;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.025 сек.