Структура описания процедур похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, переменных. Исполняемая часть содержит собственно операторы процедур.
Формат описания процедуры имеет вид:
procedure имя процедуры (формальные параметры);
раздел описаний процедуры
исполняемая часть процедуры
Формальные параметры в заголовке процедур и функций записываются в виде:
var имя параметра: имя типа
и отделяются друг от друга точкой с запятой (служебное слово var может отсутствовать, об этом см. ниже). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. Список формальных параметров может отсутствовать.
Вызов процедуры производится оператором, имеющим следующий формат:
имя процедуры(список фактических параметров);
Список фактических параметров — это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.
Решение задач в процедурном программировании с использованием функций и п
Пример программы с использованием процедуры поиска максимума из двух целых чисел.
var x,y,m,n: integer;
procedure MaxNumber(a,b: integer; var max: integer);
begin
if a>b then max:=a else max:=b;
end;
begin
write(‘Введите x,y ‘);
readln(x,y);
MaxNumber(x,y,m);
MaxNumber(2,x+y,n);
writeln(‘m=’,m,’n=’,n);
end.
2. Передача параметров
Передача параметров может производиться двумя способами — по значению и по ссылке. Параметры, передаваемые по значению, называют параметрами-значениями, передаваемые по ссылке — параметрами-переменными. Последние отличаются тем, что в заголовке процедуры перед ними ставится служебное слово var.
При первом способе (передача по значению) значения фактических параметров копируются в соответствующие формальные параметры. При изменении этих значений в ходе выполнения процедуры исходные данные (фактические параметры) измениться не могут. Поэтому таким способом передают данные только из вызывающего блока в подпрограмму (т.е. входные параметры). При этом в качестве фактических параметров можно использовать и константы, и переменные, и выражения.
При втором способе (передача по ссылке) все изменения, происходящие в теле процедуры с формальными параметрами, приводят к немедленным аналогичным изменениям соответствующих им фактических параметров. Изменения происходят с переменными вызывающего блока, поэтому по ссылке передаются выходные параметры. При вызове соответствующие им фактические параметры могут быть только переменными.
Pascal Процедуры и функции 10 классы
Выбор способа передачи параметров при создании процедуры (функции) происходит в соответствии со сказанным выше: входные параметры нужно передавать по значению , а выходные — по ссылке (var) . Практически это сводится к расстановке в заголовке процедуры описателя var при всех параметрах, которые обозначают результат работы подпрограммы.
Источник: przpascal12.blogspot.com
Контрольная работа: Процедуры и функции в языке Паскаль
Широко распространена в программах форма повторяемости, когда одна и та же последовательность действий должна выполняться на различных этапах информации. В программах такого рода в различных местах встречаются фрагменты, одинаковые по выполняемым действиям и различающиеся только в значениях исходных данных.
При составлении программы приходиться задавать одну и ту же группу операторов, соответствующую каждому из повторяющихся фрагментов. Для более эффективного программирования подобных повторений в языке введено понятие подпрограммы . Повторяющаяся группа операторов оформляется в виде самостоятельной единицы – подпрограммы, записывается однократно, а в соответствующих местах программы обеспечивает лишь обращение к ней. Использование аппарата подпрограммы позволяет сократить объем и улучшить структуру программы с точки зрения наглядности и читаемости. Подпрограмма может быть рассмотрена как самостоятельная программа (со своими входными и выходными данными).
В языке Паскаль подпрограммы реализуются в виде процедур и функций , которые вводятся в программу с помощью своего описания.
1.1 Описание процедуры.
Процедуры описываются в специальном разделе описательной части программы вслед за разделом переменных.
Любая процедура состоит, аналогично программе, из заголовка процедуры и блока.
Где PROCEDURE – служебное слово,
ИМЯ – имя процедуры,
СПИСОК ПАРАМЕТРОВ — перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов. Параметры, перечисленные в списке, называются формальными . Допускается описание процедуры, несодержащей формальных параметров:
PROCEDURE ;
Содержательная часть процедуры представляет собой блок и состоит, следовательно, из раздела описаний (меток, констант, типов, переменных, процедур, и функций) и раздела операторов, представляющего собой составной оператор BEGIN – END. Заканчивается блок процедуры точкой с запятой.
Оформить в виде процедуры алгоритм вычисления степени y=xn c натуральным показателем n .
PROCEDURE STEP1 (N:INTEGER;X:REAL;VAR Y:REAL;)
VAR I:INTEGER;
FOR I:=1 TO N DO
В заголовке процедуры с именем STEP 1 перечислены параметры X , N , определяющие исходные данные процедуры, и параметр Y, обозначающий значение исходной степени – результат выполнения процедуры. Указан также тип всех формальных параметров.
Если в заголовке процедуры параметры указаны без слова VAR, то это параметры-значения. Параметры-значения могут изменяться внутри процедуры, но для внешней программы это изменение окажется незамеченным.
Для получения результатов в основной программе используются параметры-переменные. Эти параметры перечисляются после служебного слова VAR с обязательным указанием типа.
Тело процедуры состоит:
1) Из описательной части, где определена переменная I, необходимая и имеющая смысл только внутри данной процедуры и называемая локальной переменной (значение локальной переменной недоступно в основной программе);
2) Из составного оператора BEGIN-END, реализующего алгоритм вычисления степени действительного числа с натуральным показателем.
Это то же вычисление оформим в виде процедуры без параметров:
PROCEDURE STEP2;
VAR I:INTEGER;
FOR I:=1 TON DO Y:=Y*X;
В этом случае процедура STEP 2 не содержит списка формальных параметров и работает с локальной переменной I, описанной в блоке процедуры, и переменными X , N , Y называются глобальными по отношению к процедуре STEP 2. Значение глобальных переменных доступны и могут быть использованы в любой точке основной программы (в частности, внутри данной процедуры).
Функция – это подпрограмма, результат выполнения которой есть единственное скалярное значение, присваиваемое имени этой функции. Следовательно, функции являются частным случаем процедур и принципиально отличаются от них тем, что, во-первых, результат выполнения функции – одно значение, а процедуры – одно или несколько; во-вторых, результат выполнения функции передается в основную программу, как значение имени этой функции, а результаты выполнения процедуры – как значения ее параметров.
Где FUNCTION – служебное слово,
ИМЯ – имя функции,
СПИСОК ПАРАМЕТРОВ – перечень формальных параметров (исходных
данных) с указанием их типов,
ТИП – тип результата: значение, которое должно приобретать имя функции.
Допускается описание функции без параметров:
В содержательной части программы-функции имени должно быть присвоено некоторое значение (значение ответа), т.е. имя хотя бы один раз должно присутствовать в левой части некоторого оператора присваивания.
Оформить в виде функции алгоритм вычисления степени Y=Xn :
FUNCTION STEP3 (N:INTEGER; X:REAL): REAL;
VAR I:INTEGER;
FOR I:=1 TO N DO
Y := Y * X ;
STEP 3:= Y
В заголовке функции с именем STEP 3 перечислены параметры N , X, определяющие ее исходные данные. Результат выполнения функции (значение локальной переменной Y ) присваивается ее имени STEP 3. Тип результата (тип функции) – REAL , который указывается в заголовке функции при ее описании. Введение локальной переменной Y не обязательно, но придает описанию функции более наглядный вид.
1.3 Обращение к подпрограммам.
Описание процедуры (или функции), расположенное в разделе описаний, само по себе никакого действия не вызывает. Чтобы исполнить процедуру (или функцию), необходимо в нужном месте программы поместить обращение к ней. Обращение к процедуре производится с помощью оператора процедуры, имеющего вид:
Где ИМЯ – имя процедуры, к которой происходит обращение,
СПИСОК АРГУМЕНТОВ – перечень конкретных значений (выражений) и имен, подставляемых на место формальных параметров процедуры при ее выполнении.
При вызове процедуры формальные параметры, указанные в заголовке, заменяются аргументами в порядке их следования: первому слева параметру в списке ставится в соответствие первый аргумент, второму – второй и т.д. Аргументы, перечисленные в операторе процедуры, называются также фактическими параметрами. Число, тип и порядок следования формальных и фактических параметров должно совпадать. Структура программы, содержащей процедуру, имеет вид:
Cоставить программу вычисления степени Z=An, где n – целое число и A<>0. Степень с целым показателем определяется следующим образом:
Учитывая, что 1/An = (1/A)n и используя процедуру STEP 1, описанную в пункте 1.1, составим алгоритм рис.1 а), б) и программу.
PROGRAM STEP4;
VAR M:INTEGER;
A , Z : REAL ;
PROCEDURE STEP1 (N:INTEGER;X:REAL;VAR Y:REAL);
VAR I:INTEGER;
IF M=0 THEN Z:=1
WRITELN(A:8:3,’ В степени ’,M:3,’ равно ’,Z)
STEP1
STEP1
В программе оператор процедуры использован дважды, и каждый раз он вызывает из описательной части программы процедуру STEP 1. В теле процедуры произойдет замена формальных параметров N , X , Y на фактические M , A , Z первый раз и на M ,1/ A , Z второй раз. Затем выполняется совокупность действий, предусмотренных операторами процедуры, и в программу будет возвращен результат Z. Возврат осуществляется к оператору программы STEP 4, следующему за оператором вызова процедуры. Очень важно понимать суть и механизм замены формальных параметров фактическими.
Формальные параметры – это переменные, фиктивно (формально) присутствующие в процедуре и определяющие тип и место подстановки фактических параметров.
Фактические параметры – это реальные объекты (программы, заменяющие в теле процедуры при ее вызове формальные параметры). Над этими объектами и производятся действия, предусмотренные операторами тела процедуры.
Имена формальных и фактических параметров целесообразно выбирать различными, что сделает программу более наглядной.
Обращение к функции осуществляется аналогично обращению к стандартным функциям (sin , cos , tan и т.д.) и является разновидностью операнда в выражениях в отличие от вызова процедуры, являющегося разновидностью оператора. В этом месте выражения, где это необходимо, записывается имя функции, вслед за которым в скобках перечисляются фактические параметры. Если вызывается функция без параметров, то указывается только ее имя.
Составить программу вычисления
используя функцию STEP 3, описанную в п. 1.2., (A – действительное, n — целое).
PROGRAM STEP 6;
VAR M: INTEGER;
FUNCTION STEP3(N: INTEGER; X: REAL): REAL;
VAR M: INTEGER;
FOR I:=1 TO N DO
Источник: ronl.org
Обращение к процедуре в программе имеет вид паскаль
Сообщений: 13
Pascal. обращение к процедуре
program pro231; uses crt; type zapis=record data:string[4]; kod_cex:string[6]; kod_mat:string[20]; potreb:real; end; base=array[1..1000] of zapis; cc=string[6]; procedure form_source(var n:integer;var mass:base); var i:integer; begin write(‘Введите количество записей:’); readln(n); for i:=1 to n do begin writeln; writeln(‘Ввод ‘,i,’ записи’); write(‘Введитедату:’); readln(mass[i].data); write(‘Введите код цеха:’); readln(mass[i].kod_cex); write(‘Введите код материала:’); readln(mass[i].kod_mat); write(‘Введите потребность(пример-123456.23):’); readln(mass[i].potreb); end; end; procedure form_final(var mass:base;n:integer;var code:cc;var outmass:base;var nk:integer); var i:integer; begin nk:=0; writeln; writeln(‘Введите код необходимого цеха:’); readln(code); for i:=1 to n do begin if mass[i].kod_cex=code then begin outmass[i]:=mass[i]; inc(nk); end; end; end; procedure outrec(var outmass:base;nk:integer;code:cc); var i:integer; begin clrscr; writeln(‘Записи по цеху №’,code); for i:=1 to nk do begin writeln(i,’)Дата: ‘,outmass[i].data,’;’); writeln(‘ Кодцеха: ‘,outmass[i].kod_cex,’;’); writeln(‘ Кодматериала: ‘,outmass[i].kod_mat,’;’); writeln(‘ Потребность:’,outmass[i].potreb:2:2,’.’); writeln; end; end; var mass,outmass:base; n,nk:integer; code:cc; begin clrscr; form_source(n,mass); form_final(mass,n,code,outmass,nk); outrec(outmass,nk,code); writeln(‘Нажмителюбуюклавишу’); readkey; end.
Подскажите, где обращение к процедуре, выделенной коричневым цветом! Очень срочно!
Последний раз редактировалось Stilet; 10.11.2012 в 00:07 .
Источник: www.programmersforum.ru