Сдвиг элементов массива - Pascal

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

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

Создать программу, сдвигающую элементы k-го слоя целочисленного прямоугольного массива matrix[n,m] на p шагов вправо. Номер k-го слоя и количество шагов p задать с консоли. Дополнительные вектора и строки не использовать, работать в одном массиве. Пример: Номер слоя k=2 Количество шагов p=1 Исходный массив: 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 Полученный массив: 1 2 3 4 5 1 4 2 3 5 1 4 2 3 5 1 2 3 4 5 ////////////////
Листинг программы
  1. program poll;
  2. const
  3. n=4;
  4. m=5;
  5. v_min=-20;
  6. v_max=10;
  7. var posl,q,s,i,j,p,k:integer;
  8. mas:array[1..n,1..m] of integer;
  9. begin
  10. randomize;
  11. for i:=1 to n do
  12. for j:=1 to m do
  13. mas[i,j]:=random(v_max-v_min+1)+v_min;
  14.  
  15. writeln('Исходный массив:');
  16. for i:=1 to n do
  17. begin
  18. for j:=1 to m do
  19. write(mas[i,j]:5);
  20. writeln;
  21. end;
  22. writeln;
  23. {//////////////////////////////////////}
  24. writeln('Введите номер слоя:');
  25. readln(k);
  26. writeln('Введите количесвто шагов:');
  27. readln(p);
  28. //обращаемся к нужному слою
  29. for i:=k to n-(k-1) do
  30. begin
  31. posl:=mas[i,m-(k-1)];
  32. for j:=m-(k-1) downto k+1 do
  33. begin//что делать я хз
  34. q:=mas[i,j];
  35. mas[i,j]:=mas[i,j-1];
  36. mas[i,j-1]:=q;
  37. end;
  38. end;
  39. writeln('Полученный массив:');
  40. for i:=1 to n do
  41. begin
  42. for j:=1 to m do
  43. write(mas[i,j]:5);
  44. writeln;
  45. end;
  46. writeln;
  47. end.
Я долго думал, но для меня это слишком сложно, если записывать в вектор, то еще по легче, хотя как работать с первым слоем... На примере два слоя, но может быть три. Помогите пожалуйста.

Решение задачи: «Сдвиг элементов массива»

textual
Листинг программы
  1. uses crt;
  2. type matrix=array[1..10,1..10] of integer;
  3. procedure povor1(var a:matrix;n,k,p:integer);
  4. var i,j,m,b:integer;
  5. begin
  6. p:=p mod (3*n);
  7. i:=k;
  8. for m:=1 to p do
  9.  begin
  10.   b:= a[i,i];
  11.   for j:=i to n-i do a[j,i]:= a[j+1,i];
  12.   for j:=i to n-i do a[n-i+1,j]:= a[n-i+1,j+1];
  13.   for j:=n-i downto i do a[j+1,n-i+1]:= a[j,n-i+1];
  14.   for j:=n-i downto i+1 do a[i,j+1]:= a[i,j];
  15.   a[i,i+1]:= b;
  16.  end;
  17. end;
  18. procedure povor2(var a:matrix;n,k,p:integer);
  19. var i,j,m,b:integer;
  20. begin
  21. p:=abs(p) mod (3*n);
  22. i:=k;
  23. for m:=1 to p do
  24.  begin
  25.   b:= a[i,i];
  26.   for j:=i to n-i do a[i,j]:= a[i,j+1];
  27.   for j:=i to n-i do a[j,n-i+1]:= a[j+1,n-i+1];
  28.   for j:=n-i+1 downto i+1 do a[n-i+1,j]:= a[n-i+1,j-1];
  29.   for j:=n-i+1 downto i+2 do a[j,i]:= a[j-1,i];
  30.   a[i+1,i]:= b;
  31.  end;
  32. end;
  33. var a:matrix;
  34.     n,i,j,k,p:integer;
  35. begin
  36. repeat
  37. write('Размер матрицы от 2 до 10 n=');
  38. readln(n);
  39. until n in [2..10];
  40. repeat
  41. write('Введите номер слоя от 1 до ',n div 2,' k=');
  42. readln(k);
  43. until k in [1..n div 2];
  44. write('Введите количество шагов + или - p=');
  45. readln(p);
  46. for i:=1 to n do
  47.  begin
  48.   for j:=1 to n do
  49.    begin
  50.     a[i,j]:=(i-1)*n+j;
  51.     write(a[i,j]:3);
  52.    end;
  53.   writeln;
  54.  end;
  55. writeln;
  56. if p>0 then povor1(a,n,k,p)
  57. else povor2(a,n,k,p);
  58. for i:=1 to n do
  59.  begin
  60.   for j:=1 to n do
  61.   write(a[i,j]:3);
  62.   writeln;
  63.  end;
  64. end.

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

  1. В начале кода объявляются необходимые переменные и создается массив a.
  2. Затем пользователю предлагается ввести размер матрицы n и номер слоя k от 1 до n/2.
  3. Вводится количество шагов p.
  4. Создается цикл for, который повторяется столько раз, сколько введено значений n и k.
  5. Внутри цикла вычисляется адрес ячейки массива a[i,j] для каждого элемента массива.
  6. Выводится значение каждой ячейки массива.
  7. Если p больше нуля, то вызывается функция povor1, иначе вызывается функция povor2.
  8. После завершения всех вычислений выводится окончательный результат.

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


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

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

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

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

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

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