В матрице А(N,N) уплотнить все четные элементы в направлении указанном на рисунке - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, есть задача: В матрице А(N,N) уплотнить все четные элементы в направлении указанном на рисунке. Остальные элементы сделать равными нулю. Код:
Листинг программы
  1. uses crt;
  2. type matr=array[1..20,1..20]of integer;
  3. {чтоб 2 раза не писать вывод матрицы, оформим процедурой}
  4. procedure OutMatr(var a:matr;n:integer);
  5. var x,y:integer;
  6. begin
  7. for x:=1 to n do
  8. begin
  9. for y:=1 to n do
  10. write(a[x,y]:2,' ');
  11. writeln;
  12. end;
  13. end;
  14. var
  15. a:matr;
  16. b:array[1..400] of integer;
  17. n,m,k,x,y,z:integer;
  18. begin
  19. clrscr;
  20. randomize;
  21. write('Размер матрицы n=');
  22. readln(n);
  23. writeln('Исходная матрица:');
  24. for x:=1 to n do
  25. for y:=1 to n do
  26. a[x,y]:=random(20);
  27. OutMatr(a,n);
  28. m:=0;
  29. for x:=1 to n do
  30. for y:=1 to n do
  31. if (a[x,y] mod 2=0)and(a[x,y]<>0) then{создаем массив из четных элементов матрицы}
  32. begin
  33. m:=m+1;
  34. b[m]:=a[x,y];
  35. end;
  36. writeln('Массив четных чисел:');
  37. for x:=1 to m do
  38. write(b[x],' ');
  39. writeln;
  40. if m<n*n then
  41. for x:=m to n*n do{дополняем его нолями}
  42. begin
  43. m:=m+1;
  44. b[m]:=0;
  45. end;
  46. {начальные значиения}
  47. x:=1;{встаем в ячейку [1,n]}
  48. y:=n;
  49. k:=1;{коэфициент переключения}
  50. {перебираем все номера}
  51. for z:=1 to m do
  52. begin
  53. a[x,y]:=b[z];
  54. {следующие координаты}
  55. x:=x+k;{движемся вправо-вниз}
  56. y:=y+k;
  57. {корректируем координаты}
  58. if (y>n)and(x<=n) then{если вышли за правую "стенку" и не в углу}
  59. begin
  60. y:=n;{возвращаемся влево}
  61. k:=-k;{идем вверх-влево}
  62. end;
  63. if (x=0)and(y<>0) then{вышли выше верхней "стенки" и не в углу}
  64. begin
  65. x:=1;{возвращаемся вниз}
  66. k:=-k;{вниз-вправо}
  67. end;
  68. if x>n then{если вышли за нижнюю "стенку"}
  69. begin
  70. x:=n;{возврашаемся вверх}
  71. y:=y-2;{уходим на 2 влево}
  72. k:=-k;{вверх-влево}
  73. end;
  74. if y=0 then{вышли за левую "стенку"}
  75. begin
  76. y:=1;{возвращаемся вправо}
  77. x:=x+2;{уходим на 2 вниз}
  78. k:=-k;{вниз-вправо}
  79. end;
  80. end;
  81. {выводим результат}
  82. writeln('Результат:');
  83. OutMatr(a,n);
  84. readln;
  85. end.
Мне нужно поменять так, чтобы программа заполняла эти элементы в обратном направлении как на этом рисунке: Заранее спасибо!

Решение задачи: «В матрице А(N,N) уплотнить все четные элементы в направлении указанном на рисунке»

textual
Листинг программы
  1. const m = 10;
  2.  
  3. type matr = array [0..m-1, 0..m-1] of integer;
  4.  
  5. procedure prnt(s: string; var x: matr; p: integer);
  6. var i, j: integer;
  7. begin
  8.   writeln(s);
  9.   for i := 0 to p - 1 do
  10.     begin
  11.       for j := 0 to p - 1 do write(x[i, j]:4);
  12.       writeln
  13.     end
  14. end;
  15.  
  16. function comp_i(x, p: integer): integer;
  17. var q: integer;
  18. begin
  19.   q := p - x div p;
  20.   x := x mod p;
  21.   if not odd(q) then x := p - x - 1;
  22.   comp_i := x
  23. end;
  24.  
  25. var i, j, n: integer;
  26.     a: matr;
  27. begin
  28.   randomize;
  29.   repeat
  30.     write('n in [1..', m, '];  n = ');
  31.     readln(n)
  32.   until n in [1..m];
  33.   writeln();
  34.   for i := 0 to n - 1 do
  35.     for j := 0 to n - 1 do
  36.       a[i, j] := random(99) + 1;
  37.   prnt('Source matrix:', a, n);
  38.   j := 0;
  39.   for i := 0 to n * n - 1 do
  40.     if not odd(a[comp_i(i, n), i div n])
  41.       then begin
  42.         a[comp_i(j, n), j div n] := a[comp_i(i, n), i div n];
  43.         inc(j)
  44.       end;
  45.   for i := j to n * n - 1 do a[comp_i(i, n), i div n] := 0;
  46.   prnt('Result:', a, n);
  47.   readln
  48. end.

Объяснение кода листинга программы

  1. Создается переменная m со значением 10.
  2. Создается тип данных matr, который представляет собой массив целых чисел размером от 0 до m-1 на 10.
  3. Создается процедура prnt, которая принимает на вход строку s, переменную x типа matr и число p. Процедура выводит элементы матрицы x в соответствии с указанным направлением.
  4. Создается функция comp_i, которая принимает на вход два числа x и p. Функция вычисляет кумулятивное произведение чисел от p до x, делит x на p, затем проверяет, является ли результат четным. Если результат нечетный, то обновляется значение x. В конце функция возвращает обновленное значение x.
  5. Создается переменная i, j и n.
  6. Запускается цикл, в котором пользователю предлагается ввести значение n от 1 до m. Значение n сохраняется в переменной n.
  7. Вычисляется матрица a размером n на n. Каждый элемент матрицы a генерируется случайным образом и записывается в соответствующую ячейку матрицы.
  8. Выводится исходная матрица a с помощью процедуры prnt.
  9. Инициализируется переменная j.
  10. Запускается цикл, в котором перебираются все элементы матрицы a. Если элемент в позиции (i/n, i%n) не является четным, то обновляется значение элемента в позиции (j/n, j%n) и увеличивается значение переменной j на 1.
  11. Для всех элементов матрицы a в позициях (j/n, j%n) записывается значение 0.
  12. Выводится результат в виде матрицы a с помощью процедуры prnt.
  13. Запрашивается ввод с клавиатуры.
  14. Выполняются все операции по обработке введенных данных.
  15. Выполняется вывод результата с помощью процедуры prnt.
  16. Выполняется чтение ввода с клавиатуры.
  17. Выполняются все операции по обработке введенных данных.
  18. Выполняется вывод результата с помощью процедуры prnt.
  19. Выполняется вывод сообщения об окончании работы программы.
  20. Завершается работа программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы