Язык программирования TurboPascal
- Григоренко Г. Н.
- Просмотров: 14231
Turbo Pascal. Процедуры и функции
Процедуры и функции являются важным инструментом большинства языков программирования. С их помощью можно часто встречающиеся фрагменты программы, одинаковые по выполняемым действиям, но различающиеся только значениями исходных данных, скомпоновать в группу операторов. Для эффективного программирования подобных повторений фрагментов в языках программирования введено понятие подпрограммы.
Подпрограмма – это группа операторов, оформленная как самостоятельная программная единица.
Подпрограмма записывается однократно в определенной части программы, а затем в нужных местах программы обеспечивается обращение к ней. При обращении к подпрограмме ей передаются исходные данные, а после выполнения операторов подпрограммы в основную программу передаются результаты расчетов.
Использование процедур и функций позволяет: сократить объем программы, улучшить структуру программы с точки зрения ее читаемости, уменьшить вероятность ошибок и облегчает процесс создания и отладки программы.
В языке Турбо Паскаль подпрограммы реализуются в виде процедур и функций
Процедуры
Для использования процедуры в программе необходимы:
- описание процедуры;
- вызов процедуры.
Описание процедуры содержит информацию для компилятора об объектах, используемых в процедуре, а также алгоритм решения задачи процедурой.
Вызов процедуры приводит к выполнению операторов, составляющих тело процедуры.
Описание процедуры
Процедура в Турбо Паскале имеет структуру, подобную структуре программы.
Структура описания процедуры имеет следующий вид:
Procedure <имя процедуры> (параметры); | заголовок процедуры; | ||
Label | объявление меток; | ||
Const | объявление констант; | ||
Type | объявление типов; | ||
Var | объявление переменных; | ||
procedure | описание процедур и функций, входящих в данную процедуру (внутренние процедуры и функции); |
||
function | |||
Begin | |||
Тело процедуры | операторы процедуры; | ||
End; | точка с запятой «;» ставится всегда |
Таким образом, процедура состоит из:
- заголовка;
- раздела описаний;
- раздела операторов.
Заголовок процедуры в отличие от заголовка программы не может быть опущен.
Формат заголовка
Procedure <имя> (<список формальных параметров>);
где Procedure – зарезервированное слово;
имя – имя процедуры, определяемое в соответствии с общими правилами построения идентификаторов;
<список формальных параметров> – перечень идентификаторов для обозначения исходных данных и результатов работы процедуры с указанием их типа.
Параметры в списке заголовка процедуры отделяются друг от друга точкой с запятой «;». Если параметры являются однотипными, их можно объединить и записать через запятую. Например:
Procedure SUMMA(a,b:real;i,n:integer);
Здесь SUMMA имя процедуры, a,b,i,n формальные параметры процедуры.
Раздел описаний процедуры содержит объявление меток, констант, типов переменных и внутренних процедур и функций, используемых в разделе операторов процедуры.
Раздел операторов ограничен операторными скобками BEGIN и END. При описании процедуры после END всегда ставится точка с запятой «;».
Вызов процедуры
Если процедура объявлена, то в программе ее можно использовать многократно, просто задавая ее имя и, если необходимо, список аргументов, т.е. вызов происходит с помощью оператора вызова:
<имя процедуры> (<список фактических параметров>);
где <имя процедуры> – имя процедуры, к которой происходит обращение;
<список фактических параметров> – перечень конкретных значений (выражений) и имен, подставляемых на место формальных параметров процедуры при ее выполнении.
При описании подпрограмм и вызова их используются понятия формальных и фактических параметров.
Параметры, указываемые в заголовке процедуры при ее описании, называются формальными параметрами. Параметры, указываемые при вызове процедуры, называются фактическими параметрами.
Формальные параметры – это параметры, определяющие тип и место подстановки реальных объектов при вызове процедуры.
При вызове процедуры формальные параметры, указанные в ее заголовке, заменяются на фактические параметры в порядке их следования. Число и тип формальных и фактических параметров должен обязательно совпадать.
ЗАДАЧА 1. Ввести с клавиатуры 15 вещественных чисел в массив и найти сумму этих чисел с помощью процедуры.
program a21;
Const n =15;
Type
mas=array[1..n] of real;
Var
a:Mas;
i:integer;
{-----------------описание процедуры ----------------}
procedure summa(b:mas;t:integer);
{b-массив, t-количество чисел – формальные параметры, которые будут заменены на фактические параметры при вызове процедуры summa}
var
{--------объявление внутренних переменных------------}
i:integer; {параметр цикла}
s:real; {сумма чисел}
begin
s:=0;
for i:=1 to t do s:=s+b[i];
writeln;
writeln(‘Сумма равна:’, s:8:2);
end; {конец процедуры}
{----------------------программа---------------------}
begin
writeln(‘Введите ’, n:4,’ чисел’);
for i:=1 to n do
begin
write(‘a[‘,i,’]=’);
readln(a[i]);
end;
summa(a,n); {вызов процедуры summa, сумма n чисел}
summa(a,10); {вызов процедуры summa, сумма 10 чисел}
end.
ЗАДАЧА 2. Найти наибольший элемент массива и определить его номер. Количество элементов массива и их значения ввести с клавиатуры. Оформить ввод данных, поиск наибольшего элемент массива и определение его номера с помощью процедур.
program a22;
Const n =100; {допустимое количество чисел}
Type
mas=array[1..n] of real;
Var
a:mas;
m:integer; {количество вводимых чисел}
{--------------процедура ввода массива---------------}
Procedure vvod_mas(b:mas;vart:integer);
var
i:integer;
begin
write(‘Введите количество чисел: ’);
readln(t);
writeln(‘Введите ’, t:4,’ чисел’);
for i:=1 to t do
begin
write(‘b[‘,i,’]=’);
readln(b[i]); {ввод элементов массива}
end;
end; {конец процедуры}
{------процедура поиска максимального элемента-------}
Procedure max_el_array(b:mas; t:integer);
{b - массив, t- количество чисел}
var
i:integer; {параметр цикла}
m:real; {максимальный элемент массива}
k:integer; {его порядковый номер}
begin
m:=b[1]; k:=1; {присваиваем начальное значение}
for i:=2 to t do
if b[i]>m then
begin
m:=b[i]; k:=i;
end;
writeln;
writeln(‘Номер наибольшего элемента:’,k:3);
writeln(‘Его значение:’,m:8:2);
end; {процедуры}
{---------------------программа----------------------}
begin
vvod_mas(a,m);
max_el_array(a,m);
end.
Функции
Подпрограмма-функция предназначена для вычисления одного параметра. У функции два основных отличия от процедуры:
Первое отличие в заголовке. Он состоит из слова Function , за которым следует имя функции, затем в круглых скобках список формальных параметров, затем через двоеточие записывается тип функции, т.е. тип возвращаемого параметра. Функция может возвращать типы вещественные, порядковые и строковые.
Второе отличие в том, что процедура может иметь несколько выходных параметров-результатов, а функция только одно значение, передаваемое через ее имя. Именно этим объясняется то, что в теле функции хотя бы один раз имени функции должно присваиваться вычисленное значение.
Структура функции такая же, как и структура процедуры.
Заголовок функции имеет вид:
Function <имя> (<список формальных параметров>):<тип>
где
Function – служебное слово;
<имя> – имя функции, определяемое в соответствии с общими правилами построения идентификаторов;
<список формальных параметров> – перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов.
Для вызова функции из основной программы или другой подпрограммы следует в выражении, где необходимо использовать значение функции, указать имя функции со списком фактических параметров, которые должны совпадать по количеству и типам с формальными параметрами функции.
ЗАДАЧА 3. Ввести с клавиатуры 15 вещественных чисел в массив и найти сумму этих чисел с помощью функции.
program a23;
Const n=15;
Type
mas=array[1..n] of real;
Var
a:mas;
i:integer;
sum:real;
{-----------------описание функции-------------------}
function summa(b:mas; t:integer):real;
{b - массив}
{t - количество чисел}
{b, t - формальные параметры, которые будут заменены на фактические параметры при вызове функции summa}
var
{объявление внутренней переменной i – параметр цикла}
{объявление внутренней переменной s – суммы чисел}
i:integer;
s:real;
begin
s:=0;
for i:=1 to t do s:=s+b[i];
writeln;
{--------имени функции присваиваем результат!------}
summa:=s;
end; {конец функции}
{-----------------основная программа----------------}
begin
writeln(‘Введите ’, n:4,’ чисел’);
for i:=1 to n do
begin
write(‘a[‘,i,’]=’);
readln(a[i]);
end;
{вызов функции summa, для вычисления суммы n чисел}
sum:=summa(a,n);
writeln(‘Сумма равна:’, sum:8:2);
{вызов функции summa, для вычисления суммы 10 чисел}
sum:=summa(a,10);
writeln(‘Сумма равна:’, sum:8:2);
end.