Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект_лекций.doc
Скачиваний:
18
Добавлен:
26.04.2019
Размер:
1.11 Mб
Скачать

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

Оператор вызова подпрограммы «на выполнение» имеет весьма лаконичную форму:

ИмяP(P1, P2 , … Pn ); ,где

ИмяP – имя подпрограммы (процедуры),

P1, P2 , … Pnперечень (через разделители - запятые) названий фактических параметров, т.е. имен информационных объектов чье содержимое (информация) используется в вызываемой подпрограмме, или вырабатывается внутри самой вызываемой подпрограммы.

Синтаксис (структура) этого оператора полностью совпадает с синтаксисом предложений «внутреннего языка ЭВМ» (см. §3):

КодО Адр1 Адр2 Адр3 , где

КодО – числовой код (номер) простейшей (базовой) операции обработки,

Адр1 Адр2 - адреса (числовые имена!) ячеек - аргументов,

Адр3 - адрес ячейки, куда следует поместить результат операции,

что соответствует структуре:

Глагол Существительное Существительное . . . Существительное.

Семантика оператора «вызов процедуры» озвучивается фразой: выполни подпрограмму ИмяP и фактическими параметрами P1, P2 ,… Pn !

Прагматика оператора «вызов процедуры» передается одним или несколькими предложениями естественного языка:

  • в простом случае - «сложи число А с числом B результат помести в C»,

  • в сложном – «нарисуй в нижеуказанном месте экрана, нижеуказанные фигуры, нижеуказанным цветом, сохранив старое изображение в нижеуказанном месте оперативной памяти».

Указанная специфика структуры (синтаксиса) оператора «вызов процедуры» позволяет ввести понятие – процедурные подъязыки программирования. Процедурные языки используются для управления периферийными устройствами самодостаточной ЭВМ, т.е.:

  • для ввода информации c клавиатуры, это комплекс процедур: Read, ReadLN, ReadKey,

  • для вывода информации на экран процедуры: Write, WriteLN,

  • для обслуживания графического экрана процедуры: SetColor, Line, Bar, OutTextXY и т.д.,

  • для обслуживания файлов процедуры: Assign, Reset, Close и т.д.

Для эффективного использования процедурного языка программирования, от программиста требуется только прагматическое (смысловое, предметно-понятийное) представление о том «что требуется сделать», и совершенно не обязательно понимать «какие именно элементарные операции выполняет при этом процессор». Главное, программист должен понимать: какие исходные данные (входная информация процедуры) должны быть обязательно переданы в процедуру, а какие переменные (выходная информация) будут обязательно заполнены (вычислены) самой процедурой.

12.4. Библиотечные модули Unit

Подпрограммы общего назначения удобно размещать в отдельном файле специальной структуры – unit.tpu (библиотека подпрограмм).

Структурная организация библиотечного модуля иллюстрируется следующим примером:

Unit Uname; {оператор задающий название библиотечного модуля - Uname,

Текстовый файл обязательно должен иметь тоже название uname.pas,

После компиляции этого модуля автоматически будет создан

объектный файл с именем uname.tpu, который обычно

и передается сторонним пользователям.}

{В самом начале модуля размещается блок описания информационных объектов, которые доступны (могут быть использованы) сторонними пользователями модуля uname.tpu}

Interface {специальная операторная скобка фиксирующая начало блока описаний

информационных объектов и операций по их обработке доступных стороннему

пользователю модуля uname.tpu }

Uses Graph, Crt; {подключение к данному модулю используемых им

других библиотечных модулей}

Type T3= array [1..3] of real; {описание «стандартных для данного

библиотечного модуля» структур информационных объектов,

В переменных этого типа должна размещаться информация о координатах

векторов}

Function Spr(Var a, b: T3): real; {подпрограмма-функция, вычисляющая

скалярное произведение векторов из пространства R3.

Входные параметры: a, b: T3 – координаты перемножаемых векторов,

Выходной параметр: Spr: real – их скалярное произведение}

Function ModV(Var a: T3): real; { подпрограмма-функция, вычисляющая

модуль вектора из пространства R3.

Входной параметр: a: T3 – координаты вектора,

Выходной параметр: ModV: real – его модуль (длина)}

Procedure Vpr(Var a, b, c: T3); {подпрограмма-процедура, вычисляющая

векторное произведение векторов.

Входные параметры: a, b: T3 – координаты перемножаемых векторов,

Выходной параметр: с: Т3l – вектор- результирующий вектор}

{нижеследующая информация библиотечного модуля не доступна

стороннему пользователю модулем uname.tpu}

Implementation {специальная операторная скобка фиксирующая начало блока

описаний информационных объектов и операций по их обработке,

которые доступны только из текстового файла uname.pas }

Function Spr(Var a, b: T3): real; {полная копия оператора из блока Interface }

Var i: integer; R: real; {описание рабочих переменных подпрограммы}

Begin

R:=0; {обнуление рабочей переменной для накопления сумм произведений}

For i:=1 to 3 do R:=R+ a[i]*b[i]; {вычисление скалярного произведения}

Spr:=R {перепись возвращаемого результата в специальную ячейку Spr }

End; {конец описания подпрограммы-функции Spr }

Function ModV(Var a: T3): real; {полная копия оператора из блока Interface }

Begin

ModV:=Sqrt(Spr(a,a)); {вычисление результата}

End; {конец описания подпрограммы-функции ModV }

Procedure Vpr(Var a, b, c: T3); {полная копия оператора из блока Interface }

Begin

C[1]:=a[2]*b[3]- a[3]*b[2]; { покомпонентное вычисление}

C[2]:=a[3]*b[1]- a[1]*b[3]; {результирующего вектора}

C[3]:=a[1]*b[2]- a[2]*b[1];

End; {конец описания подпрограммы-процедуры Vpr}

Begin End. {Обязательное завершение библиотечного модуля}