Оператор присоединения With. do




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


 

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

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

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

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

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

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

Смысл функций - определить алгоритм вычисления нового значения некоторого простого или ссылочного типа. Функция, это подпрограмма, которая, как и процедура, что-то делает, но, помимо этого, она обязательно возвращает значение, тип которого задается при описании заголовка процедуры. Вызов функции является одним из допустимых операндов выражения, обозначая в нём то значение, которое вычисляет функция, то есть, если подпрограмма с идентификатором “Function1” – функция, то можно произвести следующие действия:

X:=Function1(“параметры – аргументы функции”);

X:=2*Function1(a,e,…,m,…)-1/Function1(c,f,…,k,…); и т.д.

3. Области видимости объектов

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

Механизм передачи параметров. В заголовке подпрограммы может быть задан список формальных параметров. Каждый параметр, заданный в заголовке, считается локальным в данной подпрограмме. Идентификаторы формальных параметров можно считать условными обозначениями реальных (фактических) параметров, которые будут переданы в подпрограмму при её вызове.

Внимание: Типы формальных параметров должны обязательно обозначаться идентификаторами.

Недопустимо: Procedure InCorrect (Var A: Array [1..10] of Byte);

Нужно: Type MyArray = Array [1..10] of Byte; Procedure Correct (Var A: MyArray);

Допустимы по крайней мере три способа задания формальных параметров: параметры, перед которыми отсутствует служебное слово Var и за которыми следует идентификатор типа; параметр, перед которым Var и далее тип; параметр со словом Var и не имеющие типа.

Эти три способа задания формальных параметров отражают три различных способа передачи параметров a - по значению; b - по ссылке; c - передача нетипизированных параметров по ссылке (b, c - параметры-переменные).

Параметры - значения. Наиболее распространенный и простой способ. Параметр - обычная локальная переменная. Может использовать выражение. Любые действия внутри подпрограммы никак не отражаются на значениях переменной вне подпрограммы.

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

Procedure Swap (Var X,Y: Real);

Var T: Real;

Begin T:= X; X:= Y; Y:= T; End;

 

Вычисление значения функции, завершение подпрограммы.

Смысл функции заключается в задании алгоритма вычисления некоторого значения и организации возврата этого значения в точку вызова.

 

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

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

 

 

Рекурсия и побочный эффект

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

Пример: алгоритм вычисления факториала: N! = (N-1)!*N

Fuction Fact(N: Word): LongInt;

Begin

If N = 1 then

Fact:= 1

else

Fact:= N * Fact(N-1);

End;

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

 

Память под глобальные и типизированные константы выделяется при запуске программы в одном сегменте (65520 байт - сегмент данных программы).

 




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-07-22 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: