Помощь в написании студенческих работ
Антистрессовый сервис

Примеры решения задач в двумерном массиве

РефератПомощь в написанииУзнать стоимостьмоей работы

Циклический сдвиг столбцов. Как и в случае одномерного массива, циклическое смещение столбцов на г позиций заключается в повторении г раз (цикл по переменной ii) смещения на одну позицию. Если было введено число г, превышающее количество столбцов ш, то значение г уменьшается до остатка от деления на ш, так как при повторе смещения столбцов матрицы на одну позицию ровно m раз матрица становится… Читать ещё >

Примеры решения задач в двумерном массиве (реферат, курсовая, диплом, контрольная)

Пример 6.2

Пусть даны массивы MyDArray и MyDKvArray, соответствующие целочисленным матрицам размером п х т (п = 10, т = 8) и п х п (п = 10). Элементами матриц являются случайные числа от 1 до 20.

  • 1. Поменять местами строки с номерами k и р матрицы MyDArray и столбцы с номерами q и s массива MyDKvArray.
  • 2. Определить количество строк и столбцов матрицы MyDArray, содержащих элементы, кратные трем.
  • 3. Определить номера столбцов матрицы MyDArray, в которых имеется хотя бы одна пара идущих подряд одинаковых чисел. В случае отсутствия таких столбцов вывести соответствующее сообщение.
  • 4. Нс используя вспомогательных массивов, циклически сдвинуть столбцы матрицы MyDArray на г столбцов вправо.
  • 5. Используя вспомогательный массив, упорядочить строки матрицы MyDKvArray по возрастанию количества элементов, больших 15.
  • 6. Не используя вспомогательного массива, транспонировать матрицу MyDKvArray.
  • 7. Вычислить суммы элементов выше и ниже вторичной диагонали матрицы MyDKvArray.

Программный код заполнения массивов и вывод их на экран приведены в листинге 6.14.

Листинг 6.14

{Заполнение массива MyDArray) for i: = 1 to n do

for j: =1 to m do MyDArray[i, j] :=random (1,20) ;

{Заполнение массива MyDKvArray) for i:=l to n do

for j: =1 to n do MyDKvArray[i, j]: =random (1,20) ;

{Вывод на экран массива MyDArray) for i:=l to n do begin

for j:=1 to m do write (MyDArray[i, j ]: 4); writeln; end;

writeln; writeln;

{Вывод на экран массива MyDKvArray) for i: =1 to n do begin

for j:=1 to n do write (MyDKvArray[i, j]: 4); writeln; end;

writeln; writeln;

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

Листинг 6.15

write ('Введите номер строки к: '); Readln (к);

write ('Введите номер строки р: '); Readln (р);

for j : =1 to ш do begin

tmp:=MyDArray[k, j];

MyDArray[к, j]: =MyDArray[p, j];

MyDArray[p, j]: =tmp; end;

writeln;

write ('Введите номер строки q: '); Read (q); write ('Введите номер строки s: '); Read (s);

for i:=l to n do begin

tmp:=MyDKvArray[i, q];

MyDKvArray[i, q]: =MyDKvArray[i, s]; MyDKvArray[i, s]: =tmp; end;

writeln;

2. Определение строк с элементами, кратными трем. Программный код решения второй задачи приведен в листинге 6.16. Блок-схема алгоритма определения количества строк, в которых есть элементы, кратные трем, приведена на рис. 6.5.

Листинг 6.16

k_str:=0; {Инициализация количества строк} for i:=l to n do for j:=l to m do

if MyDArray[i, j] mod 3 =0 then begin

inc (k_str);

break; {Если имеется хотя бы один элемент, кратный трем, дальше проверять нет смысла}.

end;

writeln ('B матрице MyDArray имеется ', k_str, ' строк, в которых есть числа, кратные 3. ') ;

k_stl:=0; {Инициализация количества столбцов} for j:=1 to m do for i:=1 to n do

if MyDArray[i, j] mod 3 =0 then begin

inc (k_stl);

break; {Если имеется хотя бы один элемент, кратный трем, дальше проверять нет смысла}.

end;

writeln ('B матрице MyDArray имеется ', k_stl, ' столбцов, в которых есть числа, кратные 3. '); writeln;

Блок-схема решения алгоритма второй задачи примера 6.10.

Рис. 6.5. Блок-схема решения алгоритма второй задачи примера 6.10.

3. Определение столбцов с подряд идущими элементами. При определении столбцов с подряд идущими одинаковыми элементами изначально предполагается, что таких столбцов нет (переменная flag булевского типа инициализируется значением false). Внешний цикл по j пробегает значения индексов столбцов, а внутренний цикл по i пробегает значения индексов строк для текущего столбца j. Если была найдена хотя бы одна пара подряд идущих одинаковых значений, то проверять далее смысла нет. Программный код решения третьей задачи представлен в листинге 6.17.

Листинг 6.17.

flag:=false; for j:=1 to m do

for i:=1 to n-1 do

if MyDArray[i, j] = MyDArray[i+1,j] then begin

writeln ('Подряд идущие одинаковые значения имеются в столбце ', j); flag:=true;

break; {Если имеется хотя бы одна искомая пара, дальше проверять нет смысла. Работа внутреннего цикла прерывается).

end;

if flag=false then writeln ('Столбцов с подряд идущими одинаковыми элементами нет.');

4. Циклический сдвиг столбцов. Как и в случае одномерного массива, циклическое смещение столбцов на г позиций заключается в повторении г раз (цикл по переменной ii) смещения на одну позицию. Если было введено число г, превышающее количество столбцов ш, то значение г уменьшается до остатка от деления на ш, так как при повторе смещения столбцов матрицы на одну позицию ровно m раз матрица становится исходной.

Смещение осуществляется поэлементно по строкам. Программная реализация приведена в листинге 6.18.

Листинг 6.18

write ('Введите количество столбцов смещения: ');

Readln (г);

r:=r mod m;{для случая, когда введенное число превышает число столбцов}.

for ii:=l to г do for i:=l to n do

for j:=m downto 2 do begin

tmp:=MyDArray[i, j];

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

MyDArray[i, j-1]: =tmp;

end;

5. Упорядочивание массива no столбцам. Для решения пятой задачи используется вспомогательный одномерный массив Vspom, элементы которого содержат количество элементов в каждой строке массива MyDKvArray, превышающих 15. Затем происходит упорядочивание массива Vspom, но возрастанию и одновременная перестановка строк матрицы MyDKvArray. Программная реализация пятой задачи приведена в листинге 6.19.

Листинг 6.19.

{Заполнение вспомогательного массива, содержащего количество элементов, больших 15}.

for i:=1 to п do begin k: = 0 ;

for j:=1 to n do

if MyDKvArray[i, j]>15 then inc (k);

Vspom[i]: =k;

end;

{Сортировка вспомогательного массива и одновременная перестановка строк исходного массива} for ii:=l to n-1 do for jj:=ii+l to n do begin.

if Vspom[jj].

tmp:=Vspom[j j]; {Перестановка элементов вспомогательного массива}.

Vspom[j j] :=Vspom[i i];

Vspom[ii]: =tmp; for j:=1 to n do.

begin {Перестановка ii-й и jj-й строки матрицы MyDKvArray} tmp:=MyDKvArray[j j, j];

MyDKvArray[j j, j] :=MyDKvArray[i i, j]; MyDKvArray[i i, j] :=tmp; end; end;

end;[1][2]

Отношения между индексами элементов квадратной матрицы.

Рис. 6.6. Отношения между индексами элементов квадратной матрицы:

а — главная диагональ; 6 — вторичная диагональ.

6. Транспонирование матрицы. 1. Вычисление сумм по отношению к диагоналям. Программный код решения шестой задачи приведен в листинге 6.20, седьмой задачи — в листинге 6.21.

Листинг 6.20

for i:=l to n do for j:=1 to n do if j>i then begin

tmp:=MyDKvArray[i, j];

MyDKvArray[i, j]: =MyDKvArray[ j, i ]; MyDKvArray[j, i]: =tmp; end;

Листинг 6.21.

sl:=0;s2:=0; {Начальные значения сумм}.

for i:=1 to n do for j:=1 to n do begin

if in-j+l then s2:=s2+MyDKvArray[i, j]; end;

writeln ('Сумма элементов выше вторичной диагонали равна ', si);

writeln ('Сумма элементов ниже вторичной диагонали равна ', s2) ;

  • [1] Для решения шестой и седьмой задач нужно использовать тот факт, что между индексами элементов, расположенных выше, ниже и непосредственно на главной и вторичной диагоналях матрицы, имеются определенные соотношения:
  • [2] индексы элементов, находящихся на главной диагонали, равны, т. е.i=j. У элементов выше главной диагонали i>j. У элементов ниже главной диагонали in+l. В наглядной форме соотношения представлены на рис. 6.6.
Показать весь текст
Заполнить форму текущей работой