// PascalABC.NET 3.3, сборка 1549 от 17.10.2017 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger('Количество строк/столбцов в матрице:'); Writeln('*** Исходная матрица ***'); var a:array[,] of integer; repeat // обеспечить уникальность элементов a:=MatrRandom(n,n,-999,999) until a.Rows.SelectMany(x->x).Distinct.Count=n*n; a.Println(5); Writeln(5*a.ColCount*'-'); var jmin:=a.ElementsWithIndexes.MinBy(t->t[0])[2]; Writeln(a.Col(jmin).Sum) end.
За у пользователя количество шагов сдвига и направление. Условиться, что если вводится отрицательное целое, то сдвиг выполняется влево на указанное абсолютное значение, если вводится положительное число, то сдвиг вправо.
Заполнить исходный массив и вывести его на экран.
Выполнять внешний цикл столько раз, сколько шагов было указано.
Если было введено отрицательное число, то выполнить цикл от первого элемента до предпоследнего, перезаписав в нем значение каждой очередной ячейки на значение последующей. Записать в последнюю ячейку 0.
Иначе, выполнить цикл от последнего элемента до второго, записывая в каждую текущую ячейку значение предыдущей. В первую ячейку записать 0.
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger('Количество строк/столбцов в матрице:');
Writeln('*** Исходная матрица ***');
var a:array[,] of integer;
repeat // обеспечить уникальность элементов
a:=MatrRandom(n,n,-999,999)
until a.Rows.SelectMany(x->x).Distinct.Count=n*n;
a.Println(5); Writeln(5*a.ColCount*'-');
var jmin:=a.ElementsWithIndexes.MinBy(t->t[0])[2];
Writeln(a.Col(jmin).Sum)
end.
Пример
Количество строк/столбцов в матрице: 7
*** Исходная матрица ***
666 963 808 847 -383 -453 695
-233 -460 -311 606 -487 -243 -29
479 438 -985 184 499 92 556
-54 819 38 -962 790 -411 -155
-320 525 340 390 76 -617 -747
-439 585 332 -654 495 602 372
551 229 906 837 480 -211 -438
1128
Объяснение:
Алгоритм решения данной задачи можно описать так:
За у пользователя количество шагов сдвига и направление. Условиться, что если вводится отрицательное целое, то сдвиг выполняется влево на указанное абсолютное значение, если вводится положительное число, то сдвиг вправо.
Заполнить исходный массив и вывести его на экран.
Выполнять внешний цикл столько раз, сколько шагов было указано.
Если было введено отрицательное число, то выполнить цикл от первого элемента до предпоследнего, перезаписав в нем значение каждой очередной ячейки на значение последующей. Записать в последнюю ячейку 0.
Иначе, выполнить цикл от последнего элемента до второго, записывая в каждую текущую ячейку значение предыдущей. В первую ячейку записать 0.
Вывести на экран текущий массив.
Сдвиг Влево
-4
111 222 333 444 555 666 777 888 999
222 333 444 555 666 777 888 999 0
333 444 555 666 777 888 999 0 0
444 555 666 777 888 999 0 0 0
555 666 777 888 999 0 0 0 0
Сдвиг в Право
5
111 222 333 444 555 666 777 888 999
0 111 222 333 444 555 666 777 888
0 0 111 222 333 444 555 666 777
0 0 0 111 222 333 444 555 666
0 0 0 0 111 222 333 444 555
0 0 0 0 0 111 222 333 444