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



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа № 3. Подпрограммы

Поиск

Процедуры и функции

В языке Object Pascal основной программной единицей является подпрограмма. Различают два вида подпрограмм: процедуры и функции. Процедуры и функции представляют собой относительно самостоятельный участок программы, оформленный определённым образом и наделённый именем. По этому имени и происходит вызов процедуры или функции. Чтобы выполнить инструкции подпрограммы, надо вызвать эту подпрограмму. Отличие функции от процедуры заключается в том, что с именем функции связано значение, поэтому имя функции можно использовать в выражениях.

Вот пример простой процедуры:

procedure Sample1(index:integer);vari:integer;begini:=index/2;end;

Процедура имеет имя Sample1. После имени, в скобках, объявляются переменные, для передачи значения в процедуру. В разделе Var, где объявляются переменные, объявлена локальная переменная i типа integer (целое число). Это локальная переменная, поэтому её можно использовать только в теле процедуры. После выхода из процедуры переменная уничтожается. В блоке Begin...end; происходят действия над переменными, объектами и др. т.е образуются действия процедуры. В данном случае, я присваиваю переменной i переменную index делённую на 2. Для вызова этой процедуры достаточно только набрать её имя, а значит Sample1. Если процедура относится к какому-то объекту, например к форме, то в объявлении нужно написать имя объекта, а после точки имя самой процедуры. Например так, процедура относится к объекту Form1:

procedure Form1.Sample2;beginSample1(20);//вызываем ранее созданную процедуруend;

Здесь вызывается процедура Sample1, которую я написал ранее. Имена всех процедур должны начинаться с латинских букв, но могут заканчиваться цифрами. Нельзя пользоваться русскими буквами и начинать имена процедур с цифр. Если процедура не относится к объекту, то её надо описать перед использованием, например, такой код приведёт к ошибке:

procedure Form1.Sample2;beginSample1(20);end; procedure Sample1(index:integer);vari:integer;begini:=index/2;end;

Это не верно, потому что процедура Sample1 сначала используется, и только потом описывается. Компилятор это не поймёт и пошлёт тебя куда подальше, например в память по адресу 00F91203:) А вот так всё будет в норме:

procedure Sample1(index:integer);vari:integer;begini:=index/2;end; procedure Form1.Sample2;beginSample1(20);end;

Ну а если процедура относится к объекту, то проблем нет, потому что объект имеет область описания и эта область доступна компилятору:

typeTForm1 = class(TForm)procedure Sample1;procedure Sample3;end;

Теперь поговорим про функции: это те же процедуры, только они возвращают какое-то значение, то есть сами имеют какой-то тип. Т.е. они могут использоваться в программе наряду с выражениями и переменными:

function SampleFunc:integer;vari:integer;begini:=40;result:=i;end; procedure Form2.Sample4;vary:integer;beginy:=SampleFunc;end;

В этом примере функция SapleFunc имеет тип integer. Для возврата значения нужно его присвоить к переменной Result. В процедуре Sample4 происходит присваивание переменной y функции. После выполнения процедуры переменная y,будет содержать в себе 40. Все остальные правила объявления функций такие же, как и у процедур.

 

При программировании в Delphi работа программиста заключается в основном в разработке процедур (подпрограмм) обработки событий.

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

Как уже говорилось, процедуры и функции представляют собой относительно самостоятельные фрагменты программы, оформленные особым образом и снабженные именем. Упоминание этого имени в тексте программы называется вызовом процедуры (функции). Оформление алгоритмов, которые используются в программе несколько раз удобнее при помощи подпрограмм, так как процедура (функция) существует в программе в единственном экземпляре, а обращаться к ней можно многократно.

 

Имеются локальные переменные, которые объявлены в процедуре (функции) и действуют только в подпрограмме, и глобальные переменные, которые действуют во всей программе (включая подпрограммы).

 

Если подпрограмма должна изменить значение только одной переменной основной программы, то её следует оформить как функцию.

В остальных случаях подпрограмму нужно оформить как процедуру. При описании переменных подпрограмма имеет дело с параметрами.

 

Различают формальные и фактические параметры.

Параметры, определённые при описании процедуры (функции), называются формальными. Параметры, задаваемые при вызове процедуры (функции), называются фактическими.

 

Если в заголовке перед параметром стоит var, то этот параметр считается параметром-переменной, соответствующий ей фактический параметр может быть только именем переменной. Если же перед параметром var не стоит, то это – параметр-значение и его можно вызывать фактическим параметром, имеющим конкретное значение или выражение. Например,

procedure pr(a: integer; var s: real);

вызывается в разделе операторов

pr(5*6+2, s1);.

Структура процедуры

Процедура начинается заголовком, за которым следуют:

- раздел объявления констант;

- раздел объявления типов;

- раздел объявления переменных;

- раздел инструкций.

Объявление процедуры в общем виде выглядит следующим образом:

procedure Имя (Список Параметров); const // начало раздела объявления констант type // начало раздела объявления типов var // начало раздела объявления переменных begin // начало раздела инструкций end;

 

Заголовок процедуры состоит из слова Procedure, за которым следует имя процедуры. Если у процедуры есть параметры, то они указываются после имени процедуры в скобках. Завершается заголовок процедуры символом " точка с запятой ".

Если в процедуре используются именованные константы, то они объявляются в разделе объявления констант, который начинается словом const.

За разделом констант следует раздел объявления типов, начинающийся словом type.

После раздела объявления типов идет раздел объявления переменных, в котором объявляются (перечисляются) все переменные, используемые в программе. Раздел объявления переменных начинается словом var.

За разделом объявления переменных расположен раздел инструкций. Раздел инструкций начинается словом begin и заканчивается словом end, за которым следует символ "точка с запятой". В разделе инструкций находятся исполняемые инструкции процедуры.

Ниже, в качестве примера, приведен фрагмент программы вычисления стоимости покупки — процедура summa.

procedure Summa; var cena: real; // цена kol: integer; // количество s: real; // сумма mes: string[255]; // сообщение begin cena:= StrToFloat (Form1.Edit1.Text); kol:= StrToInt(Form1.Edit2.Text); s:= cena * kol; if s > 500 then begin s:= s * 0.9; mes:= 'Предоставляется скидка 10%' + #13; end; mes:= mes+ 'Стоимость покупки: ' + FloatToStrF(s,ffFixed,4,2) +' руб.'; Form1.Label3.Caption:= mes; end;

 

Пример 1

Написать программу использования процедуры вывода строчек для оформления таблицы логарифмических чисел от 1 до 10.

 

 

 

 


Начало
‘Табл. логар. чисел’  
 
 
Конец
Line30
X:=1,10
Y:=ln x
x, y
Line30
I:=1,30
возврат
‘_’

program tab;

procedure line30;

vari: integer;

begin

for i:=1 to 30 do write ('-');

writeln;

end;

var x: integer;

y: real;

begin

writeln; ('таблица логарифмических чисел от 1 до 10');

line30;

for x:= 1 to 10 do

begin

y:= ln (x);

writeln (x:3, y: 8);

end;

line30;

end.

 

 

Структура функции

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

Объявление функции в общем виде выглядит следующим образом:

function Имя (Список Параметров): Тип; const // начало раздела объявления констант type // начало раздела объявления типов var // начало раздела объявления переменных begin // начало раздела инструкций result:= Значение; // связать с именем функции значение end;

Заголовок функции начинается словом function, за которым следует имя функции. После имени функции в скобках приводится список параметров, за которым через двоеточие указывается тип значения, возвращаемого функцией (тип функции). Завершается заголовок функции символом "точка с запятой".

За заголовком функции следуют разделы объявления констант, типов и переменных.

В разделе инструкций помимо переменных, перечисленных в разделе описания переменных, можно использовать переменную result. По завершении выполнения инструкций функции значение этой переменной становится значением функции. Поэтому среди инструкций функции обязательно должна быть инструкция, присваивающая переменной result значение. Как правило, эта инструкция является последней исполняемой инструкцией функции.

Ниже, в качестве примера, приведена функция FuntToKg, которая пересчитывает вес из фунтов в килограммы:

// Пересчет веса из фунтов в килограммы function FuntToKg(f:real):real; const // в России 1 фунт равен 409,5 гр. К=0.4095; // коэф.Пересчета begin result:= f * K; end;

Пример 2.

-1, a<0

Вычислить z= (sign x + sign y)* sign (x+y), где sign a = 0, a=0.

1, a>0

 

-
+
-
+
Начало
X,Y
Z:=(sign(x)+ sign(y)* sign(x+y)  
Конец
Sign(x)
A<0
Sign:=-1
A>0
Sign:=-1
Sign:=-1
возврат

 

program z;

var x, y, z: integer;

function sign (a: real): integer;

begin

if a<0 then sign: =-1

else определение функции sign(a)

if a>0 then sign:=1

else

sign: =0;

end;

begin

read (x,y);

z:=(sign(x) + sign (y))* sign (x+y); {вызовы функции sign()}

writeln ('z=', z);

end.

 

 



Поделиться:


Последнее изменение этой страницы: 2016-07-16; просмотров: 444; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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