ВУЗ:
Составители:
Рубрика:
79
Второй способ передачи параметров называется передачей параметров по ссылке или по
адресу. При передаче параметра по ссылке в процедуру пересылается уже не значение
аргумента, а его местоположение (адрес) в памяти компьютера. Чтобы сообщить
компилятору о намерении передать такой параметр, в заголовке процедуры в списке
формальных параметров следует указать слово VAR. Если формальный параметр снабжен
атрибутом VAR, а соответствующий ему фактический параметр является переменной, то
любые изменения формального параметра будут отражаться в значениях фактического
параметра, поскольку теперь формальный и фактический параметры занимают одну и ту же
область памяти.
Общая схема процедуры аналогична схеме функции со следующими изменениями:
ключевое слово FUNCTION заменяется на PROCEDURE;
отсутствует тип результата.
Вызов процедуры в основной программе оформляется как отдельное предложение,
состоящее из имени процедуры и пары круглых скобок, в которых через запятую
перечислены фактические параметры. Предложение заканчивается как обычно символом ";".
Рассмотрим пример на задачу первого типа: необходимо выполнить перемножение двух
матриц А(3х4) и В(3х4).
Оформим в виде процедуры ввод матрицы. Программа в этом случае может иметь вид:
{*************************************************************}
{* программа перемножения двух матриц A, B *}
{*************************************************************}
Program Main;
Const
N = 3; { количество строк в матрице }
M = 4; { количество столбцов в матрице }
Type
MatrTyp = array[1..N, 1..M] of real;
Var
A, B, C : MatrTyp; { массивы можно передавать только как
простой тип }
i1, i2, i3 : byte; { индексы массивов }
{*************************************************************}
{* процедура ввода значений матрицы *}
{*************************************************************}
Procedure GetMatr(NameMatr : string; var Matr : MatrTyp);
Var
i, j : byte;
Begin { GetMatr }
WriteLn('Введите значения матрицы ', NameMatr);
For i:= 1 to N do
begin
WriteLn('Строка ', i);
For j:= 1 to M do
Read(Matr[i,j]);
WriteLn; { перевод на новую строку }
end;
End; { GetMatr }
{*************************************************************}
Второй способ передачи параметров называется передачей параметров по ссылке или по адресу. При передаче параметра по ссылке в процедуру пересылается уже не значение аргумента, а его местоположение (адрес) в памяти компьютера. Чтобы сообщить компилятору о намерении передать такой параметр, в заголовке процедуры в списке формальных параметров следует указать слово VAR. Если формальный параметр снабжен атрибутом VAR, а соответствующий ему фактический параметр является переменной, то любые изменения формального параметра будут отражаться в значениях фактического параметра, поскольку теперь формальный и фактический параметры занимают одну и ту же область памяти. Общая схема процедуры аналогична схеме функции со следующими изменениями: ключевое слово FUNCTION заменяется на PROCEDURE; отсутствует тип результата. Вызов процедуры в основной программе оформляется как отдельное предложение, состоящее из имени процедуры и пары круглых скобок, в которых через запятую перечислены фактические параметры. Предложение заканчивается как обычно символом ";". Рассмотрим пример на задачу первого типа: необходимо выполнить перемножение двух матриц А(3х4) и В(3х4). Оформим в виде процедуры ввод матрицы. Программа в этом случае может иметь вид: {*************************************************************} {* программа перемножения двух матриц A, B *} {*************************************************************} Program Main; Const N = 3; { количество строк в матрице } M = 4; { количество столбцов в матрице } Type MatrTyp = array[1..N, 1..M] of real; Var A, B, C : MatrTyp; { массивы можно передавать только как простой тип } i1, i2, i3 : byte; { индексы массивов } {*************************************************************} {* процедура ввода значений матрицы *} {*************************************************************} Procedure GetMatr(NameMatr : string; var Matr : MatrTyp); Var i, j : byte; Begin { GetMatr } WriteLn('Введите значения матрицы ', NameMatr); For i:= 1 to N do begin WriteLn('Строка ', i); For j:= 1 to M do Read(Matr[i,j]); WriteLn; { перевод на новую строку } end; End; { GetMatr } {*************************************************************} 79
Страницы
- « первая
- ‹ предыдущая
- …
- 77
- 78
- 79
- 80
- 81
- …
- следующая ›
- последняя »