В матрице А(N,N) уплотнить все четные элементы в направлении указанном на рисунке - Turbo Pascal
Формулировка задачи:
Здравствуйте, есть задача: В матрице А(N,N) уплотнить все четные элементы в направлении указанном на рисунке.
Остальные элементы сделать равными нулю.
Код:
Мне нужно поменять так, чтобы программа заполняла эти элементы в обратном направлении как на этом рисунке:
Заранее спасибо!
Листинг программы
- uses crt;
- type matr=array[1..20,1..20]of integer;
- {чтоб 2 раза не писать вывод матрицы, оформим процедурой}
- procedure OutMatr(var a:matr;n:integer);
- var x,y:integer;
- begin
- for x:=1 to n do
- begin
- for y:=1 to n do
- write(a[x,y]:2,' ');
- writeln;
- end;
- end;
- var
- a:matr;
- b:array[1..400] of integer;
- n,m,k,x,y,z:integer;
- begin
- clrscr;
- randomize;
- write('Размер матрицы n=');
- readln(n);
- writeln('Исходная матрица:');
- for x:=1 to n do
- for y:=1 to n do
- a[x,y]:=random(20);
- OutMatr(a,n);
- m:=0;
- for x:=1 to n do
- for y:=1 to n do
- if (a[x,y] mod 2=0)and(a[x,y]<>0) then{создаем массив из четных элементов матрицы}
- begin
- m:=m+1;
- b[m]:=a[x,y];
- end;
- writeln('Массив четных чисел:');
- for x:=1 to m do
- write(b[x],' ');
- writeln;
- if m<n*n then
- for x:=m to n*n do{дополняем его нолями}
- begin
- m:=m+1;
- b[m]:=0;
- end;
- {начальные значиения}
- x:=1;{встаем в ячейку [1,n]}
- y:=n;
- k:=1;{коэфициент переключения}
- {перебираем все номера}
- for z:=1 to m do
- begin
- a[x,y]:=b[z];
- {следующие координаты}
- x:=x+k;{движемся вправо-вниз}
- y:=y+k;
- {корректируем координаты}
- if (y>n)and(x<=n) then{если вышли за правую "стенку" и не в углу}
- begin
- y:=n;{возвращаемся влево}
- k:=-k;{идем вверх-влево}
- end;
- if (x=0)and(y<>0) then{вышли выше верхней "стенки" и не в углу}
- begin
- x:=1;{возвращаемся вниз}
- k:=-k;{вниз-вправо}
- end;
- if x>n then{если вышли за нижнюю "стенку"}
- begin
- x:=n;{возврашаемся вверх}
- y:=y-2;{уходим на 2 влево}
- k:=-k;{вверх-влево}
- end;
- if y=0 then{вышли за левую "стенку"}
- begin
- y:=1;{возвращаемся вправо}
- x:=x+2;{уходим на 2 вниз}
- k:=-k;{вниз-вправо}
- end;
- end;
- {выводим результат}
- writeln('Результат:');
- OutMatr(a,n);
- readln;
- end.
Решение задачи: «В матрице А(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.
- Выполняется вывод сообщения об окончании работы программы.
- Завершается работа программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д