Программа, содержащая описание процедуры удвоения аргументов.
Лабораторная работа №5
Тема: Процедуры и функции в языке Паскаль
Цель работы: изучить работу процедуры и функции и обрести навык написания программ с применением процедур и функций.
Основные понятия. Широко распространена в программах форма повторяемости, когда одна и та же последовательность действий должна выполняться на различных этапах информации. В программах такого рода в различных местах встречаются фрагменты, одинаковые по выполняемым действиям и различающиеся только в значениях исходных данных. При составлении программы приходиться задавать одну и ту же группу операторов, соответствующую каждому из повторяющихся фрагментов. Для более эффективного программирования подобных повторений в языке введено понятие подпрограммы. Повторяющаяся группа операторов оформляется в виде самостоятельной единицы – подпрограммы, записывается однократно, а в соответствующих местах программы обеспечивает лишь обращение к ней. Использование аппарата подпрограммы позволяет сократить объем и улучшить структуру программы с точки зрения наглядности и читаемости. Подпрограмма может быть рассмотрена как самостоятельная программа (со своими входными и выходными данными). В языке Паскаль подпрограммы реализуются в виде процедур и функций, которые вводятся в программу с помощью своего описания.
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.1 Из таблицы 1. По номеру компьютера взять задание и составить программу, иcпользуя подпрограмму- процедуру. 2.2 Из таблицы 2 по номеру компьютера взять задание и составить программу, ис пользуя подпрограмму FUNCTION. 2.3 Из таблицы 3 по номеру компьютера взять задание и составить программу, ис пользуя подпрограмму FUNCTION. 2.4 Из таблицы 4. По номеру компьютера взять задание и составить программу, ис пользуя подпрограмму- процедуру
Содержание Отчёта ОТЧЁТ ДОЛЖЕН СОДЕРЖАТЬ:
1) Задание к работе; 2) Программу; 3) Блок- схему алгоритма; 4) Результаты расчётов; 4. Контрольные вопросы: 1. Заголовок процедуры и функции. 2. Что входит в тело процедуры? 3. Отличия процедуры и функции. 4. Понятия локальной и глобальной переменной. 5. Обращение к подпрограммам. 6. Какие параметры являются фактическими, какие формальными? 7. Параметры процедур и функций. 8. Соответствие между формальными и фактическими параметрами.
Литература 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
Таблица 2
Программа, содержащая описание функции выбора меньшего из двух аргументов. 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
Таблица 4
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|