ПРОЦЕДУРЫ И ФУНКЦИИ (ПОДПРОГРАММЫ)



Для единообразия функции и процедуры называются подпрограммами. Подпрограммой называется программная единица, имеющая имя, по которому она может быть вызвана из других частей программы. Процедура или функция представляет собой последовательность операторов, которая имеет имя, список параметров и может быть вызвана из различных частей программы. Функции, в отличие от процедур, в результате своего выполнения возвращают значение, которое может быть использовано в выражении.

Любая используемая в программе процедура или функция должна быть предварительно описана в разделе описаний.

Описание процедуры имеет вид:

procedure имя (список формальных параметров);

раздел описаний

begin

операторы

end;

Описание функции имеет вид:

function имя (список формальных параметров): тип возвращаемого значения;

раздел описаний

begin

операторы

end;

Операторы подпрограммы, окаймленные операторными скобками begin/end, называются телом этой подпрограммы.

Список формальных параметров вместе с окружающими скобками может отсутствовать. Он состоит из одной или нескольких секций, разделённых символом ";". Каждая секция состоит из списка переменных, перечисляемых через запятую, после которого следуют двоеточие и тип. Каждая секция может предваряться ключевым словом var или const, что указывает на то, что параметры передаются по ссылке. Тип формального параметра должен быть либо именем, либо динамическим массивом, либо множеством, либо процедурной переменной (для последних трех типов имеет место структурная эквивалентность типов).

Раздел описаний процедуры или функции устроен так же, как и раздел описаний основной программы. Здесь описываются так называемые локальные переменные и константы, типы (за исключением классов - классы можно описывать только глобально) а также вложенные процедуры и функции. Все такие локальные объекты доступны лишь внутри данной подпрограммы и не видны извне.

 

Proc1 Описать процедуру , вычисляющую третью степень числа A и возвращающую ее в переменной B (A - входной, B - выходной параметр; оба параметра являются вещественными). С помощью этой процедуры найти третьи степени пяти данных чисел.

Вход: 2  3        4        5        6.8

Выход: 8  27      64      125    314.432

program proc1;

Var a , b : real ; // a , b - глобальные переменные

i: integer;

Procedure PowerA3 (a: real; var b: real); // процедура

Begin

b:=sqr(a)*a;

end;

Begin

writeln ('введите числа');

for i:=1 to 5 do

Begin

readln (a);

PowerA3 (a,b); { вызов процедуры PowerA3

                               с переменными a -входной, b -выходной параметр}

writeln (a,'^3=',b);

end ;

End .

 

Proc9 Описать процедуру , добавляющую к целому положительному числу К слева цифру D (D - входной параметр целого типа, лежащий в диапазоне 1-9, К - параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры последовательно добавить к данному числу К слева данные цифры  и , выводя результат каждого добавления.

Вход: 534             0        7

Выход: 70534

program proc9;

var i,k,d,a,fl: integer;

procedure AddLeftDigit (var d,k: integer);

var t: integer;

Begin

t:=k;

if fl=1 then d:=10*d;

if d=0 then fl:=1;

while k>0 do

Begin

d:=d*10;

k:=k div 10;

   end;

k:=d+t;

end;

Begin

write ('vvedi chislo ');

readln (k);

for i:=1 to 2 do

Begin

write ('vvedi zifru ');

readln (d);

AddLeftDigit (d,k);

   writeln (k);

   end;

End.

 

Proc17 Описать функцию  целого типа, определяющую количество корней квадратного уравнения  (A , B , C - вещественные параметры, ). С ее помощью найти количество корней для каждого из трех квадратных уравнений с данными коэффициентами. Количество корней определять по значению дискриминанта: .

Вход: 1 2 3       1 -2 1            1 2 -3

Выход: 0             1                        2

program func17;

var a,b,c: real;

function RootsCount (var a,b,c: real): integer;

var d: real;

Begin

d:=sqr(b)-4*a*c;

if d<0 then RootsCount:=0

else if d=0 then RootsCount:=1

       else RootsCount:=2;

end;

Begin

readln (a,b,c);

a:=RootsCount (a,b,c);

writeln (a);

End.

 

Proc25 Описать функцию  логического типа, возвращающую True, если целый параметр K (>0) является квадратом некоторого целого числа, и False в противном случае. С ее помощью найти количество квадратов в наборе из 10 целых положительных чисел.

Вход: 1 2 3 4 5 6 7 8 9 11

Выход: 3

//function Trunc(x: real): integer; - Возвращает целую часть числа x

program func 25;

var i, k, x: integer;

function IsSquare (var k: integer): boolean;

Begin

if trunc(sqrt(k)) = sqrt(k) then IsSquare:=true

  else IsSquare:=false;

end;

Begin

writeln (' vvedi chislo');

for i:=1 to 10 do

Begin

readln (k);

if IsSquare(k) then inc(x);

end;

writeln ('kol-vo kvadratov: ', x);

End .

 

РЕКУРСИЯ

Подпрограммы в Паскале могут обращаться сами к себе. Такое обращение называется рекурсией. Для того чтобы такое обращение не было бесконечным, в тексте подпрограммы должно быть условие, по достижению которого дальнейшее обращение к подпрограмме не происходит.

 

{ Вычислить A^N}

program recur;

var a,b: real;

n: integer;

procedure Power (a: real; n: integer; var b: real);

Begin

if n=0 then b:=1

Else

Begin

Power(a,n-1,b);

b:=b*a;

end ;

end ;

Begin

read (a,n);

Power (a,n,b);

writeln (a,'^',n,'=',b);

End.

 

 

{Сосчитать N!}

program recur2;

var N,a: integer;

function fakt (n: integer): integer;

Begin

if n=1 then fakt:=1

Else

fakt:=n*fakt(n-1);

end ;

Begin

read (n);

a:=fakt(n);

writeln (n,'!=',a);

End .

 

 

ПРОДОЛЖЕНИЕ СЛЕДУЕТ…

 

 


Дата добавления: 2019-09-13; просмотров: 318; Мы поможем в написании вашей работы!

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






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