Студопедия — Процедуры и функции
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Процедуры и функции






 

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

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

Роль подпрограмм выполняют процедуры и функции.

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

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

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

Подпрограммы в Pascal имеют параметры.

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

Формальные - параметры, указываемые при описании (имена, под которыми будут фигурировать передаваемые данные внутри подпрограммы) и их типы.

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

Фактические - параметры, указываемые при вызове подпрограммы.

Формат описания процедуры:
Procedure < Имя процедуры> (< Имя форм. Параметра 1>: < Тип>;
< Имя форм. параметра 2>: < Тип>?);
< Раздел описаний>
Begin
< Тело процедуры>
End;

Раздел описаний может иметь такие же подразделы, как и раздел описаний основной программы. Однако описанные там объекты «видимы» лишь в этой процедуре. Они локальные, как и имена формальных параметров.

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

Легко заметить схожесть структуры программы целиком и любой из ее процедур, ведь и процедура и основная программа реализуют некий алгоритм, просто процедура не дает решения всей задачи. Отличие в заголовке и в знаке после End.

Function < Имя функции> (< Имя форм. параметра 1>:

< Тип>; < Имя форм. параметра 2>: < Тип>?):

< Тип результата>;
< Раздел описаний>
Begin
< Тело функции>
End;

В теле функции обязательно должна быть хотя бы команда присвоения такого вида: < Имя функции>: =< Выражение>;

Вызов процедуры представляет в программе самостоятельную инструкцию: < Имя процедуры> (< Фактический параметр 1>, < Фактический параметр 2>?);

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

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

Пример 14: Из 3х введенных чисел найти максимальное.

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

Program Fn;
Var
A, B, C: Real;
Function Max(A, B: Real): Real; {Описываем функцию Max с формальными}
Begin {параметрами A и B, которая принимает }

If A> B Then Max: =A {значение максимального из них }
Else Max: =B {Здесь A и B - локальные переменные }

End;
Begin

Writeln('Введите три числа');
Readln(A, B, C);
Writeln('Максимальным из всех является ', Max(Max(A, B), C))

End.

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

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

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

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

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

Пример 15: Расположить в порядке неубывания три целых числа.

Program Pr;
Var
S1, S2, S3: Integer;
Procedure Swap(Var A, B: Integer); {Процедура Swap с параметрами-переменными}
Var C: Integer; {C - независимая локальная переменная}
Begin
C: =A; A: =B; B: =C {Меняем местами содержимое A и B}
End;
Begin

Writeln('Введите три числа');
Readln(S1, S2, S3);
If S1> S2 Then Swap(S1, S2);
If S2> S3 Then Swap(S2, S3);
If S1> S2 Then Swap(S1, S2);
Writeln('Числа в порядке неубывания: V', S1, S2, S3)

End.







Дата добавления: 2014-11-12; просмотров: 532. Нарушение авторских прав; Мы поможем в написании вашей работы!



Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

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

Функциональные обязанности медсестры отделения реанимации · Медсестра отделения реанимации обязана осуществлять лечебно-профилактический и гигиенический уход за пациентами...

Определение трудоемкости работ и затрат машинного времени На основании ведомости объемов работ по объекту и норм времени ГЭСН составляется ведомость подсчёта трудоёмкости, затрат машинного времени, потребности в конструкциях, изделиях и материалах (табл...

Гидравлический расчёт трубопроводов Пример 3.4. Вентиляционная труба d=0,1м (100 мм) имеет длину l=100 м. Определить давление, которое должен развивать вентилятор, если расход воздуха, подаваемый по трубе, . Давление на выходе . Местных сопротивлений по пути не имеется. Температура...

Различие эмпиризма и рационализма Родоначальником эмпиризма стал английский философ Ф. Бэкон. Основной тезис эмпиризма гласит: в разуме нет ничего такого...

Индекс гингивита (PMA) (Schour, Massler, 1948) Для оценки тяжести гингивита (а в последующем и ре­гистрации динамики процесса) используют папиллярно-маргинально-альвеолярный индекс (РМА)...

Методика исследования периферических лимфатических узлов. Исследование периферических лимфатических узлов производится с помощью осмотра и пальпации...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия