Как вызывать процедуры в паскале

Как вызывать процедуры в паскале

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

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

Описание и вызов процедур и функций

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

Формат описания процедуры имеет вид:

Формат описания функции:

Формальные параметры в заголовке процедур и функций записываются в виде:

и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.

Вызов процедуры производится оператором, имеющим следующий формат:

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

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

Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.

Аналогичную задачу, но уже с использованием функций, можно решить так:

Волгоградский государственный педагогический университет
Кафедра алгебры, геометрии и информатики

Источник

Урок 13. Процедуры и функции в Pascal. Часть 2

Как вызывать процедуры в паскале. Смотреть фото Как вызывать процедуры в паскале. Смотреть картинку Как вызывать процедуры в паскале. Картинка про Как вызывать процедуры в паскале. Фото Как вызывать процедуры в паскале

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

Структура программы.

Программы на языке Паскаль состоят из заголовка программы, раздела описаний и тела программы. Раздел описаний может включать следующие подразделы: меток, констант, типов, переменных, процедур и функций. Последовательность подразделов в структуре программы произвольная, но естественно, что если вводится переменная нового типа, заданного в Туре, то подраздел Туре предшествует подразделу Var. Принцип нашего языка программирования «то, что используется, должно быть описано» сохраняется и для раздела описаний.

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

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

До этого момента времени мы использовали из раздела описаний только описание переменных и типов. На этом занятии мы начнем изучать процедуры. Структура процедуры повторяет структуру программы. Отличия выделены «полужирным» шрифтом.

Напишу простую программу с процедурой, складывающей два числа.

Итак, что вы видите? Точнее, что вам не понятно в данной программе? Я думаю, что вы не можете понять, почему перед z стоит var, а перед x, y — нет. Но всему свое время.

Как вызывать процедуры в паскале. Смотреть фото Как вызывать процедуры в паскале. Смотреть картинку Как вызывать процедуры в паскале. Картинка про Как вызывать процедуры в паскале. Фото Как вызывать процедуры в паскале

Обратимся к примеру, приведенному на рисунке выше. Слева приведен фрагмент текста основной программы, справа — процедура. Как только в теле программы объявляется имя процедуры с параметрами, выполнение «главного» тела прекращается, и управление вычислительными процессами передается процедуре. После выполнения процедуры осуществляется возврат на оператор основной программы, следующий за вызовом процедуры.

Немножко теории:
В любой программе все переменные делятся на два типа: локальные и глобальные. В нашей программы переменные а, b, с — глобальные, а х, у, z — локальные. Глобальные переменные — это переменные из раздела описаний основной части программы, а локальные — из раздела описаний процедур и функций. Локальные переменные существуют только в течение времени работы процедуры, определяются (создаются) при её вызове и исчезают после завершении работы процедуры.

В программе определены переменные a, b, c. В процедуре x, y, z — её параметры, и они являются переменными процедуры. Причем между х, у и z существует большая разница.

Поясню ее очередным рисунком.

Как вызывать процедуры в паскале. Смотреть фото Как вызывать процедуры в паскале. Смотреть картинку Как вызывать процедуры в паскале. Картинка про Как вызывать процедуры в паскале. Фото Как вызывать процедуры в паскале

Параметры.

При описании процедуры указывается список формальных параметров. Каждый параметр является локальным по отношению к описываемой процедуре, к нему можно обращаться только в пределах данной процедуры (в нашем примере х, у, z — формальные параметры). Фактические параметры — это параметры, которые передаются процедуре при обращении к ней (а, b, с — фактические параметры). Число и тип формальных и фактических параметров должны совпадать с точностью до их следования.

Параметры-значения.

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

Параметры-переменные.

Другими словами, передача параметров по ссылке. Это те формальные параметры, перед которыми стоит идентификатор var. Передается адрес фактического параметра (обязательно переменной), после этого формальный
параметр становится его синонимом. Любые операции с формальным параметром выполняются непосредственно над фактическим параметром.

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

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

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

Небольшое послесловие:

Каждая процедура должна иметь одну точку входа и одну точку выхода (то есть использование goto, break, exit нежелательно), использование глобальных переменных в процедуре следует свести к минимуму, взаимодействие с процедурой должно осуществляться (по возможности) только через параметры.
Постепенно вы должны отказаться от технологии неструктурированного программирования. Сегодня мы с вами осваиваем структурную технологию разработки программ, при этом на каждом этапе текущая задача разбивается на ряд подзадач, определяя тем самым некоторое количество отдельных подпрограмм. Концепция процедур и функций — один из механизмов второго витка развития технологий программирования, а именно, структурного проектирования.

Источник

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

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

Описываются подпрограммы между разделом описания переменных и началом тела основной программы. Так выглядит структура всей программы в Pascal:

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

После описания, подпрограммой можно пользоваться посредством ее имени. При этом управление из места вызова передается соответствующей подпрограмме.

Как вызывать процедуры в паскале. Смотреть фото Как вызывать процедуры в паскале. Смотреть картинку Как вызывать процедуры в паскале. Картинка про Как вызывать процедуры в паскале. Фото Как вызывать процедуры в паскале

Для передачи данных, после объявления имени подпрограммы, в круглых скобках необходимо указать параметры, которые в свою очередь можно разделить на передаваемые и возвращаемые. Передаваемые параметры – это переменные, которые подпрограмма получает из главной части программы, а возвращаемые – отдает (возвращает) ей.

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

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

Процедура:

Вызов процедуры:
( );

Функция:

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

Теперь более детально рассмотрим в отдельности каждый вид подпрограмм.

Пользовательские процедуры

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

Напишем пример программы, показывающей принцип работы простой процедуры.

Программа выводит сумму целых чисел заданного диапазона. Имя процедуры прописано после служебного слова, определяющего, что создана именно процедура. Далее идет заголовок, где первые две переменные – это формальные параметры, в которые передается значение от фактических k и n. Переменная rez возвращает результат и называется параметром-переменной (определяются после слова Var), а k и n – параметрами-значений. Локальная переменная – i, она описана сразу после заголовка процедуры. Вызывая, в основной части программы процедуру sum, в качестве передаваемых параметров мы указали три целочисленных переменных. Заметьте, что их количество соответствует числу формальных параметров. Порядок также важен, т. е. в переменную pk передается значение переменной k, в pn значение n и т. д.

В вышеизложенном примере было бы вполне уместным не использовать параметр-переменную rez, а определить ее локально. В этом состоит различие между процедурами и функциями в Pascal.

Пользовательские функции

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

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

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

Допустим необходимо вычислить наибольший общий делитель двух целых чисел. Результатом решения данной задачи будет одно число, поэтому мы воспользуемся именно функцией.

В конце описания функции, ее имени присваивается значение, которое впоследствии примет переменная nod. Как видите, в функцию из основной части передаются только два фактических параметра (m и n), что соответствует количеству формальных параметров. И если в заголовке процедуры после слова Var можно указать переменные, также относящиеся к числу формальных параметров, то в функции эта обязанность лежит на ее имени, принимающем после своей работы какое-то значение.

Источник

Pascal: Занятие № 7. Подпрограммы: процедуры в Pascal

Процедуры в Паскале

Подпрограмма — это фрагмент кода, который имеет свое имя и создается в случае необходимости выполнять этот код несколько (много) раз. Подпрограмма описывается единожды перед началом основной программы (до begin ). Компилятор пропускает данный фрагмент кода, пока в основной программе не встретит «вызов» подпрограммы, который выглядит как обращение к ней по имени (возможно, имени с аргументами, указанными в скобках).

Во многих языках программирования подпрограммы существуют только в виде функций. Однако в Паскале подпрограмма — и функция и процедура. Разница между ними станет очевидна в данном уроке.

Итак, рассмотрим синтаксис объявления и описания процедуры в Паскале

procedure pr; var i:integer; begin for i:=1 to 60 do begin <тело подпрограммы>write(‘*’); writeln; end; end; <конец подпрограммы>begin pr; <вызов процедуры>end.

В данном примере работы с процедурой в Паскале очевидно, что компилятор пропустит блок описания процедуры и дойдет до основной программы (9 строка кода). И только после того, как встретится вызов процедуры (10 строка), компилятор перейдет к ее выполнению, вернувшись к строке 1.

Процедуры с параметрами. Фактические и формальные параметры

Рассмотрим пример необходимости использования процедуры.

Особенность: Три похожие фигуры.

Алгоритм решения:

Как вызывать процедуры в паскале. Смотреть фото Как вызывать процедуры в паскале. Смотреть картинку Как вызывать процедуры в паскале. Картинка про Как вызывать процедуры в паскале. Фото Как вызывать процедуры в паскале

Решение на паскале:
Процедура:
Как вызывать процедуры в паскале. Смотреть фото Как вызывать процедуры в паскале. Смотреть картинку Как вызывать процедуры в паскале. Картинка про Как вызывать процедуры в паскале. Фото Как вызывать процедуры в паскале

uses GraphABC; procedure Tr( x, y: integer; color:system.Drawing.Color); begin MoveTo(x, y); LineTo(x, y-60); LineTo(x+100, y); LineTo(x, y); FloodFill(x+20, y-20,color); end; begin SetPenColor(clBlack); Tr(100, 100, clBlue); Tr(200, 100, clGreen); Tr(200, 160, clRed); end.

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

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

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

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

Процедуры с параметрами. Параметр-переменная
(передача параметра по ссылке)

В примере формальные параметры a и b служат для помещения в них сравниваемых чисел, а параметр-переменная max — для сохранения в ней максимального из двух чисел. Параметр-переменная или выходной параметр передает свое значение в основную программу (фактическому параметру m ), т.е. возвращает значение, тогда как формальные параметры-значения (входной параметр), наоборот, принимают значения из основной программы (из фактических параметров x и y ). Для параметра-переменной ( max ) используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры (ячейка m ).

Таким образом, сформулируем понятия:

Если в качестве формального параметра указана обычная переменная с указанием ее типа, то такой параметр есть параметр-значение или входной параметр ( a и b в примере). Тип данных формального параметра-значения должен соответствовать типу данных его фактического параметра ( a и b должны попарно соответствовать типу данных x и y ).

Если перед именем формального параметра в объявлении процедуры стоит служебное слово var, то такой параметр называется параметром-переменной или выходным параметром ( max в примере). Для него используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры ( m ). А передача такого параметра называется передачей по ссылке (ссылка на ту же ячейку в памяти). Фактический параметр, соответствующий параметру-переменной, может быть только переменной (не константой, не литералом и не выражением).

Как вызывать процедуры в паскале. Смотреть фото Как вызывать процедуры в паскале. Смотреть картинку Как вызывать процедуры в паскале. Картинка про Как вызывать процедуры в паскале. Фото Как вызывать процедуры в паскале
Словесный алгоритм:

Как вызывать процедуры в паскале. Смотреть фото Как вызывать процедуры в паскале. Смотреть картинку Как вызывать процедуры в паскале. Картинка про Как вызывать процедуры в паскале. Фото Как вызывать процедуры в паскале

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

const n = 10; var i:integer; a, b: array[1..n] of integer; procedure arr_out (k:integer; arr: array[1..n] of integer); var i: byte; begin write (‘вывод массива: ‘); for i := 1 to k do write (arr[i]:4); writeln; end; begin for i:=1 to n do a[i]:=random(10); arr_out (n, a); end.

Пояснение:
Тело основной программы:
— формирование элементов массива (с функцией random ).
— вызов процедуры с двумя параметрами: количество элементов, массив.
Тело процедуры:
— вывод элементов массива с использованием параметров

Продолжим нашу задачу:

const n = 10; var a, b: array[1..n] of integer; procedure arr_rand (k:integer; var arr: array[1..n] of integer); var i: byte; begin write (‘Заполнение массива случайными числами ‘); randomize; for i := 1 to k do arr[i]:=random(100); end; begin arr_rand (n, a); end.

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

procedure p(a: integer); begin a := 666; // изменяется только формальный параметр! end; begin var x := 555; p(x); Print(x); // 555 end.

procedure p(var a: integer); begin a := 666; end; begin var x := 555; p(x); Print(x); // 666 – фактический параметр изменился тоже! end.

Самостоятельная работа

X и Y — входные параметры, AMean и GMean — выходные параметры вещественного типа.
В основной программе: Для заданных A, B, C, D найти среднее арифметическое и среднее геометрическое для пар (A, B), (A, C), (A, D), используя созданную процедуру.

1 вариант: для 5 одномерных массивов определять произведение элементов каждого массива, используя процедуру с двумя параметрами — число элементов массива и параметр-переменная для вывода произведения.

2 вариант: для 5 одномерных массивов определять минимальный элемент каждого массива, используя процедуру с двумя параметрами — число элементов массива и параметр-переменная для вывода минимального элемента.

Источник

Урок 14. Описание и вызов процедуры

Урок из серии: «Язык программирования Паскаль«

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

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

На этом уроке вы научитесь определять и вызывать пользовательские процедуры.

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

В разделе описаний процедуры и функции определяют после раздела описания переменных (после раздела Var) и до до начала раздела операторов (до слова Begin).

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

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

Общий вид процедуры:

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

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

Через параметры- переменные из подпрограммы в основную программу передаются результаты. Перед параметрами-переменными ставится служебное слово Var.

Вызов процедуры

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

Общий вид вызова процедуры:

Фактические параметры — это параметры, которые передаются процедуре при обращении к ней. При вызове процедуры ее формальные параметры заменяются фактическими. Число и тип формальных и фактических параметров должны совпадать с точностью до их следования. Имя фактического параметра никак не связано с именем соответствующего формального параметра.

Пример 1. Оформить в виде процедуры алгоритм вычисления степени y = x n с натуральным показателем n.

Процедура имеет три параметра: первый параметр — основание степени, второй — показатель степени, а третий — это результат. Поэтому первые два параметра — это параметры значения, а третий — это параметр-переменная и перед ним надо написать слово Var.

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

Процедура вызывается по имени. В нашем примере, фактические параметры а, n и s передают свои значения соответствующим формальным параметрам x, y и st. После завершения работы процедуры переменные a и n имеют те же значения, что и при вызове, а s получает новое значение.

Вы научились определять и вызывать пользовательские процедуры. На следующем уроке рассмотрим пользовательские функции.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

PascalPascalABC.NET