Студопедия — ПРОЦЕДУРЫ. СПОСОБЫ ПЕРЕДАЧИ ПАРАМЕТРОВ
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

ПРОЦЕДУРЫ. СПОСОБЫ ПЕРЕДАЧИ ПАРАМЕТРОВ






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

- если в основную программу должна быть возвращена величина нескалярного типа (например, массив),

- если в основную программу должно быть возвращено несколько значений,

- если в основную программу ничего не должно возвращаться.

Описание процедур имеет следующий вид:

Procedure < имя процедуры > [(< список формальных параметров >)];

< описательная часть >

begin

< тело процедуры >

end;

Обращение к процедуре производится по следующей схеме:

< имя процедуры > [(< фактические параметры >)];

Вызов процедуры осуществляется отдельной командой, то есть вызов внутри операторов присваивания и вывода недопустим.

 

И в процедурах, и в функциях формальные параметры делятся на два типа:

1) параметры, передаваемые по значению,

2) параметры, передаваемые по ссылке.

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

 

Описание параметров, передаваемых по ссылке (параметры-переменные):

Var < список переменных >:< тип >;

Описание параметров, передаваемых по значению (параметры-значения):

< список переменных >:< тип >;

 

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

 

Рассмотрим отличие этих двух способов.

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

Пример.

Program a;

Var b,c:integer;

 

Procedure Q(Var x,y:integer);

Begin

X:=5;

Y:=10

End;

 

Begin

B:=1; c:=2;

Q(b,c);

Write(b,c)

End.

После выполнения процедуры осуществляется возврат на оператор основной программы, который следует за вызовом процедуры.

При выполнении данной программы на экран будет выведено 5 и 10.

 

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

Пример.

Program a;

Var b,c:integer;

Procedure Q(X,Y:integer);

Begin

X:=5;

Y:=10

End;

 

Begin

B:=1; c:=2;

Q(b,c);

Write(b,c)

End.

При выполнении данной программы на экран будет выведено 1 и 2.

 

Обычно параметры-значения используются для передачи в подпрограмму исходных данных, а параметры-переменные – для возврата результата.

Запишем с использованием процедуры программу вычисления площади четырёхугольника:

 

Program geron;

Var a,b,c,d,e,s1,s2:real;

 

Procedure Square(x,y,z:real; Var s:real);

Var p:real;

Begin

p:=(x+y+z)/2;

S:=sqrt(p*(p-x)*(p-y)*(p-z))

End;

 

Begin

Readln(a,b,c,d,e);

Square(a,b,e,S1);

Square(c,d,e,S2);

Writeln(‘S=’,S1+S2)

End.

 

В качестве параметров-значений можно передавать и переменные, и константы. В качестве параметров-переменных – только переменные. Например, будет ошибочной запись:

Square(5,6,8,10).

 

Задача 1. Написать программу, запрашивающую 5 целых чисел (N<=999999) и выводящих в текстовый файл все цифры этих чисел через запятую в обратном порядке.

Program number;

Var a:longint;

i:byte;

f:text;

 

procedure cifra(x:longint);

var k:byte;

begin

while x<>0 do

begin

k:=x mod 10;

write(f,k,’,’);

x:=x div 10

end;

writeln(f)

end;

 

Begin

assign(f,’f.dat’);

rewrite(f);

for i:=1 to 5 do

begin

read(a);

cifra(a)

end;

close(f)

End.

 

Задача 2. Что получится в результате работы программы:

 

Program example;

Var a,b,c:integer;

 

Procedure One(x,y:integer; Var z:integer);

Begin

X:=y+2; y:=z*3; z:=5;

Write(x,y,z)

End;

 

Procedure Two(x:integer; var z,y:integer);

Begin

X:=y+z; y:=y+10;

Write(x,y,z)

End;

 

Begin

A:=1; b:=2; c:=3;

Two (b,a,c); write(b,a,c);

One (a,b,c); write(a,b,c)

End.

 

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

В Паскале действует правило: каждый программный объект должен быть описан перед своим использованием. То есть описание объекта должно предшествовать его первому появлению в других программных фрагментах. Кроме того, внутренняя подпрограмма не может вызывать подпрограмму, по отношению к которой она является вложенной.

 







Дата добавления: 2015-08-12; просмотров: 327. Нарушение авторских прав; Мы поможем в написании вашей работы!



Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

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

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

Значення творчості Г.Сковороди для розвитку української культури Важливий внесок в історію всієї духовної культури українського народу та її барокової літературно-філософської традиції зробив, зокрема, Григорій Савич Сковорода (1722—1794 pp...

Постинъекционные осложнения, оказать необходимую помощь пациенту I.ОСЛОЖНЕНИЕ: Инфильтрат (уплотнение). II.ПРИЗНАКИ ОСЛОЖНЕНИЯ: Уплотнение...

Приготовление дезинфицирующего рабочего раствора хлорамина Задача: рассчитать необходимое количество порошка хлорамина для приготовления 5-ти литров 3% раствора...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия