Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Поворот матрицы


Автор: kyubii 24.12.2006, 21:59
Задана целочисленная квадратная матрица A(n,n) n<=7.

Повернуть её на 90* по часовой стрелке.

Напечатать исходную матрицу,а нижу - сформированную.

Дополнительных массивов не использовать.

СУВ.

Автор: anwe 25.12.2006, 23:25
Относительно какой точки (элемента)?

Автор: anwe 26.12.2006, 02:16
Да, погарячился. Вращать можно относительно любого элемента.
Для инициализации элементов не использовал randomize, так как цикл быстрый и это даст одинаковые элементы для строк. Зато в этом варианте последовательности элементов от запуска к запуску будут одинаковые, но это не есть данная задача, если надо доделаешь.
Кинь на форму edit, memo, button.
Код

procedure TForm1.Button1Click(Sender: TObject);
var n,i,j,k,l:Byte;
a:array of array of Integer;  //это твой неинициализированный массив
s:String;
begin
s:='';
n:=StrToInt(Edit1.Text);
SetLength(a,n);
for i:=0 to n-1 do
SetLength(a[i],n);
for i:=0 to n-1 do
begin
    for j:=0 to n-1 do
    begin
    a[i,j]:=Random(j+100);   //произвольно
    s:=s+IntToStr(a[i,j])+#09;
    end;
Memo1.Lines.Add(s);
s:='';
end;
Memo1.Lines.Add('-----------------');
for i:=0 to n-1 do
SetLength(a[i],2*n);  //увеличение исходного массива
l:=n;
k:=0;
for j:=0 to n-1 do
begin
    for i:=n-1 downto 0 do  //столбцы "переворачиваются" в строки
    begin                 
    a[k,l]:=a[i,j];
    s:=s+IntToStr(a[k,l])+#09;
    inc(l);
    end;
inc(k);
l:=n;
Memo1.Lines.Add(s);
s:='';
end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)