В матрице А(N,N) уплотнить все четные элементы в направлении указанном на рисунке - Turbo Pascal
Формулировка задачи:
Здравствуйте, есть задача: В матрице А(N,N) уплотнить все четные элементы в направлении указанном на рисунке.
Остальные элементы сделать равными нулю.
Код:
Мне нужно поменять так, чтобы программа заполняла эти элементы в обратном направлении как на этом рисунке:
Заранее спасибо!
Решение задачи: «В матрице А(N,N) уплотнить все четные элементы в направлении указанном на рисунке»
textual
Листинг программы
const m = 10;
type matr = array [0..m-1, 0..m-1] of integer;
procedure prnt(s: string; var x: matr; p: integer);
var i, j: integer;
begin
writeln(s);
for i := 0 to p - 1 do
begin
for j := 0 to p - 1 do write(x[i, j]:4);
writeln
end
end;
function comp_i(x, p: integer): integer;
var q: integer;
begin
q := p - x div p;
x := x mod p;
if not odd(q) then x := p - x - 1;
comp_i := x
end;
var i, j, n: integer;
a: matr;
begin
randomize;
repeat
write('n in [1..', m, ']; n = ');
readln(n)
until n in [1..m];
writeln();
for i := 0 to n - 1 do
for j := 0 to n - 1 do
a[i, j] := random(99) + 1;
prnt('Source matrix:', a, n);
j := 0;
for i := 0 to n * n - 1 do
if not odd(a[comp_i(i, n), i div n])
then begin
a[comp_i(j, n), j div n] := a[comp_i(i, n), i div n];
inc(j)
end;
for i := j to n * n - 1 do a[comp_i(i, n), i div n] := 0;
prnt('Result:', a, n);
readln
end.
Объяснение кода листинга программы
- Создается переменная m со значением 10.
- Создается тип данных matr, который представляет собой массив целых чисел размером от 0 до m-1 на 10.
- Создается процедура prnt, которая принимает на вход строку s, переменную x типа matr и число p. Процедура выводит элементы матрицы x в соответствии с указанным направлением.
- Создается функция comp_i, которая принимает на вход два числа x и p. Функция вычисляет кумулятивное произведение чисел от p до x, делит x на p, затем проверяет, является ли результат четным. Если результат нечетный, то обновляется значение x. В конце функция возвращает обновленное значение x.
- Создается переменная i, j и n.
- Запускается цикл, в котором пользователю предлагается ввести значение n от 1 до m. Значение n сохраняется в переменной n.
- Вычисляется матрица a размером n на n. Каждый элемент матрицы a генерируется случайным образом и записывается в соответствующую ячейку матрицы.
- Выводится исходная матрица a с помощью процедуры prnt.
- Инициализируется переменная j.
- Запускается цикл, в котором перебираются все элементы матрицы a. Если элемент в позиции (i/n, i%n) не является четным, то обновляется значение элемента в позиции (j/n, j%n) и увеличивается значение переменной j на 1.
- Для всех элементов матрицы a в позициях (j/n, j%n) записывается значение 0.
- Выводится результат в виде матрицы a с помощью процедуры prnt.
- Запрашивается ввод с клавиатуры.
- Выполняются все операции по обработке введенных данных.
- Выполняется вывод результата с помощью процедуры prnt.
- Выполняется чтение ввода с клавиатуры.
- Выполняются все операции по обработке введенных данных.
- Выполняется вывод результата с помощью процедуры prnt.
- Выполняется вывод сообщения об окончании работы программы.
- Завершается работа программы.