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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



И процедур

 

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

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.115.120 (0.016 с.)