БлогNot. Запись #109 (без заголовка)

Вопрос по Паскалю: "Мне нужно обработать матрицу и вектор одной подпрограммой... как это сделать?" Ответ - на странице заметки.

Способ 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 просмотра]


теги: программирование алгоритм pascal

К этой статье пока нет комментариев, Ваш будет первым