Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Двумерные массивы.doc
Скачиваний:
41
Добавлен:
10.02.2016
Размер:
310.78 Кб
Скачать

Каждый студент выполняет по 5 заданий.

Номера заданий вычисляются по формуле:

( N+ (K-1)*35 ) + 902, где

N– порядковый номер студента по журналу,

К – порядковый номер выполняемой задачи (от 1 до 6),

Выполнение ошибочного варианта считается злонамеренным деянием и карается выполнением своего варианта

Студенты, претендующие на повышенную оценку (>75 баллов),

изучают дополнительную теорию и выполняют 2 дополнительных задания.

Номера заданий выбираются произвольно из задач: 1078-1081

Теоретические сведения Двумерные массивы

Двумерным массивом называется совокупность данных, каждое значение которых зависит от двух чисел, которые можно рассматривать как индекс строки и индекс столбца в матрице.

Формат записи Двумерного массива в языке Паскаль:

<имя>: array[<н_индекс_1>..<в_индекс_1>,

<н_индекс_2>..<в_индекс_2>]

of<тип>;

Для того чтобы использовать элемент массива, надо указать имя массива и индексы элемента. Первый индекс соответствует номеру строки, второй — номеру столбца. Например:

for i:=1 to n do

for j:=1 to n do

a[i,j]:=random(100);

Для ввода многомерных массивов, так же как и одномерных, можно использовать генератор случайных чисел, константы и файлы. При описании массивов удобно использовать именованные константы в качестве значений верхних индексов массивов.

Аналогом массивов языка Паскаль в математике являются матрицы. Матрицы, у которых число строк равно числу столбцов, называются квадратными.A(n,n) — квадратная матрица.

Перечислим основные свойства квадратных матриц.

1. Квадратные матрицы имеют главную и побочную диагонали.

Например, для матрицы А на главной диагонали лежат элементы 1, 5 и 9, а на побочной — 3, 5 и 7.

Если:

  • i = j— элементы расположены на главное диагонали;

  • i>j— элементы расположены ниже главное диагонали;

  • i<j— элементы расположены выше главной диагонали;

  • ij— элементы расположены на главной диагонали и ниже;

  • ij— элементы расположены на главной диагонали и выше;

  • i+j=n+ 1 — элементы расположены на побочной диагонали;

  • i+j<n+ 1 — элементы расположены над побочной диагональю;

  • i+j>n+ 1 — элементы расположены под побочной диагональю.

2. Квадратная матрица, у которой все элементы, исключая элементы главной диагонали, равны нулю, называется диагональной матрицей:

3. Диагональная матрица, у которой все элементы, стоящие на главной диагонали равны 1, называетсяединичной матрицей:

4. Если в матрице А(m,n) поменять местами строки и столбцы, то получится матрицаAT(m,n), которая называетсятранспонированнойматрицей:

Над матрицами можно выполнять следующие действия.

  • Суммой однотипных матриц A(aij) иB(bij) называют матрицуC(aijbij) = C(cij), каждый элемент которой равен сумме соответствующих элементов матрицА иВ,С = А + В,cij = aij + bij.

  • Разностью матриц A(aij) иB(bij) называют матрицуC(aij– bij), каждый элемент которой равен разности соответствующих элементов матрицАиВ:C = A– B,cij = aij– bij.

  • Произведением матрицы A на некоторое числоαназывают матрицуА · α, у которой каждый элемент равенАij·α.

  • Произведением двух матриц A(aij) иB(bij) называется такая матрица (число столбцов матрицыАдолжно равняться числу строк матрицыВ), у которой элементы определяются по формуле, где,. То есть нужно перемножить соответствующие элементыi-й строки матрицыАна элементыj-го столбца матрицыВи полученные произведения сложить:.

Приведем типовые алгоритмы обработки матриц на языке Паскаль.

Вывод матрицы в виде таблицы:

for i:=1 to n do

begin

for j:=1 to m do

write(a[i,j]:4);

writeln

end;

Еще один способ:

for i:=1 to n do

for j:=1 to m do

if j<m then write(a[i,j]:4)

else writeln (a[i,j]:4);

Суммирование матриц:

for i:=1 to n do

begin

for j:=1 to m do

c[i,j]:=a[i,j]+b[i,j]

end;

Умножение матриц:

for i:=1 to n do

for j:=1 to n do

begin

s:=0;

for k:=1 to n do

s:=s+a[i,k]*b[k,j];

c[i,j]:=s

end;

При транспонировании матрицы элементы, расположенные на главной диагонали исходной и транспонированной матриц, одни и те же. Иными словами, транспонировать матрицу — значит зеркально отразить ее элементы относительно главной диагонали. Сделать это можно, введя новый массив, например, следующим образом:

fori:=1tondo

for j:=1 to n do

b[i,j]:=a[j,i];

Очень часто встречаются задачи на повороты матриц. Рассмотрим метод их решения.

Пусть дана квадратная матрица Аnn, состоящая из целых чисел. Повернем ее на 90°по часовой стрелке.

Для наглядности используем матрицу А3,3:

Матрица после поворота:

Установим соответствие между элементами матриц AиA'.

Элементу а11матрицыАсоответствует элементa'31матрицыA'; элементуа12матрицыАсоответствует элементa'21матрицыA'; элементуа13матрицыАсоответствует элементa'11матрицыA' и т. д.

Значит отношение матриц A(ij) иA'(i', j') следующее:i = j',j + i' = n + 1®A'(i', j') = A(n+ 1 – ji).

Теперь можно написать программу для заданной матрицы А33:

const n=3;

var a,b: array [1..n,1..n] of integer;

i,j: integer;

BEGIN

randomize;

for i:=1 to n do

begin

for j:=1 to n do

begin

a[i,j]:=random(20);

write(a[i,j]:4)

end;

writeln

end;

writeln;

for i:=1 to n do

begin

for j:=1 to n do

begin

b[i,j]:=a[n+1-j,i];

write(b[i,j]:4)

end;

writeln

end;

END.

Приведем другие соотношения матриц при поворотах.

При повороте на 90° против часовой стрелки: j' = i',i + j' = n + 1®A'(i', j') =A(j',n+ 1 –i).

При повороте на 180° по часовой стрелке: j+j' =n+ 1,ii' = n + 1®A'(i', j') = A(n+ 1 – in+ 1 – j).

Отобразим элементы матрицы относительно горизонтальной оси симметрии (принцип решения тот же): j = j',i + i' = n + 1®A'(i', j') = A(n + 1 – ij).

Теперь то же самое, но относительно вертикальной оси симметрии: jj' = n + 1,i = iA'(i', j') =A(i,n+ 1 –j).

Зеркально отобразим элементы матрицы относительно побочной диагонали: i+j' =n+ 1,j+i' =n+ 1®A'(i',j') = A(n + 1 – jn + 1 – i).