Студопедия Главная Случайная страница Обратная связь

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

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





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

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

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

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

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

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




Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


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


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


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

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

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

Что происходит при встрече с близнецовым пламенем   Если встреча с родственной душой может произойти достаточно спокойно – то встреча с близнецовым пламенем всегда подобна вспышке...

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

Машины и механизмы для нарезки овощей В зависимости от назначения овощерезательные машины подразделяются на две группы: машины для нарезки сырых и вареных овощей...

Классификация и основные элементы конструкций теплового оборудования Многообразие способов тепловой обработки продуктов предопределяет широкую номенклатуру тепловых аппаратов...

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