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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2013, 18:12   #1
Jane_Air
Пользователь
 
Регистрация: 03.11.2013
Сообщений: 40
По умолчанию Делфи.Квадратная матрица.Помогите,пожалуйста

Нужно написать процедуру на делфи ,которая поворачивает квадратную матрицу на 90 градусов по часовой стрелке,не используя дополнительного массива.Киньте хотя бы идею,но можно и код.Спасибо.Буду очень благодарна.
Jane_Air вне форума Ответить с цитированием
Старый 03.11.2013, 20:20   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
for i := 1 to n div 2 do
  for j := 1 to n div 2 + n mod 2 do
  begin
    k := a[i, j];
    a[i, j] := a[n - j + 1, i];
    a[n - j + 1, i] := a[n - i + 1, n - j + 1];
    a[n - i + 1, n - j + 1] := a[j, n - i + 1];
    a[j, n - i + 1] := k;
  end;
Вроде работает
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.11.2013, 20:23   #3
Jane_Air
Пользователь
 
Регистрация: 03.11.2013
Сообщений: 40
По умолчанию

Спасибо огромное!!
Jane_Air вне форума Ответить с цитированием
Старый 05.11.2013, 00:23   #4
Jane_Air
Пользователь
 
Регистрация: 03.11.2013
Сообщений: 40
По умолчанию

Только вот эта прога выводит ту самую матрицу и ничего не меняет
Может увидите ошибку...

Матрица должна быть квадратной..
Код:
program Project5;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const Nmax=10;
type Matrix=array[1..Nmax,1..Nmax] of integer;

function obrob(x:integer):integer;
  begin
      writeln('vuberit sposib zapovnen masuvy: vupadkovi chusla - vvedit 1');
      writeln('                                z klaviatyru - 2');
      writeln('                                z faily - 3');
      writeln('                                zakin4utu roboty - 9');
      readln(x);
      obrob:=x;
  end;



procedure gMatr1( var m:matrix; var rd,st:integer);     {заповнення випадковими числами}
var i,j:integer;
begin
      randomize;
      rd:=2+random(8);st:=rd;
      for j:=1 to rd do
        for i:=1 to st do m[i,j]:=1+random(19);

end;





procedure gMatr2( var m:matrix;             {заповнення з клавіатури}
                  var st,rd:integer);
                  var i,j:integer;
begin
      writeln('vvedit kilkist ryadkiv');
      readln(rd);
      st:=rd;
      for i:=1 to rd do
          for j:=1 to st do m[i,j]:=0;
      for i:=1 to rd do
          for j:=1 to st do
          begin
            writeln('vvedit element z indexom ',i,',',j,' ' );
            readln(m[i,j]);
          end;
end;







procedure outMatr(const m:matrix;st,rd:integer);    {виведення на екран}
var i,j:integer;
begin
  for i:=1 to rd do begin
    for j:=1 to st do begin
                      write(m[i,j]:5);
                      end;
    writeln;
                    end;
end;

procedure grad90(m:matrix; st:longint);
var i,j,k:integer;
begin
for i := 1 to st div 2 do
    for j := 1 to st div 2 + st mod 2 do
      begin
        k := m[i, j];
        m[i, j] := m[st - j + 1, i];
        m[st - j + 1, i] := m[st - i + 1, st - j + 1];
        m[st - i + 1, st - j + 1] := m[j, st - i + 1];
        m[j, st - i + 1] := k;
      end;
end;


var st,rd,k,x,i,j,n:integer;
          m:matrix;
          f:text;
begin
k:=obrob(x);
if k=1 then gMatr1(m,st,rd);
if k=2 then gMatr2(m,st,rd);
if k=3 then begin
               assign(f,'inform.txt');
               reset(f);
            end;
if k=9 then exit;
writeln('matrix: ',st,'*',rd);
writeln;
outMatr(m,st,rd);
readln;
grad90(m,n);
outmatr(m,st,rd);
readln;
end.
Jane_Air вне форума Ответить с цитированием
Старый 05.11.2013, 00:29   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

А волшебное слово var не забыли? Вот здесь
Код:
procedure grad90(m:matrix; st:longint);
Естественно, ничего не изменится, потому что m передается по значению.
type_Oleg на форуме Ответить с цитированием
Старый 05.11.2013, 00:42   #6
Jane_Air
Пользователь
 
Регистрация: 03.11.2013
Сообщений: 40
По умолчанию

Спасибо!!!
Мне бы такие мозги как у вас!))
Jane_Air вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Квадратная матрица Liantha Помощь студентам 1 06.06.2012 15:03
Квадратная матрица SVing Паскаль, Turbo Pascal, PascalABC.NET 7 13.12.2011 00:58
квадратная матрица Di-em Общие вопросы C/C++ 6 09.12.2010 19:11
Квадратная матрица anna_ Помощь студентам 8 15.12.2009 21:16
Помогите пожалуйста(матрица) Neznau Паскаль, Turbo Pascal, PascalABC.NET 1 04.09.2008 15:27