Система программирования Turbo Pascal



                  


Как видно из рассмотренного примера,



const
NN = 100; {Максимальная длина вектора} 
var
а : array [1..NN] of Real;
i, j, N : Integer;
{----------------}
Function Norma (var x; N: Integer) : Real; 
var
a : array [1..2*MaxInt div SizeOf (Real) ] of Real absolute x;
i : Integer;
s : Real; 
begin {Norma}
s := 0;
for i := 1 to N do 
s := s + sqr (a [i] ) ;
Norma := sqrt(s) 
end {Norma} ;
{-------------------}
begin {main}
for i := 1 to 10 do 
begin
N := Random (NN) + 1; {Текущая длина вектора}
for j := 1 to N do
a [ j ] : = Random ; 
WriteLn ('N = ', N:2,норма=',Norma(a, N):10:7)
end 
end {main} .
Как видно из рассмотренного примера, передача одномерных массивов переменной длины не вызывает никаких трудностей. Сложнее обстоит дело с многомерными массивами, однако и в этом случае использование описанного приема (нетипизированный параметр и совмещение его в памяти с фиктивной переменной) все-таки проще, чем описанная в гл. 6 индексная арифметика. Еще раз напомню, что в случае многомерных массивов их элементы располагаются в памяти так, что при переходе от младших адресов к старшим наиболее быстро меняется самый правый индекс массива.

Содержание  Назад  Вперед