Подобно параметрам – переменным возможно использовать параметры – константы, которые доступны только для чтения. При описании такого параметра используются ключевое слова Const.
Синтаксическое описание
Procedure P(const b:byte);
В теле подпрограммы не допускается присваивания значению формальному параметру – констант. В случаях когда формальные параметры не должны изменить своего значения в ходе выполнения подпрограммы, в место параметра – значения следует использовать параметры – констант, то есть он должен позволить защитится от случайных присваиваний. При использовании параметра – констант структурированного типа компилятор может генерировать более эффективный код, отличающийся от аналогичного использования параметра – значения.
Подпрограммы: Использование процедур.
Реализуем программу которая будет выполнять ввод 2 текстов и нахождение символов, которые присутствуют в обоих текстах и вывод их на экран, и отдельный вывод всех отсутствующих символов.
Uses crt;
Type
|
|
Tset=st of char;
Tstring=string[200];
Const
Mn_symbol:tset=[‘a’..’z’];
Var
Str1, str2:tstring;
Mn_str1,mn_str2,mn_result1,mn_result2:tset;
Procedure input _text(zapros:string; var mn_xx:tset; varstr_xx:tstring);
Var
I:byte;
Ch:char;
Begin
Write(zapros);
I:=1;ch:=#0;
Mn_xx:=[];
While (i<=200) and (ch<>#13) do
Begin
Ch:=readkey;
If ch In mn_symbol then
Begin
Write (ch);
Str_xx:=str_xx +ch;
Mn_xx:=mn_xx+[ch]
Inc(i0;
End;
End;
Writelb;
End;
Procedure Output_Mn (Comment: Strinq; mn_xx: TSet);
Var
ch: char;
Beqin
writeln (Comment);
for ch: ‘a’ to ‘ z’ do
if ch in mn_ xx then
write (ch:2)
writeln;
End;
Beqin
Clrscr;
Input_ text (‘Введите текст № 1’ ‘mn_ str1, str1);
Input_ text (‘Введите текст № 2’ ‘mn_ str2, str);
Mn_result1:= mn_str1*mn str2
Mn rsult2:= mn_ symbol-(mn_str1+mn_str2);
Outpt _ Mn (‘ символы одновременно присутствующие в текстах:’, mn_result1);
Outpt _ Mn (‘ символы отсутствующие в текстах:’, mn_result2);
Readkey;
End.
Лекция №4
Подпрограммы. Процедуры. Определение процедур. Подпрограммы. Глобальные и локальные переменные. Формальные и фактические параметры подпрограмм. Параметры-значения, параметры-переменные, параметры-константы. Функции. Определение функций. Структурированные типы данных в качестве параметров подпрограмм.
Функции
Общая структура функций совпадают со структурой процедур. Отличительная черта в синтаксисе–записи
Синтаксис записи.
Function «имя» («список формальных параметров»): «тип возвращенного значения»;
Label
Const
Type
Var
…..
Begin
«тело функции»
End;
Типом возвращенного значения может быть любой тип, определенный в паскале. Идентификатор функций возвращает после вызова скалярное значение заданного в описании типа. Для приведения функции значения её имя должно хотя бы один раз появиться в левой части оператора присваивания в теле самой функции. Если такого присваивания произведено то при вызове функции возвращает не определенное значение.
|
|
Вызов функции осуществляется путем указания её имени и списка фактических параметров. Поскольку имя функции при вызове представлены собой возвращение значения, то вызов не может приходить обособленно, как в случае процедур. Он осуществляется в выражениях, в вызовах других подпрограммах. Однако в Паскале предусматривается возможность расширения функции (см. обособленный вызов функции).
Синтаксис вызова функции
«Имя переменной»:= «имя функций» («фактические параметры»);
Имя переменной должно быть совместимо по типу со значением, возвращаемого функцией.
Пример – функция суммы элементов массива.
Type
Massiv_1=array [1..5] of byte;
Const
A:massiv_1=(1,2,3,4,5);
B:massiv_2 = (5,6,7,8,9);
Var
I:byte;
Function sum_mas (p:massiv_1):longint;
Var
S:longint;
Begin
S:=0;
For i:=1 to 5 do
Inc(s,p[i]);
Sum_mas:=s;
End;
Var
Sum:longint;
Begin
Sum:=sum_mas(a);
Write(‘Сумма ’,sum);
Write (‘Сумма ’, Sum_mas (b));
End.
Если функция кроме изменения своих переменных изменяет какие – либо глобальные значения и производит действия не связанные с вычислением своего значения, то говорят, что функция имеет побочный эффект.
Необходимо учитывать порядок следования параметров и совместимость формальных и фактических параметров, по типу. Нельзя конструировать структурированные типы в локальный параметр, необходимо использовать уже известные идентификаторы типов это же правило нужно использовать для значения возвращающий функции.
Procedure P(k= record
I:char;
B:byte;
End;)
Правильный вариант
Type
Res=record
I:char;
B:byte;
End;
………
Procedure p(k:res);