Каждый студент выполняет по 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— элементы расположены выше главной диагонали;
i≥j— элементы расположены на главной диагонали и ниже;
i≤j— элементы расположены на главной диагонали и выше;
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(aij+ bij) = 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(i, j) иA'(i', j') следующее:i = j',j + i' = n + 1®A'(i', j') = A(n+ 1 – j, i).
Теперь можно написать программу для заданной матрицы А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,i+ i' = n + 1®A'(i', j') = A(n+ 1 – i, n+ 1 – j).
Отобразим элементы матрицы относительно горизонтальной оси симметрии (принцип решения тот же): j = j',i + i' = n + 1®A'(i', j') = A(n + 1 – i, j).
Теперь то же самое, но относительно вертикальной оси симметрии: j+ j' = n + 1,i = i'®A'(i', j') =A(i,n+ 1 –j).
Зеркально отобразим элементы матрицы относительно побочной диагонали: i+j' =n+ 1,j+i' =n+ 1®A'(i',j') = A(n + 1 – j, n + 1 – i).