If a[k,i]<>a[k,j] then

Begin

SignRow:=false; Exit

End

Else

Begin

Inc(i); Dec(j);

End;

CondHigh:=a[k,1]<a[k,2]; { Определение направления }

If CondHigh then { изменения }

For j:=2 to (n div 2)-1 do { Проверка строгой }

Ifa[k,j]>a[k,j+1] then { упорядоченности по }

Begin { возрастанию }

SignRow:=false; Exit

End;

If notCondHigh then{ Проверка строгой упорядо- }

For j:=2 to (n div 2)-1 do{ ченности по убыванию }

If a[k,j]<a[k,j+1] then

Begin

SignRow:=false; Exit

End;

End{ SignRow };

{ --------------------------------- }

Begin

В в о д m, n, A

Cond:=false;

Fori:=1 to m do

IfSignRow(i) then

Begin

Cond:=true; k:=i; Goto 10

End;

10:

If Cond then

Writeln('Заданная строка имеет номер ',k)

Else

Writeln('В матрице нет заданной строки');

End.

Пример 22.

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

 

Циклический сдвиг строки предполагает такую перестановку ее элементов, при которой не нарушается их исходное относительное расположение.

Пусть, например, третья строка матрицы имеет вид

5.8 -4.4 10.0 8.7 14.6 11.9

Здесь максимальный элемент расположен справа на две позиции от элемента главной диагонали . Следовательно, необходимо дважды выполнить циклический сдвиг строки влево, после чего она примет вид

10.0 8.7 14.6 11.9 5.8 -4.4

Cлед матрицы - это сумма элементов ее главной диагонали.

 

Программа Task222 в каждой строке матрицы определяет максимальный элемент и его индекс , после чего вычисляет параметр k, указывающий положение элемента по отношению к главной диагонали. Если k > 0 (максимальный элемент находится слева от элемента главной диагонали), то выполняется циклический сдвиг строки вправо до тех пор, пока параметр k не примет нулевое значение (в каждом цикле значение k уменьшается на 1). Последнее означает, что максимальный элемент переставлен на место элемента главной диагонали. При k < 0 циклический сдвиг производится влево.

 

ProgramTask222;

Const Nmax = 30;

TypeMatrix = array[1..Nmax,1..Nmax] of real;

Vari,j,n,

jmax : byte; { позиция макс.элемента в строке }

k : shortint; { разница между положениями Amax }

{ и элемента a[i,i] }

Amax, { максимальный элемент в строке }

Buf, { буферная переменная }

Trace : real; { след матрицы }

A : Matrix; { обрабатываемая матрица }

{ --------------------------------------------------- }

Procedure TraceMatrix;

{ Вычисление следа матрицы }

Var i : byte;

Begin

Trace:=0;

For i:=1 to n do

Trace:=Trace+a[i,i];

End{ TraceMatrix };

{ --------------------------------------------------- }

Begin

В в о д и п е ч а т ь n, A

TraceMatrix;

Writeln('След исходной матрицы Trace = ',Trace:8:2);

For i:=1 ton do

Begin

Amax:=a[i,1]; jmax:=1; { Определение положения }

Forj:=2 to n do { максимального элемента }

Ifa[i,j]>Amax then { i-ой строки }

Begin

Amax:=a[i,j]; jmax:=j

End;

k:=i-jmax;

If k>0 then

While k>0 do{ Циклический сдвиг }

Begin { строки вправо }

Buf:=a[i,n];

For j:=n downto 2 do

a[i,j]:=a[i,j-1];

a[i,1]:=Buf; Dec(k);

End

Else

If k<0 then

Whilek<0 do{ Циклический сдвиг }

Begin { строки влево }

Buf:=a[i,1];

For j:=1 ton-1 do

a[i,j]:=a[i,j+1];

a[i,n]:=Buf; Inc(k);

End;

End;

П е ч а т ь n, A

TraceMatrix;

Writeln('След преобразованной матрицы Trace = ',Trace:8:2);

End.

 

 

Лабораторная работа №12

Тема: «Решение задач обработки двумерных массивов. Использование матриц в качестве параметров в функциях»

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

Задания для самостоятельной работы

 

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

2. В прямоугольной матрице определить количество столбцов, cодержащих только числа одного знака (положительные или отрицательные) и не содержащих нулевых элементов.

3. Для прямоугольной матрицы найти минимальный из положительных и максимальный из отрицательных элементов. Нулевые элементы не учитывать.

4. В прямоугольной целочисленной матрице обменять местами максимальный по модулю и минимальный по модулю четные элементы.

5. Для каждого столбца прямоугольной матрицы подсчитать сумму входящих в него элементов и определить, имеются ли столбцы с одинаковой суммой.

6. В прямоугольной матрице часть элементов имеют нулевое значение. Заменить каждый нулевой элемент суммой смежных ему элементов (по горизонтали, вертикали и диагоналям). Формирование новой матрицы выполнять в буферном массиве.

7. Если максимальный элемент -ой строки прямоугольной матрицы ( ) больше суммы остальных элементов данной строки, а модуль минимального элемента меньше суммы остальных элементов строки, то заменить максимальный и минимальный элементы полусуммой их значений.

8. При однократном просмотре прямоугольной матрицы определить три минимальных элемента, после чего переставить их в обратном порядке.

9. Дана квадратная вещественная матрица. Определить отдельно сумму элементов, расположенных выше побочной диагонали, и сумму элементов, расположенных ниже этой диагонали. Если эти суммы не равны, то ко всем элементам, образующим меньшую сумму, добавить такое значение, чтобы суммы и оказались равными.

10. Дана квадратная вещественная матрица. Определить отдельно количество отрицательных элементов, расположенных выше главной диагонали, и количество отрицательных элементов, расположенных ниже этой диагонали. Если , то изменить знаки определенного количества отрицательных элементов таким образом, чтобы выполнялось равенство .

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

12. В каждом столбце прямоугольной матрицы перенести максимальный по модулю элемент в последнюю позицию столбца, сдвинув при этом вверх расположенные после него элементы.

13. Среди диагоналей квадратной матрицы, параллельных главной и расположенных ниже нее, найти такую, сумма модулей элементов которой минимальна по сравнению с другими диагоналями.

14. Элементы, расположенные на периметре прямоугольной матрицы, сгруппировать в порядке возрастания, начиная с элемента, расположенного в левом верхнем углу матрицы. Обход элементов производить по часовой стрелке. Буферный массив не использовать.

15. Для заданной квадратной матрицы сформировать одномерный массив, элементы которого - максимумы элементов диагоналей, параллельных главной и расположенных ниже нее.

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

17. В прямоугольной матрице, имеющей четное количество строк и четное количество столбцов, слева направо и сверху вниз пронумерованы квадраты из четырех элементов. Определить номер квадрата, для которого сумма входящих в него элементов максимальна.

Пример нумерации квадратов для матрицы 6 ´ 8 элементов:

1 2 3 4

5 6 7 8

9 10 11 12

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

19. Найти минимальный среди модулей всех элементов тех столбцов матрицы, которые строго упорядочены (либо по возрастанию, либо по убыванию).

20. Определить, имеются ли среди столбцов прямоугольной целочисленной матрицы такие, которые составлены из попарно различных чисел.

21. Среди строк прямоугольной целочисленной матрицы, содержащих только нечетные элементы, найти строку с минимальной суммой входящих в нее элементов.

22. Допустимым преобразованием матрицы называют перестановку двух строк или двух столбцов. Для заданной квадратной матрицы с помощью допустимых преобразований добиться того, чтобы один из элементов матрицы, обладающий наименьшим по модулю значением, располагался в правом нижнем углу матрицы.

23. В квадратной матрице найти наибольший элемент среди элементов, расположенных на главной и побочной диагоналях, после чего обменять его местами с наименьшим элементом, смежным с пересечением этих диагоналей.

Примечание. Если - нечетное, то на пересечении указанных диагоналей находится один элемент, при четном с точкой пересечения смежны 4 элемента.

24. Сформировать одномерный массив, получающийся при чтении квадратной матрицы по спирали, начиная с верхнего левого элемента (против часовой стрелки).

25. Задана вещественная квадратная матрица . Определить значение и положение двух элементов и , для которых параметр имеет максимальное значение. Для каждой пары элементов параметр должен вычисляться только один раз.

26. Для заданной квадратной матрицы сформировать одномерный массив из элементов диагоналей, параллельных главной. Найти след матрицы, суммируя элементы одномерного массива.

27. Матрица, симметричная относительно главной диагонали, задана верхним треугольником, включающим главную диагональ, в виде одномерного массива по строкам. Восстановить исходную квадратную матрицу.

28. Квадратную матрицу повернуть на 90 градусов по часовой стрелке.

29. В квадратной матрице поменять местами элементы, расположенные в верхней и нижней четвертях, ограниченных главной и побочной диагоналями (за исключением элементов этих диагоналей).

30. Квадратную матрицу называют ленточной шириной , если все ее элементы, расположенные ниже -ой поддиагонали и выше -ой наддиагонали, равны нулю. Требуется заданную ленточную матрицу (значение нужно определить в программе) представить в виде одномерного массива (наддиагонали , -1, ..., главная диагональ, поддиагонали 1, 2, ..., ) и, суммируя элементы этого массива, вычислить ее след.

31. По целочисленной прямоугольной матрице сформировать одномерный массив , включив в него по убыванию несовпадающих между собой наибольших элементов матрицы . Рекомендуется предварительно сгруппировать матрицу по убыванию ее элементов, неявно представив ее как одномерный массив. В частном случае может иметь место , если в матрице много одинаковых элементов.

32. Элементами квадратной матрицы являются цифры 0, 1, ..., 9. Определить, имеются ли в матрице четыре смежных элемента по горизонтали (W - O), вертикали (N - S) или диагонали (SW - NO или NW - SO), составляющие цифры текущего года. Здесь буквами N, S, W, O обозначены стороны света, определяющие направление просмотра. Если такие элементы обнаружены, отпечатать их индексы.

33. В каждой строке квадратной матрицы определить сумму элементов, расположенных слева от главной диагонали, и сумму элементов, расположенных справа от этой диагонали, после чего сгруппировать строки в порядке возрастания разности .

34. В каждой строке прямоугольной матрицы, кроме первой и последней, определить сумму элементов, не принадлежащих периметру матрицы, после чего сгруппировать эти строки в порядке уменьшения указанных сумм, не затрагивая при этом элементы, расположенные на периметре матрицы.

35. В прямоугольной целочисленной матрице расположены последовательно по строкам элементы одномерного массива . Определить местоположение в матрице наиболее длинной монотонной последовательности этих элементов.

Примечание.Для монотонной серии выполняется условие

или

36. Рассматривая элементы прямоугольной матрицы как правостороннюю спираль с началом в одном из угловых элементов, сгруппировать эти элементы в порядке возрастания. Буферный массив не использовать. Индексы углового элемента ввести с клавиатуры.

37. В квадратной матрице сгруппировать в порядке возрастания элементы каждой диагонали, параллельной главной, рассматривая эти элементы в направлении NW - SO. Реализовать два варианта программы: с использованием буферного массива и без него.

38. Элементами квадратной матрицы являются числа 0 и 1, причем все элементы первой строки равны 1. Определить, имеется ли хотя бы один путь, проходящий через единичные элементы, начинающийся в верхнем левом углу и заканчивающийся в нижней строке матрицы. При этом движение разрешается лишь вправо и вниз. Если путь найден, отпечатать индексы входящих в него элементов.