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

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

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

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

Урок №83.1. Особенности передачи параметров процедур и функций.

В Паскале можно выделить два типа подпрограмм:

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

Структура процедуры в Паскале представлена так:

Процедуры и функции Паскаль

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

var имя параметра: имя типа;

Формальные параметры разделяются запятыми; ключевое слово var в некоторых случаях может быть опущено. Когда параметры имеют одинаковый тип, то имена этих параметров перечисляют чрез запятую, указывая в конце после знака «:» имя соответствующего типа.

Когда описывают параметры, то можно пользоваться только стандартными именами типов, которые определены при помощи команды type. Процедуры вызываются с помощью оператора, имеющего следующую структуру:

имя процедуры(список фактических параметров);

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

Программирование на Си — Урок 6 — процедуры, функции, параметры и разгадка тайны int main

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

Читайте также:
Государственная программа продажи автомобилей

имя функции:=результат;

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

  1. количество формальных параметров = количество фактических параметров;
  2. фактические и формальные параметры должны обладать одним и тем же порядком следования и типом.

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

Пример программы на применение процедуры в языке Pascal

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

Процедуры и функции Паскаль

Пример программы на использование функции в языке Pascal

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

Процедуры и функции Паскаль

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

Источник: kvodo.ru

Организация программ с использованием процедур и функций

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

procedure Имя_процедуры (Список параметров);

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

Имя_процедуры (Список параметров);

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

Function Имя_функции (Список параметров): Тип_результата;

Процедуры и функции помещаются в главной программе после раздела var и перед bеgіn основного блока программы[1-8].

По вещественному числу а>0 вычислить величину

Составить блок схему алгоритма и программу.

var t:real; — вспомогательные переменные

st1,st2,st3:real; — вспомогательные переменные

a,a2,a3:real; — промежуточные переменные

t1,t2,t3:real; — вспомогательные переменные

Function pow1(x, v: real): real; — функция для возведения числа x в степень v

if (v = 0.0) then — проверка условия v>0

if (x = 0.0) then — — проверка условия x<>0

pow1:= exp(v*ln(x)) — вычисление числа в заданной степени

Источник: studbooks.net

5.3 Справки по структуре и операторам Паскаль-программы, использующей пользовательские процедуры и функции

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

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

Правило расположения описаний процедур и функций относительно друг друга: описание вызывающей подпрограммы должно быть ниже описания вызы­ваемой подпрограммы, иначе следует использовать директиву forward (п. 5.3.2).

Структура Паскаль-программы с процедурами и/или функциями:

Function Func1 (. ):Real;

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

Читайте также:
Почему в программе zoom нету звука

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

5.3.2 Описание процедуры. Оператор процедуры.

Процедура представляет собой программу, которая может вызы­ваться другой программой, и служит для выполнения любого рода действий (т.е. диапазон возможностей процедуры — такой же, как у любой программы).

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

Структура описания процедуры:

— любой допустимый идентификатор, напр., Proc1.

Список формальных параметров — последовательность идентификаторов (имен) формальных параметров и их типов, напр., Step:real,

Mas: Туре_mas. разделенных запятой.

Список формальных параметров может включать в себя параметры-значения, параметры-переменные (перед ними должно стоять ключевое слово Var), параметры процедуры (перед ними должно стоять ключевое слово Procedure) и параметры-функции (перед ними должно стоять ключевое слово Function), нетипизированные параметры, перед которыми должно стоять служеб­ное слово Var и отсутствует указание типа.

— одна из директив: Interrupt, External, Assanbler, Inline, Forward.

При выполнении лабораторной работы может быть использована дирек­тива опережающего описания Forward. Опережающее описание заключается в том, что объявляется лишь заголовок процедуры, ее тело заменяется зарезервиро­ванным словом Forward, а само тело процедуры записывается в другом месте той же программы.

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

Между формальными и фактическими параметрами должно быть полное соответствие, т.е. формальных и фактических параметров должно быть одинако­вое количество; порядок следования фактических и формальных параметров должен быть один и тот же; тип каждого фактического параметра должен совпа­дать с типом соответствующего ему формального параметра.

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

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

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

Вызов процедуры осуществляется отдельным оператором. На блок-схемах вызов процедуры обозначается прямоугольником с двойными вертикальными стенками. Блок-схема же самой процеду­ры отличается от обычной программы тем, что вместо слова «Нача­ло» в стартовый овал вписывается список входных параметров, а вме­сто слова «Конец» — список выходных параметров процедуры.

Рис. 5.1. Алгоритм процедуры вывода

Рис. 5.2. Блок-схема процедуры ввода двумерного массива.

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

Читайте также:
Как перенести программу на компьютере

procedure Outp(a: massiv; N,M: integer);

for j :=1 to M do

Как видно, у этой процедуры выход­ных параметров вообще нет. При на­писании текста процедуры предпола­галось, что в основной программе, из которой будет вызываться процедура, описан тип-массив massiv. Теперь для того, чтобы вывести на экран массив С (5×3) нужно использовать оператор Outp(C,5,3).

Если процедура должна вводить данные в массив, то ей нужно сооб­щить его размеры, а она запросит ввод с клавиатуры нужного количества дан­ных, запишет их в массив, и вернет этот массив в основную программу. Таким образом, массив для этой про­цедуры является выходным парамет­ром, а значит, должен быть описан как параметр-переменная. Блок-схема данной процедуры отличается от пре­дыдущей только изменением роли па­раметра-массива (см. рис. 5.2).

procedure Inp(var A:massiv; N,M:integer);

for i:=1 to N do begin

for j:=1 to M do read(a[i,j]); readln;

Пример 1. Ввод исходных значений с использованием процедуры. В данном случае t – это текст, выводимый на экран, а x – вводимая переменная.

procedure Vvod(t:string; var x:real);

5.3.3 Описание функции. Указатель функции.

Функция представляет собой подпрограмму специального вида, основной задачей которой является определение какой-либо одной ве­личины простого типа. Таким об­разом, имя функции всегда связано с некоторой величиной простого типа, вычисление которой этой функцией производится.

— любой допустимый идентификатор, напр., Fun1;

— последовательность идентификаторов (имен) формальных параметров и их типов, напр., Step:real, Mas: Type_mas, . разделенных запятой;

— тип возвращаемого функцией результата, напр. Integer, Real, и др.

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

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

Пример2. Вычисление факториала числа (n+1)

var y:real; n:integer;

Function Factorial (n:integer): Real;

writeln(’значение факториала равно=’,y:3:2);

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

5.3.4 Локализация имен в Турбо-Паскале.

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

Любое имя (константы, типа, переменной, процедуры или функции) опре­делено только в пределах той процедуры или функции, в которой оно описано. Область действия распространяется на все внутренние процедуры или функции.

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

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru