Сделай Сам Свою Работу на 5

Б. Заголовок процедуры со списком формальных параметров.





ЛАБОРАТОРНАЯ РАБОТА 12

Процедуры и функции в Turbo Pascal (4 часа)

Цель работы

 

Изучить синтаксис и правила использования процедур и функций в Turbo Pascal. Получить практические навыки использования процедур и функций при написании программ.

 

Краткая теоретическая справка

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

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

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



Другим достоинством применения подпрограмм является то, что имеет место экономия памяти ЭВМ, так как память для хранения пере­менных, используемых в подпрограммах, выделяется только на время работы подпрограммы и освобождается сразу же по окончании работы подп­рограммы.

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

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



 

Процедуры

Структура процедуры аналогична структуре программы.

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

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

За разделом описаний следует раздел операторов, заключённый в операторные скобкиbeginи end, причём послеend ставят точку с запятой в отличие от основной программы.

Например,

procedure имя_процедуры [(<формальные параметры>)];

(* Раздел описаний *)

label – раздел объявления меток;

const – раздел объявления констант;

type – раздел объявления типов;

var – раздел объявления переменных;

procedure – раздел объявления вложенных процедур;

function – раздел объявления вложенных функций;

begin

(* Раздел операторов процедуры *)

...........;

end;

 

Любая процедура в разделе операторов может содержать несколько операторов и несколько результатов своего выполнения.

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



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

Среди формальных параметров различают параметры–значе­ния и параметры–переменные.

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

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

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

Описание заголовка процедуры может иметь несколько разновидностей:

а) без списка формальных параметров и

б) со списком формальных параметров.

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

1) параметры, перед которыми отсутствует служебное слово var и за которыми следует идентификатор типа,

2) параметры, перед которыми стоит служебное слово var и за которыми следует тип,

3) параметры, перед которыми стоит служебное слово var, но не имеющие типа вслед за ними,

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

А. Заголовок процедуры без списка формальных параметров состоит только из зарезервированного слова procedure и имени процедуры:

procedure имя_процедуры;

и описывает процедуру без параметров.

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

Б. Заголовок процедуры со списком формальных параметров.

Б1. Заголовок процедуры, состоящий из зарезервированного слова procedure, имени процедуры и списка параметров, за которым следует идентификатор типа элементов списка (служебное слово var отсутствует):

procedure имя_процедуры (<сп.ф.п.>: тип п. [;<сп.ф.п.>: тип п. [;<сп.ф.п.>: тип п.]]);

где <сп.ф.п.> – список формальных параметров, тип п. – тип параметров.

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

Б2. Заголовок процедуры, состоящий из зарезервированного слова procedure, имени процедуры, служебного слова var и списка параметров, за которым следует идентификатор типа элементов списка:

procedure имя_процедуры (var <сп.ф.п.>: тип п. [;var <сп.ф.п.>: тип п. [;var <сп.ф.п.>: тип п.]]);

Параметры процедуры в этом случае называют "параметры-перемен­ные". Использование параметров-переменных позволяет уменьшить объём программы.

Б3. Заголовок процедуры, состоящий из зарезервированного слова procedure, имени процедуры, служебного слова var и списка параметров без указания их типа:

procedure имя_процедуры (var <сп.ф.п.>);

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

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

procedure имя_процедуры (<сп.ф.п.> : array [1 .. 15] of real);

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

Правильным в этом случае будет предварительно описать тип объекта в основной программе, а затем этот тип ввести в заголовок процедуры:

Program Primer;

. . . . . . .

Type

a = array [1 .. 15] of real ;

. . . . . . .

procedure Primer (b : a) ;

. . . . . . .

end ;

. . . . . . .

Begin

. . . . . . .

End.

Функции

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

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

function имя_функции (<сп. ф. п.> : их тип [;<сп. ф. п.> : их тип]): тип функции;

Здесьfunction – зарезервированное слово, объявляющее в разделе описаний о том, что следующая за ним переменная является функцией. Имя функции должно удовлетворять требованиям языка Паскаль. Обозначение <сп. ф. п.> – список формальных параметров, который может отсутствовать. Требования к списку формальных параметров в подпрограмме-функции точно такие же, как для подпрограммы-процедуры.

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

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

имя_функции := ...... ;

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

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.