Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

требуется составить программу, выполняющую указан­ные в варианте преобразования с квадратной А(N, N) матрицей. При этом сле­дует нарисовать исходную матрицу с индексами ее элементов и преобразо­ванную с новым содержимым (аналогично рисункам к примеру 6.4). Если в условии задачи речь идет о перемещении элементов матрицы, то в качестве исходных данных лучше брать не произвольные числа, а индексы этих элемен­тов (например содержимым клетки А(2,5) лучше взять число 25). Тогда легче разработать алгоритм программы, написать ее и отладить. Программа должна строиться таким образом, чтобы существовала возможность ее использования с массивами любой размерности, содержащими произвольные элементы. В программе должна быть предусмотрена выдача на печать исходных и преоб­разованных матриц и других, указанных в задании, результатов вычислений. Если решение задачи критично к факту четности/не­четности числа столбцов или строк, студент сам выбирает этот параметр. Ниже для пояснения сути задания ниже некоторые варианты сопровождаются рисунками

Моё задание №19

13÷20. Заполнить матрицу А(N, N) числами натурального ряда в последова­тельности, указанной на рисунке и найти их сумму.

 

Пример 6-4. Заполнить двумерный массив A(N, N) элементами натураль­ного ряда (т. е. числами 1,2,3, и т. д.), начиная с нижнего правого угла в направлении, показанном пунктиром на рис. 6.4а. Чтобы выявить необходимые законы перемещения по матрице, в ее клетках показаны индексы элементов. Способов решения таких такого рода задач может быть несколько.

НЕ нашли? Не то? Что вы ищете?

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

1). если у правой стороны матрицы, то вверх на одну клетку и вниз-влево по диагонали до нижней границы;

2). если у нижней границы, то влево на одну клетку и вверх-вправо по диагонали до правой границы;

3). у верхней границы – влево на одну клетку и вниз-влево до левой границы;

4). у левой границы – вверх на одну клетку и вверх-вправо до правой границы.

В любом случае движение прекращается при достижении клетки A(1,1). Результат заполнения массива А показан на рис. 6.4б.

Программа приведена ниже. Здесь ST – номер текущей строки (первонача­льно N, поскольку движение начи­нается с последней ячейки массива A(N, N)), KL – номер текущей колонки (первоначально N), K – растущее значение нату­рального ряда (первоначально 1). Самый внешний цикл (while k<n*n) ограничивает все действия достижением растущим значением натурального ряда K значения N*N, поскольку именно столько клеток имеется в квадратной матрице раз­мерности N. Внутри цикла организованы четыре разные группы операций в зависимости от того, какое из четырех типовых элементарных действий (см. выше) выполняется. Определяет тип действия оператор if/else if, в кото­ром выясня­ется, где именно вы находитесь. Внутри каждого IF организован цикл while, в котором осуществляются необходимые перемещения в матрице в соответст­вии с одним из четырех алгоритмов. По завершении всех действий, т. е. после достижения последней клетки (в нашем случае A(1,1)), выполняется последовательная печать строк матрицы A с заполненными клетками.

program P6-4;

uses crt;

var n, i,j, st, kl, k:integer;

a:array [1..10,1..10] of integer;

begin;

clrscr;

write(‘укажите размерность матрицы (до 10)’); readln(n);

st:=n; kl:=n; k:=1; {текущие строка и колонка, элементы натурального ряда}

a[st,kl]:=k; {начальному элементу a(n, n) присваивается 1}

{цикл - конец вычислений по достижении последнего элемента массива}

while k<n*n do begin

{правая сторона – 1 клетка вверх}

if (kl=n) and (st>1) then begin st:=st-1; k:=k+1; a[st, kl]:=k;

while (st<n) and (kl>0) do begin st:=st+1; kl:=kl-1; k:=k+1; a[st, kl]:=k end; {далее вниз-влево}

end

{нижняя сторона – 1 клетка влево}

else if (kl>1) and (st=n) then begin kl:=kl-1; k:=k+1; a[st, kl]:=k;

while (st>1) and (kl<n) do begin st:=st-1; kl:=kl+1; k:=k+1; a[st, kl]:=k end; {далее вверх-вправо}

end

{верхняя сторона – 1 клетка влево}

else if (kl>1) and (st=1) then begin kl:=kl-1; k:=k+1; a[st, kl]:=k;

while (st<n) and (kl>1) do begin st:=st+1; kl:=kl-1; k:=k+1; a[st, kl]:=k end; {далее вниз-влево}

end

{левая сторона – 1 клетка вверх}

else if(kl=1) and (st>1) then begin st:=st-1; k:=k+1; a[st, kl]:=k;

while (st>1) and (kl>0) do begin st:=st-1; kl:=kl+1; k:=k+1; a[st, kl]:=k end; {далее вверх-вправо}

end;

end;

writeln('вывод результата');

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

end.