
Министерство образования Российской Федерации
Методические указания к домашнему заданию
«ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР И ФУНКЦИЙ В СРЕДЕ ТУРБО-ПАСКАЛЬ»
по курсу «Основы алгоритмизации и программирования»
Калуга 2011г.
Белов Е.С. Методические указания к домашнему заданию «ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР И ФУНКЦИЙ В СРЕДЕ ТУРБО – ПАСКАЛЬ» по курсу «Основы алгоритмизации и программирования». – Калуга: ГОУ СПО ККИТиУ, 2011. –23 с.
В методической разработке даны указания к домашнему заданию по теме «Использование процедур и функций в среде Турбо – Паскаль». Названия разделов данной методической разработки соответствуют пунктам домашнего задания. В каждом разделе приводятся примеры программ и даются пояснения к ним.
Методическая разработка будет полезна студентам специальностей изучающих курс «Основы алгоритмизации и программирования» и студентам других специальностей по курсу «Информатика», изучающих язык программирования Турбо-Паскаль.
Данное учебное пособие издается в соответствии с учебным планом специальностей.
Учебно-методическое пособие рассмотрено и одобрено методической комиссией ГОУ СПО Калужский колледж информационных технологий и управления «_15__» декабря 2011 г., протокол № 4
«___» _______ 2011 г. Протокол № 4
Председатель методической комиссии
Рецензент к.т.н., доц. Е.О. Дерюгина
Автор: Е.С. Белов
Введение
В методической разработке рассмотрено использование процедур и функций в среде Турбо-Паскаль. Показаны способы описания процедур и функций, описание рекурсивных функций, использование в качестве формальных параметров подпрограмм – массивов. Приведены примеры программ с использованием процедур и функций, а также примеры программ для каждого пункта домашнего задания.
В конце методической разработки приведены варианты домашнего задания.
Прочитав текст задания, легко заметить соответствия между пунктами задания и разделами методической разработки. Так, например, пунктам 1-2 задания соответствуют примеры из раздела 2 (ОПИСАНИЕ ФУНКЦИИ ЗАДАННОГО ВИДА); примеры, подобные пункту 3 задания можно найти в разделе 3 (РЕКУРСИЯ) методического пособия и т.д. Поэтому, подробно изучив примеры данного методического пособия и пояснения к ним, не возникнет сложностей при выполнении домашнего задания.
1. Процедуры и функции
Процедуры и функции представляют собой относительно самостоятельные фрагменты программ. Обычно в процедуру или функцию включают группу операторов, которые используются в программе несколько раз.
Отличие функции от процедуры заключается в том, что результатом исполнения операторов, образующих тело функции, всегда является некоторое единственное значение того или иного типа. В дальнейшем процедуру или функцию будем называть общим именем – подпрограмма.
Подпрограмма выполняется только после ее вызова, то есть после использования оператора процедуры или вызова функции. Оператор процедуры может находиться в любом месте программы, в котором может использоваться, а вызов функции осуществляется только в выражении.
Подпрограмма, как и переменные должны быть описаны в разделе описаний программы. Описание подпрограммы состоит из заголовка и тела подпрограммы.
Заголовки процедуры и функции имеют следующий вид:
PROCEDURE <имя > [<сп.фор.парам.>];
FUNCTION <имя> [<сп.фор.парам.>] : <тип>;
где PROCEDURE, FUNCTION – ключевые слова;
<имя> - имя подпрограммы – правильный идентификатор;
<сп.фор.парам.> – список формальных параметров;
<тип> – тип возвращаемого функцией результата.
Список формальных параметров необязателен и может отсутствовать. Но если он есть, то в нем должны быть перечислены имена формальных параметров и их тип. Например:
PROCEDURE SB(A : REAL; B : INTEGER; C : CHAR);
Как видно из примера, параметры в списке отделяются друг от друга точкой с запятой. Несколько следующих подряд однотипных параметров можно объединять. Например, вместо
FUNCTION F (A : REAL ;B : REAL) : REAL;
можно написать проще:
FUNCTION F (A, B : REAL) : REAL;
Тело подпрограммы соответствует структуре программы и состоит из раздела описаний и раздела исполняемых операторов.
Рассмотрим пример.
Пример 1.
Вычислить
,
где
,
– площади треугольников
и
соответственно.
PROGRAM PR1;
VAR OA, OB, OC, OD, a, b, s1, s2, s : REAL;
PROCEDURE PL;
BEGIN
s:=a*b/2;
END;
BEGIN
WRITELN ('задать длины сторон треугольников');
READ (OA, OB, OD, OC);
a:=OA; b:=OB;
PL;
s1:=s;
a:=OD; b:=OC;
PL;
s2:=s;
WRITE (s1+s2:7:1);
END.
Пояснения к
программе:
Процедура PL позволяет вычислять площадь
любого треугольника и в ней отсутствует
список формальных переменных. Сначала
с помощью процедуры READ задаются значения
длин сторон треугольников. Переменным
и
присваиваются значения длин сторон
треугольника
и выполняется процедура PL. Переменной
присваивается значение площади
треугольника
.
Затем аналогичные действия выполняются
для треугольника
.
С помощью процедуры WRITE осуществляется
вывод результата на экран.
Любой из формальных параметров может быть либо параметром-значением, либо параметром-переменной. Если какие-либо параметры определяются как параметры-переменные, то перед ними необходимо ставить кодовое слово VAR. Например:
FUNCTION P (VAR X : REAL; Y : REAL) : REAL;
Здесь параметр
– параметр-переменная, а
– параметр-значение.
Упростим программу из примера 1, путем ввода формальных параметров в процедуру PL.
Пример 2. Условие аналогично условию из примера 1.
PROGRAM PR2;
VAR OA, OB, OC, OD ,s1, s2 : REAL;
PROCEDURE PL (a, b : REAL; VAR s : REAL);
BEGIN
s:=a*b/2;
END;
BEGIN
WRITELN ('задать длины сторон треугольников');
READ (OA, OB, OD, OC);
PL (OA, OB, s1);
PL (OD, OC, s2);
WRITE (s1+s2:7:1);
END.
Пояснения к
программе:
В процедуре PL формальными параметрами
являются –
,
,
.
При этом
и
являются параметрами-значениями, а
– параметром-переменной. Параметры
,
и
при первом обращении к процедуре PL,
являются фактическими параметрами. Они
подставляются вместо формальных
параметров
,
,
в заголовке процедуры и затем над ними
осуществляются действия, описанные в
теле процедуры. Полученное значение
площади треугольника
передается фактическому параметру
.
Затем процедура PL выполняется с
фактическими параметрами
,
,
и полученное значение площади треугольника
передается фактическому параметру
.
С помощью процедуры WRITE осуществляется
вывод результата на экран.
Необходимо обратить внимание на то, что количество и тип формальных параметров строго соответствует количеству и типу фактических параметров. Порядок следования фактических параметров, при обращении к подпрограмме должен быть строго определенным. Т.е. в примере 2 первым и вторым расположены фактические параметры, соответствующие длинам сторон треугольника, а третьим параметром является площадь треугольника.
Рассмотрим пример 1 с использованием функции.
Пример 3. Условие аналогично условию из примера 1. Решим задачу с использованием функции.
PROGRAM PR3;
VAR OA, OB, OC, OD, s1, s2 : REAL;
FUNCTION PLOS (a, b : REAL) : REAL;
BEGIN
PLOS:=a*b/2;
END;
BEGIN
WRITELN ('задать длины сторон треугольников');
READ (OA, OB, OD, OC);
s1:=PLOS (OA, OB);
s2:=PLOS (OD, OC);
WRITE (s1+s2:7:1);
END.
Пояснения к
программе:
При описании функции PLOS заданы два
формальных параметра
и
.
Вычисленное значение площади присваивается
идентификатору функции. При первом
обращении к функции PLOS фактические
параметры
и
подставляются вместо формальных
параметров
,
.
Полученное значение площади треугольника
возвращается как значение функции PLOS.
Затем аналогичным образом вычисляется
площадь треугольника
.
С помощью параметров-переменных подпрограмма может передавать результаты своей работы вызывающей программе. Однако следует заметить, что при описании формальных параметров как параметров-переменных необходимо в качестве фактических параметров использовать только переменную и исключается возможность вызова подпрограммы с фактическими параметрами в виде выражений и констант.
В случае описания формальных параметров как параметров-значений, в качестве фактических параметров, при вызове подпрограммы, можно использовать выражение, переменную или константу.
Для того, чтобы понять, чем отличаются параметры-переменные от параметров-значений рассмотрим пример.
Пример 4. Зададим два целых числа и . Удвоим эти числа в процедуре UD. Причем параметр является параметром-переменной, а параметр параметром-значением. Значения параметров до и после вызова процедуры, а также результат их удвоения выведем на экран.
PROGRAM PR4;
VAR a, b : INTEGER;
PROCEDURE UD (VAR a : INTEGER; b : INTEGER);
BEGIN
a:=a+a;
b:=b+b;
WRITELN (' удвоенные: ',a:5, b:5);
END;
BEGIN
a:=5;
b:=7;
WRITELN (' исходные: ',a:5, b:5);
UD (a, b);
WRITELN(' результат: ',a:5, b:5);
END.
В результате выполнения программы на экран будет выведено:
исходные: 5 7
удвоенные: 10 14
результат: 10 7
Пояснения к программе: При выполнении процедуры UD значения и изменились, что отразилось на экране в графе «удвоенные». Однако далее в программу вернулось удвоенное значение и значение , которое было до выполнения процедуры. Т.е. удвоение второго формального параметра в процедуре UD не вызвало изменения фактической переменной , поскольку этот параметр описан в заголовке процедуры UD как параметр-значение.