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