Лабораторный практикум по программированию на языке Паскаль. Найханова Л.В - 79 стр.

UptoLike

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