Реферат Процедуры и функции в языке Паскаль
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Лабораторная работа №5
Тема: Процедуры и функции в языке Паскаль
Цель работы: изучить работу процедуры и функции и обрести навык написания
программ с применением процедур и функций.
1.
Основные понятия.
Широко распространена в программах форма повторяемости, когда одна и та же последовательность действий должна выполняться на различных этапах информации. В программах такого рода в различных местах встречаются фрагменты, одинаковые по выполняемым действиям и различающиеся только в значениях исходных данных. При составлении программы приходиться задавать одну и ту же группу операторов, соответствующую каждому из повторяющихся фрагментов. Для более эффективного программирования подобных повторений в языке введено понятие подпрограммы. Повторяющаяся группа операторов оформляется в виде самостоятельной единицы – подпрограммы, записывается однократно, а в соответствующих местах программы обеспечивает лишь обращение к ней. Использование аппарата подпрограммы позволяет сократить объем и улучшить структуру программы с точки зрения наглядности и читаемости. Подпрограмма может быть рассмотрена как самостоятельная программа (со своими входными и выходными данными).
В языке Паскаль подпрограммы реализуются в виде процедур и функций, которые вводятся в программу с помощью своего описания.
1.1 Описание процедуры.
Процедуры описываются в специальном разделе описательной части программы вслед за разделом переменных.
Любая процедура состоит, аналогично программе, из заголовка процедуры и блока.
Заголовок процедуры представляет собой:
PROCEDURE
<ИМЯ> (<СПИСОК ПАРАМЕТРОВ>);
Где PROCEDURE – служебное слово,
ИМЯ – имя процедуры,
СПИСОК ПАРАМЕТРОВ - перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов. Параметры, перечисленные в списке, называются формальными. Допускается описание процедуры, несодержащей формальных параметров:
PROCEDURE
<ИМЯ>;
Содержательная часть процедуры представляет собой блок и состоит, следовательно, из раздела описаний (меток, констант, типов, переменных, процедур, и функций) и раздела операторов, представляющего собой составной оператор BEGIN
–
END. Заканчивается блок процедуры точкой с запятой.
Пример:
Оформить в виде процедуры алгоритм вычисления степени y=xn c натуральным показателем n.
PROCEDURE STEP1 (N:INTEGER;X:REAL;VAR Y:REAL;)
VAR I:INTEGER;
BEGIN
Y:=1;
FOR I:=1 TO N DO
Y:=Y*X;
END;
В заголовке процедуры с именем STEP
1 перечислены параметры X
,
N
, определяющие исходные данные процедуры, и параметр Y, обозначающий значение исходной степени – результат выполнения процедуры. Указан также тип всех формальных параметров.
Если в заголовке процедуры параметры указаны без слова VAR, то это параметры-значения. Параметры-значения могут изменяться внутри процедуры, но для внешней программы это изменение окажется незамеченным.
Для получения результатов в основной программе используются параметры-переменные. Эти параметры перечисляются после служебного слова VAR с обязательным указанием типа.
Тело процедуры состоит:
1) Из описательной части, где определена переменная I, необходимая и имеющая смысл только внутри данной процедуры и называемая локальной переменной (значение локальной переменной недоступно в основной программе);
2) Из составного оператора BEGIN-END, реализующего алгоритм вычисления степени действительного числа с натуральным показателем.
Это то же вычисление оформим в виде процедуры без параметров:
PROCEDURE STEP2;
VAR I:INTEGER;
BEGIN
Y:=1;
FOR I:=1 TON DO Y:=Y*X;
END
;
В этом случае процедура STEP
2 не содержит списка формальных параметров и работает с локальной переменной I, описанной в блоке процедуры, и переменными X
,
N
,
Y
называются глобальными по отношению к процедуре STEP
2. Значение глобальных переменных доступны и могут быть использованы в любой точке основной программы (в частности, внутри данной процедуры).
1.2 Функция.
Функция – это подпрограмма, результат выполнения которой есть единственное скалярное значение, присваиваемое имени этой функции. Следовательно, функции являются частным случаем процедур и принципиально отличаются от них тем, что, во-первых, результат выполнения функции – одно значение, а процедуры – одно или несколько; во-вторых, результат выполнения функции передается в основную программу, как значение имени этой функции, а результаты выполнения процедуры – как значения ее параметров.
Описание функции аналогично описанию процедуры и состоит из заголовка и блока. Заголовок функции имеет вид:
FUNCTION
<ИМЯ> (<СПИСОК ПАРАМЕТРОВ>):<ТИП>;
Где FUNCTION – служебное слово,
ИМЯ – имя функции,
СПИСОК ПАРАМЕТРОВ – перечень формальных параметров (исходных
данных) с указанием их типов,
ТИП – тип результата: значение, которое должно приобретать имя функции.
Допускается описание функции без параметров:
FUNCTION
<ИМЯ>: <ТИП>;
В содержательной части программы-функции имени должно быть присвоено некоторое значение (значение ответа), т.е. имя хотя бы один раз должно присутствовать в левой части некоторого оператора присваивания.
Пример:
Оформить в виде функции алгоритм вычисления степени Y=Xn :
FUNCTION STEP3 (N:INTEGER; X:REAL) : REAL;
VAR I:INTEGER;
Y:REAL;
BEGIN
Y:=1;
FOR I:=1 TO N DO
Y
:=
Y
*
X
;
STEP
3:=
Y
END
;
В заголовке функции с именем STEP
3 перечислены параметры N
,
X, определяющие ее исходные данные. Результат выполнения функции (значение локальной переменной Y) присваивается ее имени STEP
3. Тип результата (тип функции) – REAL
, который указывается в заголовке функции при ее описании. Введение локальной переменной Y не обязательно, но придает описанию функции более наглядный вид.
1.3 Обращение к подпрограммам.
Описание процедуры (или функции), расположенное в разделе описаний, само по себе никакого действия не вызывает. Чтобы исполнить процедуру (или функцию), необходимо в нужном месте программы поместить обращение к ней. Обращение к процедуре производится с помощью оператора процедуры, имеющего вид:
<ИМЯ> (<СПИСОК АРГУМЕНТОВ>);
Где ИМЯ – имя процедуры, к которой происходит обращение,
СПИСОК АРГУМЕНТОВ – перечень конкретных значений (выражений) и имен, подставляемых на место формальных параметров процедуры при ее выполнении.
При вызове процедуры формальные параметры, указанные в заголовке, заменяются аргументами в порядке их следования: первому слева параметру в списке ставится в соответствие первый аргумент, второму – второй и т.д. Аргументы, перечисленные в операторе процедуры, называются также фактическими параметрами. Число, тип и порядок следования формальных и фактических параметров должно совпадать. Структура программы, содержащей процедуру, имеет вид:
Пример:
Cоставить программу вычисления степени Z=An, где n – целое число и A<>0. Степень с целым показателем определяется следующим образом:
Учитывая, что 1/An = (1/A)n и используя процедуру STEP
1, описанную в пункте 1.1, составим алгоритм рис.1 а), б) и программу.
{ Определение степени с целым показателем }
PROGRAM STEP4;
VAR M:INTEGER;
A
,
Z
:
REAL
;
{ Вычисление степени с натуральным показателем }
PROCEDURE STEP1 (N:INTEGER;X:REAL;VAR Y:REAL);
VAR I:INTEGER;
BEGIN
Y:=1;
FOR I:=1 TO N DO
Y:=Y*X;
END;
{STEP1}
BEGIN
READ (A,M);
IF M=0 THEN Z:=1
ELSE IF M>0 THEN STEP1(M,A,Z) {
Вызов
процедуры
}
ELSE STEP1(M,1/A,Z); {
Вызов
процедуры
}
WRITELN(A:8:3,’
В
степени
’,M:3,’
равно
’,Z)
END
.
б)
нет да
|
|
а)
Рис. 1
В программе оператор процедуры использован дважды, и каждый раз он вызывает из описательной части программы процедуру STEP
1. В теле процедуры произойдет замена формальных параметров N
,
X
,
Y на фактические M
,
A
,
Z первый раз и на M
,1/
A
,
Z второй раз. Затем выполняется совокупность действий, предусмотренных операторами процедуры, и в программу будет возвращен результат Z. Возврат осуществляется к оператору программы STEP
4, следующему за оператором вызова процедуры. Очень важно понимать суть и механизм замены формальных параметров фактическими.
Формальные параметры – это переменные, фиктивно (формально) присутствующие в процедуре и определяющие тип и место подстановки фактических параметров.
Фактические параметры – это реальные объекты (программы, заменяющие в теле процедуры при ее вызове формальные параметры). Над этими объектами и производятся действия, предусмотренные операторами тела процедуры.
Имена формальных и фактических параметров целесообразно выбирать различными, что сделает программу более наглядной.
Обращение к функции осуществляется аналогично обращению к стандартным функциям (sin
,
cos
,
tan
и т.д.) и является разновидностью операнда в выражениях в отличие от вызова процедуры, являющегося разновидностью оператора. В этом месте выражения, где это необходимо, записывается имя функции, вслед за которым в скобках перечисляются фактические параметры. Если вызывается функция без параметров, то указывается только ее имя.
Пример:
Составить программу вычисления
,
используя функцию STEP
3, описанную в п. 1.2., (A
– действительное, n
- целое).
{ Пример вычисления функции }
PROGRAM
STEP
6;
VAR M: INTEGER;
A, Z, R: REAL;
{
Функция
вычисления
степени
}
FUNCTION STEP3(N: INTEGER; X: REAL): REAL;
VAR M: INTEGER;
Y: REAL;
BEGIN {STEP3}
Y:=1;
FOR I:=1 TO N DO
Y:=Y*N;
SYEP3:=Y
END; {STEP3}
BEGIN
READ (A,M);
WRITELN (‘A=’, A, ‘M=’, M);
Z:=STEP3(5,A)+STEP3(5, 1/A);
IF M=0 THEN R:=1
ELSE IF M>0 THEN R:=STEP3(M,A)
ELSE R:=STEP3(M,1/A);
Z:=Z/(2*R);
WRITELN
(‘
Z
=’,
Z
)
END
.
Функция STEP
3 вызывается четыре раза для различных значений фактических параметров. Определение фактических и формальных параметров, локальных и глобальных переменных для функций и процедур совершенно идентично.
Процедуры могут работать не только с простыми переменными, но и с массивами. В качестве примера рассмотрим следующую задачу.
Даны два вектора: А, состоящий из трех элементов, и В, состоящий из четырех элементов. Возвести каждый элемент вектора в квадрат и найти сумму элементов. Действия над векторами оформить в виде процедуры.
PROGRAM
SUMMA
;
TYPE
MAX
=
ARRAY
[1..4]
OF
REAL
;
VAR S1, S2: REAL;I: INTEGER;
A,B: MAX;
PROCEDURE PR(N: INTEGER;VAR S: REAL;VAR C: MAX );
VAR I: INTEGER;
BEGIN
S:=0;
FOR I:=1 TO N DO
BEGIN
C[I]:=SQR(C[I]);
S:=S+C[I]
END;
BEGIN
FOR I:=1 TO 3 DO
READLN(A[I]);
FOR I:=1 TO 4 DO
PR(3,S1,A);
PR(4,S2,B);
WRITELN(S1,S);
FOR I:=1 TO 3 DO
WRITE(A[I]);
FOR I:=1 TO 3 DO
WRITE(B[I]);
END.
2. Задание
2.1 Из таблицы 1. По номеру компьютера взять задание и составить программу,
иcпользуя подпрограмму- процедуру.
2.2 Из таблицы 2 по номеру компьютера взять задание и составить программу, ис
пользуя подпрограмму FUNCTION.
2.3 Из таблицы 3 по номеру компьютера взять задание и составить программу, ис
пользуя подпрограмму FUNCTION.
2.4 Из таблицы 4. По номеру компьютера взять задание и составить программу, ис
пользуя подпрограмму- процедуру
3. Содержание Отчёта
ОТЧЁТ ДОЛЖЕН СОДЕРЖАТЬ:
1) Задание к работе;
2) Программу;
3) Блок- схему алгоритма;
4) Результаты расчётов;
4. Контрольные вопросы:
1. Заголовок процедуры и функции.
2. Что входит в тело процедуры?
3. Отличия процедуры и функции.
4. Понятия локальной и глобальной переменной.
5. Обращение к подпрограммам.
6. Какие параметры являются фактическими, какие формальными?
7. Параметры процедур и функций.
8. Соответствие между формальными и фактическими параметрами.
5. Литература
1. Новичков В.С. ПАСКАЛЬ – В.С. Новичков, Н.И. Парфилов, А.Н. Пылькин - М.: Высш. школа, 1990г. 223 стр.
2. Савельев А.Я. ЯЗЫКИ ПРОГРАММИРОВАНИЯ (Паскаль, ПЛ/М). – М.:Высш. школа. 1987г. –143 стр.
3. Боон К. ПАСКАЛЬ ДЛЯ ВСЕХ. – М.- Энергоатомиздат, 1988г.- 190 стр.
Здесь использованы следующие процедуры:
GoToXY (X, Y:Byte) - перемещает курсор к элементу экрана с заданными координатами, учитывая, что размер экрана в текстовом режиме 25 строк по 80 символов.
TextBackGround (Color : Byte) – задает цвет фона.
TextColor (Color : Byte) – задает цвет символов.
uses crt;
var s1,s2,s3:string;
c1,c2,c3:byte;
procedure pr(s:string;x,y,c:byte);
begin
textcolor(c);
gotoxy(x,y);writeln(s);
end;
begin
writeln('введите оценку по математике');readln(s1);
writeln('введите оценку по физике');readln(s2);
writeln('введите оценку по истории');readln(s3);
clrscr;
pr('матемаитка'+s1,1,1,5);{на первом месте текст, столбец, строка, цвет печати}
pr('физика'+s2,40,10,8); {физика+ оценка, столбец 40, строка 10, цвет 8(серый)}
pr('история'+s3,70,23,12); {история+, столбец 70, строка 23, цвет 12(св крас)}
repeat until keypressed;
end.
Таблица
1
N вар. | Содержание задания |
1 . | Процедура запрашивает три фамилии и выводит текст в заданном месте экрана.(использовать модуль crt) |
2. | Процедура запрашивает имена трёх человек и выводит их разным цветом.(использовать модуль crt) красный синий голубой) |
3 . | Процедура запрашивает оценки по трём предметам и цвет и выводит данным цветом.(использовать модуль crt)(красный синий голубой) |
4. | Процедура запрашивает частоту обновления трёх марок мониторов и выводит их мерцающим цветом. (использовать модуль crt) |
5 . | Процедура запрашивает частоту трёх марок процессора и выводит их по главной диагонали. (использовать модуль crt) |
6. | Процедура запрашивает три объёма памяти различных марок видео карт и выводит их по побочной диагонали. (использовать модуль crt) |
7 . | Процедура запрашивает частоты трёх марок материнских плат процессора и выводит их сверху, посередине, внизу средней части экрана. (использовать модуль crt) |
8 . | Процедура запрашивает скорость трёх марок машин и выводит их в центре экрана в начале в середине и в конце строки. (использовать модуль crt) |
9. | Процедура запрашивает массу подъёмную трёх марок грузовых авто и выводит их в конце строки в на 1 , посередине, в конце строки. (использовать модуль crt) |
10. | Процедура запрашивает количество мест трёх марок автобуса и выводит красным цветом в нижней строке экрана по очереди. (использовать модуль crt) |
Таблица 2
N вар. | Содержание задания |
1 . | при а=4,5; b=0,7; c=6,2; А x принимает значения 0,2; 0,56; 0,83 |
2. | , при a=0,8; b=0,16; c=0,4; a=0,6; b=0,4; c=1,2; a=0,47; b=0,1; c=0,5. |
3 | , при a=0,15; b=1,5; a=1,7; b=0,1. |
4. | , при x=1,4; y=0,8; x=0,9; y=0,6; x=2,9; y=0,4; a d=5,3, при всех значениях x,y. |
5. | , при x=0,4; y=1,2; x=0,25; y=1,3; a=0,54; b=1 при всех значениях x, y |
6. | , при a=10,7; b=6,3; y=0,35; a x принимает значения 0,6; 0,51; 0,42. |
7. | , при x=3; y=4; x=1,6; y=5,8; x=4,5; y=2,7; a=7,1; b=2,4 при всех значениях x, y |
8. | , при x=0,1; y=0,7; x=0,4; y=0,6 x=0,5; y=0,2; a=2; b=0,1 при всех значениях x, y |
9. | , при a=9,7; b=2,7, a x принимает значения 4,8; 9,6; 0,44. |
10. | , при x=0,35; y=0,1; x=0,82; y=0,12; x=0,67; y=0,3, a=0,24; b=4,9 при всех значениях x, y. |
Программа, содержащая описание функции выбора меньшего из двух аргументов.
uses crt;
function Min(a, b: integer): integer;
Begin
If a<b then Min:=a
else Min:=b
End;
Var x, y, z: integer;
BEGIN
write
(‘Первое число- ’);
readln
(
x
);
write
(‘Второе число- ’);
readln
(
y
);
z
:=
Min
(
x
,
y
);
writeln
(‘Меньшее из двух чисел- ’,
z
);
END
.
Программа, содержащая описание процедуры удвоения аргументов.
Uses crt;
Procedure Double (var x, y: integer);
Begin
x:=x+x;
y:=y+y;
End;
Var
a, b: integer;
BEGIN
write
(‘Введите исходные данные’)’
readln (a);
readln (b);
double (a, b);
wrteln
(‘Полученные данные- ’,
a
,
b
);
END
.
Таблица 3
1. Опишите функцию нахождения наибольшего из трёх чисел.. |
2. Опишите функцию нахождения гипотенузы по двум катетам. |
3. Опишите функцию нахождения катета по его гипотенузе и второго катета |
4. Опишите функцию разность косинусов двух углов. |
5. Опишите функцию сумму синусов двух углов. |
6. Опишите функцию вычисления куба числа. |
7. Опишите функцию суммы квадратов двух чисел. |
8. Опишите функцию разности квадратов двух чисел. |
9. Опишите функцию определения среднего значения из трёх введенных |
10. Опишите функцию нахождения наименьшего из трёх чисел. |
Таблица 4
1.Опишите процедуру, которая находит квадрат разности двух чисел. |
2.Опишите процедуру, которая вычисляет площадь прямоугольного треугольника. |
3.Опишите процедуру, которая вычисляет периметр прямоугольника. |
4.Опишите процедуру, которая переводит угол из градусов в радианы. |
5.Опишите процедуру, которая вычисляет сумму по модулю двух чисел |
6.Опишите процедуру, которая вычисляет разность по модулю двух чисел |
7.Опишите процедуру, которая вычисляет произведение по модулю двух чисел |
8.Опишите процедуру, которая вычисляет сумму кубов двух чисел. |
9.Опишите процедуру, которая вычисляет разность кубов двух чисел. |
10.Опишите процедуру, которая вычисляет произведение кубов двух чисел. |