Механизм передачи параметров
В заголовке процедуры или функции может быть задан список параметров, которые называются формальными. Название "формальные" эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове подпрограммы на их место будут подставлены конкретные значения (выражений) и имен.
Список формальных параметров, указываемых в заголовке подпрограммы, может включать в себя
1. параметры-значения;
2. параметры-переменные
3. параметры-процедуры
4. параметры-функции
5. нетипизированные параметры
В списке должны быть перечислены имена формальных параметров и их типы. Имя параметра отделяется от типа двоеточием, а параметры друг от друга — точной с запятой. Имена параметров одного типа можно объединять в подсписки, в которых имена отделяются друг от друга запятой.
Между формальными и фактическими параметрами должно быть полное ее соответствие:
• формальных и фактических параметров должно быть одинаковое количество.
• порядок следования фактических и формальных параметров должен быть один и тот же;
• тип каждого фактического параметра должен совпадать с типом соответствующего формального параметра.
Параметры-значения(передающие).Параметры-значения используются только для передачи исходных данных из основной программы в подпрограмму (процедуру функцию), в списке формальных параметров они перечисляются через запятую с обязательным указанием их типов
procedure Abort(M: byte);
function Step(N : integer; X : real): real;
Если формальный параметр объявлен как параметр-значение, то:
1. фактическим параметром может быть произвольное выражение.
2. перед вызовом процедуры значение фактических параметров вычисляются и используются как начальные значения для формальных параметров, притом, полученный результат помещается во временную память и передается процедуре. Даже если фактический параметр - простейшее выражение в виде константы или переменной, все равно процедуре будет передана лишь копия этой константы (переменной).
3. В процессе выполнения подпрограммы формальные параметры могут изменяться, но это никак не отразится на соответствующих фактических параметрах, которые сохранят те значения, которые имели до вызова подпрограммы, так как в подпрограмме меняются не они, а их копия. Поэтому параметры-значения нельзя использовать для передачи результатов из подпрограммы в основную программу.
Параметры-переменные(возвращающие). Параметры-переменные используются для возвращения результатов выполнения процедуры и в списке формальных параметров записываются после зарезервированного слова var с обязательным указанием типа.
Если параметр объявлен как параметр-переменная то:
1. его фактическим параметром может быть только переменная тождественного типа
2. при вызове процедуры ей передается сама переменная, а не ее копия, и изменение переменой приводит к изменению фактического параметра в вызывающей программе.
Зам! Параметры-переменные могут использоваться только в процедурах!
Лекция 28.
Вопросы:
1. Что такое подпрограмма, какие типы подпрограмм вы знаете?
2. Как вызвать подпрограмму, как осуществляется ее работа?
3. Что такое параметры, их виды?
4. Охарактеризовать параметры- значения.
5. Охарактеризовать параметры- переменные.
Основные задачи по теме подпрограммы:
1. Написать программу ввода одномерного массива целых чисел размера N, нахождения суммы двух массивов и вывода результата на экран, кроме этого написать процедуру- заставку, очищающую экран, выводящую в центре экрана надпись «Это программа нахождения суммы массивов».
Program _;
Uses CRT;
Const n=10;
Type mas= array[1..n] of byte;
Var a, b, c: mas;
Procedure zast;
Begin
Clrscr;
Randomize;
textcolor(red);
Gotoxy(10,10);
Writeln(‘это задача находит сумму двух массивов’)
Delay(5000);
Clrscr;
End;
Procedure vvod(var x: mas);
Var i: byte;
Begin
For i:=1 to n do x[i]:=random(50);
End;
Procedure vivod(x: mas);
Var i: byte;
Begin
For i:=1 to n do write(x[i]:4);
Writeln;
End;
Procedure sum(x, y: mas; var z: mas);
Var i: byte;
Begin
For i:=1 to n do z[i]:=x[i]+y[i];
End;
{ОСНОВНАЯ ПРОГРАММА}
BEGIN
ZAST;
VVOD(A);
VVOD(B);
SUM(A,B,C);
VIVOD(A);
VIVOD(B);
VIVOD( C );
READKEY;
END.
2. Написать программу, которая вычисляет среднее арифметическое двух чисел, используя функцию пользователя.
Program _;
Uses CRT;
Var a, b, c: real;
Function sr(x,y:real):real;
Begin
Sr:=(x+y)/2;
End;
{ОСНОВНАЯ ПРОГРАММА}
Begin
Clrscr;
Writeln(‘введите два числа’);
Readln(a,b);
C:=sr(a,b);
Writeln(‘среднее арифметическое =’,c:10:5);
Readkey;
End.
3. Написать программу, нахождения наибольшего из трех чисел, используя функцию пользователя.
Program _;
Uses CRT;
Var a, b, c: real;
Function max(x,y, z:real):real;
Var m:real;
Begin
M:=x;
If y>m then m:=y;
If z>m then m:=z;
Max:=m
End;
{ОСНОВНАЯ ПРОГРАММА}
Begin
Clrscr;
Writeln(‘введите три числа’);
Readln(a,b, c);
Writeln(‘наибольшее =’,max(a, b, c):10:5);
Readkey;
End.
Лекция 29.
Вопросы:
1. Что такое параметр. Виды параметров.
2.Разновидности формальных параметров. Их характеристика.
Задачи:
Определить значение переменных a, b.
Program _;
Var a,b:real;
Procedure vvod(x,y: real);
Begin
X:=5;
Y:=10;
End;
Begin
Vvod(a,b);
End.
Program _;
Var a,b:real;
Procedure vvod(var x,y: real);
Begin
X:=5;
Y:=sqr(5);
End;
Begin
Vvod(a,b);
End.
Определить результат работы данной процедуры:
Procedure unknown (var x,y: real);
Const eps= 0,9;
Begin
X:=0; Y:=0;
Repeat
Writeln(x:7:5,y:7:5);
X:=x+0,01;
Y:=y+0,01;
Until x+y>=eps;
End;
Определить результат работы данной функции:
Program _;
Const r=2;
Var d: real;
Function f(a,b,c:real):real;
Begin
F:=sqrt(abs(a))+sqr(c-b);
End;
Begin
D:=5+r;
Writeln(f(-36,r*2,d-3):10:5);
End.
Program _;
Const m=25;
Var d: real;
Function f(a,b:real):real;
Begin
F:= abs(5*a)+c;
End;
Begin
D:=4;
D:=sqrt(m)-d;
Writeln(f(d*2,10):10:5);
End.
Локальные и глобальные переменные.
Область действия идентификаторов.
Каждая подпрограмма включает в себя свои собственные переменные, постоянные, типы, описанные внутри данной процедуры или функции. Они называются локальными и действительны только в пределах данной подпрограммы и подпрограммах, расположенных внутри данной. Все они создаются при входе в процедуру и уничтожаются при выходе из нее.
Переменные, расположенные в основной программе, называются глобальными.
Глобальные и локальные переменные могут иметь одинаковые имена, так как им соответствуют разные объекты, но это не рекомендуется из-за возможной путаницы.
Program _;
Var i:byte;
Procedure vivod;
Var i: byte;
Begin
Write(i);
End;
Begin
I:=4;
Vivod;
End.
Найти ошибку: Написать программу, ввода и вывода одномерных массивов, нахождения их суммы.
Program _;
Type m=: array[1..n] of byte
Var a: m;
Procedure vvod (b:m);
Var i: byte;
Begin
For i:=1 to n do
Write (‘введите элемент массива’);
Readln(b[i]);
End;
Procedure vivod;
Begin
For i:=1 to n do
Write(b[i]);
End;
Function sum(b,d:m):m;
Begin
For i:=I to n do
Sum[i]:=b[i]+d[i];
End;
Begin
Vvod(x);
Vvod(y);
Z:=sum(x,y);
Vivod(z);
End.
Лекция 31.
Дата добавления: 2016-05-25; просмотров: 524;