Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.pdf
Скачиваний:
37
Добавлен:
07.06.2015
Размер:
672.16 Кб
Скачать

procedure Substitution1(var m:MyArray); var i : integer;

begin

for i:=1 to n do

if m[i]<0 then m[i]:= -m[i];

end;

6. Работа с несколькими массивами.

Даны два одномерных массива A и B. Найти их скалярное произведение. Скалярным произведением называется сумма произведений соответствующих элементов: a[1]*b[1]+a[2]*b[2]+..+a[n]*b[n]

function Sp(a,b : MyArray) : longint; var i : integer;

S : longint; begin

S:=0;

for i:=1 to n do s:=s+a[i]*b[i]; Sp:=S;

end;

5.2. Двумерные массивы

Аналогом двумерного массива в математике является матрица. Номер элемента определяется пересечением строки и столбца. Существует несколько способов объявления двумерного массива.

1) Двумерный массив как одномерный, элементами которого являются одномерные массивы.

const n=2; m=3;

type omyArray = array [1..m] of тип_элемента; dmyArray = array [1..n] of omyArray;

var v : omyarray; a : dmyArray;

49

2) Можно исключить определение типа omyArray в определении типа dmyArray:

const n=2; m=3;

type dmyArray = array [1..n] of array [1..m] of тип_элемента var a : dmyArray;

3) Запись можно ещё немного сократить:

const n=2; m=3;

type dmyArray = array [1..n,1..m] of тип_элемента var a : dmyArray;

4) Ну и, наконец, задать двумерный массив можно и в секции описания переменных:

var a : array [1..n,1..m] of тип_элемента;

При работе с массивом обычно используют 2 вложенных цикла: внешний – по строкам и внутренний – по столбцам. Ниже приведен пример программы позволяющей произвести заполнение двумерного массива случайными числами в диапазоне от -25 до 26, а затем вывести полученный массив на экран.

program Ex1; const n=10; m=15;

type dmyArray = array [1..n,1..m] of integer; var A : dmyArray;

procedure Init(var x : dmyArray); {формируем массив} var i,j : integer;

begin

for i:=1 to n do

for j:=1 to m do x[i,j]:=-25+random(51);

end;

50

procedure Print(x: dmyArray); {вывод массива на экран} var i,j: integer;

begin

for j:=1 to m do begin

for i:=1 to n do write(x[i,j]:5); writeln;

end;

end;

begin {основная программа} Init(A); writeln(‘Массив A:’); Print(A);

readln;

end.

При решении задач с двумерными массивами возникают те же типы задач, что и в случае одномерных массивов.

1. Вычисление произведения матриц.

procedure Mult(x,y : dmyArray; var z : dmyArray); var i,j,k : integer;

begin

for i:=1 to n do

for j:=1 to n do begin

z[i,j]:=0;

for k:=1 to n do z[i,j]:=z[i,j]+x[i,k]*y[k,j];

end;

end;

Здесь x,y – матрицы, произведение которых необходимо найти, а z – искомое произведение.

51

2. Изменению значений некоторых элементов двумерного массива. В массиве размерности NxM к элементам чётных столбцов необходимо прибавить элемент первого столбца соответствующей строки.

procedure Sub(var x : dmyArray); var i,j : integer;

begin

for i:=1 to n do

for j:=1 to (m div 2) do x[i,2*j]:= x[i,2*j]+x[i,1]);

end;

3. Вставить строку из нулей после строки с номером k. Необходимо первые k строк оставить без изменения, все строки с

номером после k сдвинуть на одну вниз. Лучше всего начать делать это с последней до k+1-oй строки. Кроме этого, потребуется введение (описание) массива с числом строк, большим изначального на 1

type dmyArray = array [1..n+1,1..m] of integer

поскольку изменять размерность массивов в теле программы нельзя.

procedure Insert(k : integer; var x : dmyArray); var i,j : integer;

begin

for i:=n down to k+1 do for j:=1 to m do

x[i+1,j]:=x[i,j]; {элементу столбца присваиваем значение элемента того же столбца, но строчкой выше}

for j:=1 to m do x[k+1,j]:=0;

end;

52