Вопрос по Паскалю: "Мне нужно обработать матрицу и вектор одной подпрограммой... как это сделать?" Ответ - на странице заметки.
Способ 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], i=1,2,...,n, j=1,2,...,m. При нумерации с нуля, как в C++, будет удобней: b[i*m+j]
22.04.2009, 16:03 [9154 просмотра]