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

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

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






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

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

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

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

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

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; просмотров: 322. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

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

Функциональные обязанности медсестры отделения реанимации · Медсестра отделения реанимации обязана осуществлять лечебно-профилактический и гигиенический уход за пациентами...

Определение трудоемкости работ и затрат машинного времени На основании ведомости объемов работ по объекту и норм времени ГЭСН составляется ведомость подсчёта трудоёмкости, затрат машинного времени, потребности в конструкциях, изделиях и материалах (табл...

Гидравлический расчёт трубопроводов Пример 3.4. Вентиляционная труба d=0,1м (100 мм) имеет длину l=100 м. Определить давление, которое должен развивать вентилятор, если расход воздуха, подаваемый по трубе, . Давление на выходе . Местных сопротивлений по пути не имеется. Температура...

БИОХИМИЯ ТКАНЕЙ ЗУБА В составе зуба выделяют минерализованные и неминерализованные ткани...

Типология суицида. Феномен суицида (самоубийство или попытка самоубийства) чаще всего связывается с представлением о психологическом кризисе личности...

ОСНОВНЫЕ ТИПЫ МОЗГА ПОЗВОНОЧНЫХ Ихтиопсидный тип мозга характерен для низших позвоночных - рыб и амфибий...

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