Pers.narod.ru. Алгоритмы. Обработка матрицы и вектора одной подпрограммой |
Вопрос по Паскалю: "Мне нужно обработать матрицу и вектор одной подпрограммой... как это сделать?" Ответ - на странице заметки.
Способ 1: с помощью оператора type интерпретировать матрицу как совокупность векторов. Нужно заметить, что не-учебное применение оператора type весьма сомнительно. Тем не менее, вот полный листинг программы-примера:
{Интерпретация строк матрицы как векторов через type на Паскале}
const n=3;
type vect=array [1..n] of real; {вектор - совокупность значений типа real}
matr=array [1..n] of vect; {матрица - совокупность векторов}
var x:vect; a:matr;
function sum (var x:vect; n:integer):real;
var i:integer; s:real;
begin
s:=0;
for i:=1 to n do s:=s+x[i];
sum:=s;
end;
var i,j:integer;
begin
writeln;
writeln ('A':15,'X':10);
for i:=1 to n do begin
x[i]:=random(10);
for j:=1 to n do begin
a[i,j]:=random(10);
write (a[i,j]:5:0);
end;
writeln (x[i]:10:0);
end;
writeln ('Sum(x)=',sum(x,3):5:0);
for i:=1 to n do writeln ('Sum(A[',i,'])=',sum(a[i],3):5:0);
reset (input); readln;
end.Способ 2, чисто алгоритмический: поскольку адресация памяти в любом случае линейна, следует понимать матрицу как удобный для программиста структурный тип данных. В отдельных случаях использование матрицы может быть заменено использованием вектора с тем же количеством элементов: так, матрице A размерностью n*m всегда может быть сопоставлен вектор b из n*m элементов, а обращение к элементу A[i,j] при нумерации строк и столбцов с единицы может быть заменено на обращение к элементу b[(i-1)*m+j].
|
|