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

advertisement
Процедуры и функции
Тема урока: понятие подпрограмм. Механизм
реализации подпрограмм с помощью процедур и
функций
I.
•
•
•
•
•
•
Повторение материала
Какова структура программы?
Обязателен ли заголовок программы?
Какие разделы описаний вы знаете?
С чего начинается раздел констант?
Как описать переменные?
С чего начинается основная часть программы? Как
ее закончить?
Подпрограммы решают три важные задачи, значительно
облегчающие программирование:
избавляют от необходимости многократно повторять в
тексте программы аналогичные фрагменты, т.е. сократить
объем программы;
улучшают структуру программы, облегчая понимание при
разборе;
уменьшают вероятность появления ошибок, повышают
устойчивость к ошибкам программирования .
Подпрограмма — это повторяющаяся группа операторов,
оформленная в виде самостоятельной программной
единицы. Она записывается однократно, а в
соответствующих местах программы обеспечивается лишь
обращение к ней по имени.
Общие принципы выделения подпрограмм:
 Если в программе необходимо переписывать одни
и те же последовательности команд, то стоит эту
последовательность команд оформить в виде
подпрограммы;
 Стоит перенести в подпрограмму подробности,
заслоняющие основной смысл программы;
 Слишком длинную программу полезно разбить на
составные части – подобно тому, как книгу
разбивают на главы. При этом основная
программа становиться похожей на оглавление;


При решении задачи могут возникать слишком
сложные подзадачи. Целесообразней отладить
их
отдельно
в
небольших
программах.
Добавление этих программ в основную задачу
будет легким, если они оформлены как
подпрограммы.
Все, что вы сделали хорошо в одной программе,
вам захочется перенести в новые программы. Для
повторного использования частей кода лучше
сразу выделять в программе полезные вам
подзадачи в виде отдельных подпрограмм.
Подпрограммы располагаются в разделе описаний
основой программы
Подпрограмма оформляется подобно основной
программе, т.е. состоит из заголовка, раздела
описаний и раздела операторов.
Все имена, представленные в разделе описаний
основной программы, называются глобальными. Они
действуют как в разделе операторов основной
программы, так и в любой подпрограмме. Имена,
представленные в разделе описаний подпрограммы,
называются локальными. Они действуют только в
рамках подпрограммы и недоступны операторам
основной программы.
В языке Паскаль имеется два вида подпрограмм:
Процедура и Функция.
Процедура (Procedure)
Любая процедура начинается с заголовка. Он состоит из
служебного слова Procedure , за которым следует имя процедуры, а
в круглых скобках — список формальных параметров. После
заголовка могут идти те же разделы, что и в программе. Таким
образом, общий вид будет следующим:
Procedure<имя>[(формальные параметры)];
{Список формальных параметров может
отсутствовать. }
Объявление переменных
Раздел описаний
Begin
тело процедуры
Раздел операторов
End;
Вызывается процедура по имени:
Имя (фактические параметры)
Задача Необходимо многократно вычислить площадь квадрата S1=a*a и площадь
прямоугольника S2=a*b при различных значениях сторон a,b
Procedure place (x,y:real; var sk,sp:real);
begin
sk:=x*x;
sp:=x*y
End;
Вызвать эту процедуру, можно, используя фактические параметры:
Place (A,B,S1,S2),где А и В передаются в процедуру параметрам X и Y
, а результаты ее выполнения SK и SP возвращаются параметрам S1и
S2.
При вызове процедуры вместо переменных А и В можно указать
конкретные значения Place (2.5,4,S1,S2)
Program pl;
Var A,B,S1,S2:REAL;
Procedure place (x,y:real; var sk,sp:real);
begin
sk:=x*x;
sp:=x*y
End;
Begin
Write (‘Введите значения А,В:’);
Read (А,В);
Place (A,B,S1,S2);
{Вызов процедуры}
Write(‘S1=’,S1:5:2,’ ‘:6, ‘S2=‘,S2:5:2)
end.
Параметры значения могут быть только входными для процедуры, а
параметры-переменные (перед ними ставится слово Var) как
входными, так и выходными
Задача: Определить максимальную и минимальную оценки данные судьями.
Program MinMax;
Const n=9; {число судей}
Type Massiv=array[1..N]of real;
Var A: Massiv;
{массив оценок}
I:integer;
{параметр цикла}
Max,Min:real;
{максимальная, минимальная оценка}
Procedure MaxMin(k:integer; var X:massiv; Var Max,Min:real);
Var J:integer;
Begin
Max:=X[1];
Min:=X[1];
For J:=1 to k Do
Begin
If X[J]>Max Then max:=X[J];
If X[J]<Min then Min:=X[J]
end
End;
{Основная программа}
Begin
Writeln(‘Какие оценки дали судьи?’);
For I:=1 to N do Read (A[I]);
MaxMin(N,A,Max,Min) ;
{Вызов процедуры}
Writeln(‘Максимальная оценка=’,Max:4:1);
Write(‘Минимальная оценка=’,Min:4:1)
end.
Описание функции
 Функции предназначены для того, чтобы вычислять только одно
значение, поэтому ее первое отличие состоит в том, что процедура
может иметь новые значения у нескольких параметров, а функция
только одно (оно и будет ее результатом).
 Второе отличие заключается в заголовке функции. Он состоит из
слова Function, за которым идет имя функции, затем в круглых
скобках идет список формальных параметров, после чего через
двоеточие записывается тип результата функции. Остальное как в
процедуре. В теле функции обязательно должен быть хотя бы один
оператор присвоения, где в левой части стоит имя функции, а в
правой — ее значение. Иначе, значение не будет определено.
Таким образом, общий вид такой:
Описание функции
Function <имя>[(<список форм.параметров>)]:
<тип результата>
Описательная часть
Begin
Тело функции
<имя>:=<значение>;
End;
Составьте программу нахождения максимального элемента и его индекса в
одномерном целочисленном массиве.
Для решения задачи в процедуре задаем начальный максимум
и его индекс. Например, первый элемент массива. Затем
сравниваем максимум с каждым элементом массива и если
найдем элемент, больший максимума, то перезапоминаем
максимум и идем далее.
Program Maximum;
Var line:array [1..10] of integer
Function maxim :integer;
var imax,i:integer;
begin
imax:=1;
for i:=2 to 10 do
if line[imax]<=line[i] then
imax:=i; maxim:=line[imax]
end;
begin
Randomize
For i:=1 to 10 do
Line[i]:=random(100);
M:=maxim;
Writeln(‘максимальный элемент в массиве=‘,M:5);
Readln
End.
Домашнее задание.
Ответить на вопросы:
- Чем отличаются друг от друга глобальные и
локальные параметры?
- Как описывается функция?
- Каковы отличия функции от процедуры?
- Чем отличаются друг от друга формальные и
фактические параметры?
- Что такое область действия переменной?
Procedure Maxim(var x,y:integer);
Begin
If x>y then y:=x
Else x:=y
End;
Program
…
X:=2; Y:=3;
Maxim(y,x)
Каковы будут значения переменных X и Y ?
X=3; Y=3:
Procedure Mult(var x:integer; y:integer;
Begin
x:=y*2;
End;
Program
…
X:=2;
Mult(x,2*x);
Каково будет значение переменной X ?
X=8
Решение задач
Найти разность двух факториалов F=m!-n!
Дан массив целых чисел (М=15 число элементов в
массиве).
Вычислить сумму элементов с 1 по 12 и с 8-го по 15.
Затем найти произведение этих сумм
Download