Вращать элементы массива по часовой стреле - Pascal

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

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

Задача: создать приложение в рамках которого реализуется перемещения элементов квадратной матрицы расположенных в последнем столбце,первой строке и на главной диагонали, по круговой схеме на k позиций.Процедуры ввода элементов матрицы, перемещения элементов должны располагаться в модуле пользователя, который подключается к проекту . Размерность матрицы k вводится функцией InputBox. Вот что у меня есть
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
   { procedure Memo2Change(Sender: TObject);}
  private
    { private declarations }
  public
    { public declarations }
  end;
       mas=array[1..100,1..100]of integer;
var
  Form1: TForm1;
 
implementation
 var a:mas;
     n,k:integer;
     procedure vvod (var a:mas;var n:integer);
     var i:integer;
 
{$R *.lfm}
 
     { TForm1 }
 
     procedure TForm1.Button1Click(Sender: TObject);
     var i,j:integer;
         s,s1:string;
 
     begin
       n:=strtoint(inputbox('Введите размер массива','Введите число',' '));
       vvod(a,n);
       memo1.lines.add('Исходный массив');
       for i:=1 to n do
        begin
        s1:=' ';
        for j:=1 to n do
         begin
         str(a[i,j]:4,s);
         s1:=s1+s;
         end;
        memo1.lines.add(s1);
        end;
 
     end;

procedure TForm1.Button2Click(Sender: TObject);
     var
          i,j:integer;
         s,s1:string;
begin
 {k:=strtoint(inputbox('Колличество эл','Введите число',' '));}
  vrash(a,n);
 
       memo2.lines.add('Исходный массив');
       for i:=1 to n do
        begin
        s1:=' ';
        for j:=1 to n do
         begin
         str(a[i,j]:4,s);
         s1:=s1+s;
         end;
        memo2.lines.add(s1);
 
end;
 
{procedure TForm1.Memo2Change(Sender: TObject);
begin
 
end;}
 
end;

end.
насколько я понял необходимо провращать некий треугольник с гипотенузой на главной диагонали и вращать элементы массива по часовой стреле сдвигай эл на к позиций

Решение задачи: «Вращать элементы массива по часовой стреле»

textual
Листинг программы
procedure Sdvig(var a:matr;n,k:integer);
var i,j,x:integer;
begin
for i:=1 to k do
 begin
  x:=a[1,1];
  for j:=1 to n-1 do a[1,j]:=a[1,j+1];
  for j:=1 to n-1 do a[j,n]:=a[j+1,n];
  for j:=n downto 2 do a[j,j]:=a[j-1,j-1];
  a[2,2]:=x;
 end;
end;

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

  1. В процедуре Sdvig объявлены три переменные: a (матрица), n (размер матрицы по первому измерению) и k (размер матрицы по второму измерению).
  2. В цикле for i:=1 до k выполняется цикл, который обращается к первому элементу матрицы a[1,1] и заменяет его на значение x.
  3. Затем происходит внутренний цикл for j:=1 до n-1, который перебирает все элементы матрицы a[1,j] и заменяет их на a[1,j+1].
  4. После этого происходит внешний цикл for j:=n downto 2, который перебирает все элементы матрицы a[j,j] и заменяет их на a[j-1,j-1].
  5. Наконец, в a[2,2] присваивается значение x.
  6. Код завершается без использования вложенных списков.

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


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

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

6   голосов , оценка 3.5 из 5
Похожие ответы