Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2017, 21:10   #1
Tier99
Новичок
Джуниор
 
Регистрация: 11.05.2017
Сообщений: 1
Печаль Вращение двумерного массива NxM на 45 градусов по и против часовой стрелке

В общем, массив представлен матрицей NxM. Так то она поворачивается посредством смены, строки меняются со столбцами. Но проблема в том, что когда выбираются не равные размеры этой матрицы (к примеру 8 на 4) все катиться в тартарары. К тому же сделать поворот на каждое нажатие. Не знаю, как это исправить.
Эту матрицу затем надо сохранить в текстовый файл и реализовать его последующую загрузку обратно - но это уже как что то дополнительное.
Буду признателен за помощь, ибо горит

Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    XPManifest1: TXPManifest;
    UpDown1: TUpDown;
    UpDown2: TUpDown;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Button4: TButton;
    Bevel1: TBevel;
    Button2: TButton;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    Button3: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
   // procedure Button3Click(Sender: TObject);
  
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  m, n: integer;
  i, j: byte;
  b, a: array [1..100, 1..100] of integer;

implementation

uses Unit2, Unit3;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);  //Создание матрицы

begin
  Form2.Left := 825;
  Form2.Top := 255;
  form2.Show;
  
  for i := 0 to 100 do
    form2.StringGrid1.Rows[i].Clear;
  n := StrToInt(Form1.Edit1.Text);
  m := StrToInt(Form1.Edit2.Text);
  
  for i := 1 to n do
  begin
    for j := 1 to m do
    begin
      a[i, j] := random(9) + 1;
      form2.StringGrid1.Cells[i, j] := IntToStr(a[i, j]);
      
      BitBtn1.Visible := true;
      BitBtn2.Visible := true;
      //button3.Visible:=true;
      button4.Visible := true;
      
    end;
  end;
end;



procedure TForm1.Button4Click(Sender: TObject); //Сохранение

var
  F: TextFile;
  i, j: integer;
  s: string;

begin
  SaveDialog1.Filter := 'Текстовые файлы (*.txt)|*.txt';
  if SaveDialog1.Execute then
  begin
    AssignFile(f, SaveDialog1.FileName);
    
    Rewrite(f);
    for i := 1 to Form2.StringGrid1.RowCount do
    
    begin
      s :='';
      for j := 1 to Form2.StringGrid1.ColCount do
        s := s + Form2.StringGrid1.Cells[j, i] + ' ';
      writeln(f, s);
      writeln(f, '');
    end;
    CloseFile(f);
    
  end;
end;



procedure TForm1.BitBtn1Click(Sender: TObject); //Поворот матрицы против часовой стрелки
begin
  for i := 1 to n do
    for j := 1 to m do
      b[i, n - j + 1] := a[j, i];
  for i := 1 to n do

  begin

    for j := 1 to m do

      form2.StringGrid1.Cells[i, j] := IntToStr(b[i, j]);

  end;
end;



procedure TForm1.BitBtn2Click(Sender: TObject); //Поворот матрицы по часовой стрелке
begin
  for i := 1 to n do
    for j := 1 to m do
      b[i, j] := a[j, n - i + 1];
  for i := 1 to n do
  begin
    for j := 1 to m do
      form2.StringGrid1.Cells[i, j] := IntToStr(b[i, j]);

  end;
end;
Вложения
Тип файла: rar НОВОЕ.rar (572.7 Кб, 7 просмотров)
Tier99 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана матрица nxm. Отсортировать по возрастанию элементы стоящие по периметру матрицы, начиная с элемента A(n,1) по часовой стрелке Pr* Паскаль, Turbo Pascal, PascalABC.NET 0 17.06.2015 11:55
Сформировать матрицу 7х7 элементов. Вывести ее на экран, развернув на 90 градусов по часовой стрелке (Delphi) Kolya23 Помощь студентам 6 30.05.2015 14:15
Поворот матрицы по/против часовой стрелке Murashov Общие вопросы C/C++ 2 05.12.2012 19:57
повернуть квадратную матрицу на 90 градусов по часовой стрелке brans Общие вопросы по Java, Java SE, Kotlin 1 18.02.2011 19:42
Поворот на 90 градусов против часовой стрелки Lindemann Общие вопросы .NET 1 04.01.2010 19:30