Процедуры. Параметры-переменные.

ПроцедурыПроцедурой в Паскале называется именованная последова­тельность инструкций, реализующая некоторое действие. В нуж­ное место программы процедуру вызывают с помощью оператора вызова. После выполнения процедуры программа перейдет к вы­полнению оператора, следующего за оператором вызова. Формат описания процедуры:Рrocedure<Имя процедуры>(<форм. параметры>); <Раздел описаний> Begin<Тело процедуры>End;Формальные параметры — перечень имен для обозначения исходных данных и результатов работы процедуры, используе­мых для описания процедуры, с указанием их типов.Раздел описаний может иметь такие же подразделы, как и раздел описаний основной программы. Однако все описанные здесь объекты доступны лишь в этой процедуре. Они локальны так же, как и имена формальных параметров. Объекты, описан­ные ранее в разделе описаний основной программы и не переоп­ределенные в процедуре, называются глобальными для этой под­программы и доступны для использования. Формат оператора вызова: <имя процедуры> (<фактические параметры>) ;Фактические параметры - данные, с которыми выполняется процедура. Между формальными и фактическими параметрами должно быть соответствие по количеству, типу и порядку следо­вания. Процедуры могут быть без параметров, например, Proce­dure Р11;. При описании процедур без параметров использу­ются глобальные переменные. Параметры процедурыСуществует два способа передачи фактических параметров в подпрограмму: по значению и по ссылке. Соответственно пара­метры называются параметрами-значениями и параметрами-переменными.В первом случае значение переменной - фактического па­раметра при вызове подпрограммы присваивается локальной пе­ременной, являющейся формальным параметром подпрограммы. Изменение локальной переменной никак не отражается на соот­ветствующей глобальной. В качестве фактических параметров может служить любое выражение соответствующего типа.Передача параметров по ссылке отличается тем, что при обращении к подпрограмме имя формального параметра будет указывать на ту же область памяти, что и имя соответствующего фактического параметра. При описании подпрограммы перед именем параметра-переменной ставится служебное слово Var. В этом случае изменения выполняются в ячейках памяти фактиче­ских параметров. Поэтому в качестве фактических параметров можно использовать только имена переменных.

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

Подпрограмма-функция предназначена для вычисления ка­кого-либо параметра. Функция состоит из заголовка итела функ­ции. Заголовок функции имеет вид: Function <имя> (формальные параметры) :<тип>;где Function - служебное слово; <имя>— имя функции, определяемое в соответствии с общими правилами построения идентификаторов; <тип> - тип функции,т.е. тип возвра­щаемого параметра. Функция может возвращать типы вещест­венные, порядковые, строкового илюбого указателя.

У этой подпрограммы два основных отличия от процедуры. Первое отличие - заголовок. Второе отличие в том, что процеду­ра может иметь несколько выходных параметров - результатов, а функция только одно значение, передаваемое через ее имя. Именно этим объясняется то, что в теле функции хотя бы один раз имени функции должно присваиваться вычисленное значе­ние.Структура функции такая же, как и процедуры. Передача параметров осуществляется так же, как в процедуре. Функция - это некоторый независимый вспомогательный ал­горитм (или имеющая имя часть программы), к которому можно обращаться для выполнения указанной в нем последовательности операций. Функция предназначена для вычисления только одного значения переменной. Вызов функции производится на том шаге основного алгоритма, для реализации которого необходимо ис­пользовать значение именно данной функции (в выражениях, других функциях и т.п.).Обращение к функции состоит из имени функции и списка фактических параметров, которые должны совпадать по количе­ству и типам с формальными параметрами. При обращении к не­которым функциям список параметров может отсутствовать.В теле функции обязательно должна быть команда присваи­вания, где в левой части стоит имя функции, а в правой - ее значе­ние. В противном случае значение функции не будет определено.Каждое обращение к функции приводит к исполнению ком­пьютером предусмотренных этой функцией операций, которые позволяют найти конкретное значение данной функции. Получен­ное значение присваивается этой функции и помещается (как гово­рят, возвращается) в ячейку памяти, адрес которой определяется именем функции {пример - математические функции). Т.е. резуль­тат исполнения алгоритма-функции возвращается в основной алгоритм в виде единственного значения этой функции.




Рекурсия

При вычислениях возможны случаи, когда подпрограмма обращается к себе самой. Такую ситуацию называют рекурсией.Примером рекурсии служит подпрограмма вычисления факториала натурального числа:n!=система 1, если n=0; (n-1)!n, если n>0 function f(n:integer ):integer;begin if n=0then f:=lelse f:=f (n-l)*n;end; Обращение кданной функции, например, с фактическим параметром 3,влечет следующие действия. Рекурсия.Рекурсия- это процесс, при котором вспомогательный алго­ритм (функция или процедура) вызывает самого себя. Программу с рекурсией позволяют реализовать только некоторые языки про­граммирования (в частности Pascal). Рекурсия позволяет свести общую задачу к другой, более простой задаче.Идея, рекурсии основана на использовании рекуррентных соотношений.Рекуррентное соотношение (рекуррентная формула) по­зволяет легко найти функцию для некоторого значения аргумента я, если известно ее значение для аргумента /7-1. Рекуррентные соотношения существуют для многих математических функций.Определения с помощью рекуррентных формул иногда называют рекурсивными определениями. Достоинства алгоритмов, в которых используются рекурсии:простота, наглядность и компактность, поскольку использование рекурсии позволяет легко (почти дословно) построитьалгоритм вычисления по рекуррентным.формулам.Недостаток таких алгоритмов: неэкономное использованиеоперативной памяти при их реализации на компьютерах.Текущим уровнем рекурсии называется число рекурсивныхвызовов в каждый конкретный момент времени.Главное требование к рекурсивным процедурам: вызов рекурсивной процедуры должен выполняться по условию, которое накаком-то уровне рекурсии станет ложным.Если условие истинно, то рекурсивный спуск продолжаетсяКогда оно становится ложным, то спуск заканчивается и начина­ется поочередный рекурсивный возврат из всех вызванных наданный момент копий рекурсивной процедуры.Безусловные рекурсивные процедуры приводят к бесконеч­ным процессам, и на эту проблему нужно обратить особое внимание, так как практическое использование процедур с бесконеч­ным самовызовом невозможно. Такая невозможность вытекаетиз того, что для каждой копии рекурсивной процедуры необходимо выделять дополнительную область памяти, а бесконечнойпамяти не существует.Рекурсии делятся на два вида: прямую и косвенную.При прямой рекурсииво вспомогательном алгоритме осуществляется обращение этого алгоритма к самому себе.

Понятие файла

Файл в Паскаль-программе представляет структурирован­ный тип данных, образованный последовательностью компонен­тов одного типа. В Паскале имеются три разновидности файлов: типизированные, безтиповые и текстовые. Доступ к физическим файлам происходит через так называемые файловые переменные.Для организации ввода/вывода в программе необходимо выполнить следующие действия:- объявить файловую переменную;- открыть файл для чтения и/или записи;- выполнить операции ввода/вывода;- закрыть файл.В любой момент доступен только один компонент файла. Другие компоненты становятся доступными по мере продвиже­ния по файлу, В отличие от массива число компонентов в файле не фиксируется. Его длина определяется в процессе выполнения программы и ограничивается только доступной памятью. Пози­ция файла, следующая за последним компонентом файла (или первая позиция пустого файла), помечается специальным марке­ром, который отличается от любого компонента файла. Для работы с файлами используют специальные процедуры и функции. С их помощью осуществляются все необходимые действия по созданию файлов и доступа к их компонентам. Перед выполнением операций файловая переменная связы­вается с физическим файлом, после чего он в тексте программы не упоминается. В Паскале есть подпрограммы, применяемые для файлов любого типа, а также подпрограммы для работы только с определенными типами файлов. Для эффективного выполнения операций ввода/вывода из внешних файлов в Паскале целесообразно использовать нетипизированные файлы, так как при работе с ними можно использовать быстрые дисковые операции низкого уровня. Нетипизированные файлы дают возможность прямого доступа к любому файлу на дис­ке независимо от его типа и структуры.


Наши рекомендации