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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2011, 15:54   #1
Mariaa
 
Регистрация: 30.03.2011
Сообщений: 4
Печаль Квадратная матрица.

Квадратная матрица порядка n по заданному образцу
Код:
1 2 3 ... n-2 n-1 n
2 3 4 ... n-1  n   0
3 4 5 ...   n   0   0
. 
.
n-1 n 0... 0   2   0
n    0 0... 0   0   1
т.е. для n=5 будет, для n=6. Диагональ с правого нижнего угла, поднимается вверх начиная с 1 до пересечения с другой диагональю.
Код:
12345   123456
23450   234560
34500   345600
45020   456300
50001   560020
           600001
Никак не могу понять, как с главной диагональю этого добиться. Заранее спасибо.

Вот пока что есть.

Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, Grids;
type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    SpinEdit1: TSpinEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var a:array of array of byte;
    n,i,j:byte;
begin
n:=Spinedit1.Value;
StringGrid1.ColCount:=n;
StringGrid1.RowCount:=n;
Setlength(a,n,n);
for i:=0 to n-1 do
for j:=0 to n-1 do
 begin
  if j<=n-i-1 then a[i,j]:=i+j+1
  else a[i,j]:=0;
  StringGrid1.Cells[j,i]:=Inttostr(a[i,j]);
  end;
end;
end.

Последний раз редактировалось Serge_Bliznykov; 16.04.2011 в 12:37.
Mariaa вне форума Ответить с цитированием
Старый 15.04.2011, 16:30   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
т.е. для n=5 будет, для n=6.
а так, чтобы было понятно?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 15.04.2011, 16:37   #3
Mariaa
 
Регистрация: 30.03.2011
Сообщений: 4
По умолчанию Пояснение

Например для n=5
12345
23450
34500
45020
50001


для n=6

123456
234560
345600
456300
560020
600001

т.е. побочная диагональ равна n, а главная, например при n=6 будет равна 1,3,5,3,2,1
Mariaa вне форума Ответить с цитированием
Старый 15.04.2011, 18:00   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
for i:=0 to n-1 do
begin
k:=i;j:=-1;
while K<n do begin
inc(k);
inc(j);
a[i,j]:=k;
end;
end;
if odd(n) then i:=i div 2+1
else
i:=n div 2;
k:=1;
for j:=n-1 downto i do begin
a[j,j]:=k;
k:=k+1;
end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 16.04.2011, 12:29   #5
Mariaa
 
Регистрация: 30.03.2011
Сообщений: 4
По умолчанию

Он у меня на j:=-1; ругается(((((
Mariaa вне форума Ответить с цитированием
Старый 16.04.2011, 12:40   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Mariaa
для того, чтобы проверить решение Mad_Cat
измените тип переменных. у вас они n,i,j:byte;
сделайте их
Код:
n,i,j : integer;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.04.2011, 12:42   #7
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от Mariaa Посмотреть сообщение
Он у меня на j:=-1; ругается(((((
Потому что у тебя j объявлен как byte.
сделай его просто целым.

Update
Опоздал -)
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 16.04.2011, 12:47   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Mariaa

а можете изменить свой код заполнения на такой:
Код:
for i:=0 to n-1 do
for j:=0 to n-1 do
 begin
  if j<=n-i-1
    then a[i,j]:=i+j+1
    else
       if (i=j) then a[i,j] := n-i
       else  a[i,j] :=0;
  StringGrid1.Cells[j,i]:=Inttostr(a[i,j]);
  end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.04.2011, 13:41   #9
Mariaa
 
Регистрация: 30.03.2011
Сообщений: 4
По умолчанию

Спасибо!!!
Все гениальное просто))))))
ОГРОМНОЕ СПАСИБО)))))
Mariaa вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Квадратная матрица alexanna Общие вопросы C/C++ 9 22.01.2011 17:58
Квадратная матрица ronil Паскаль, Turbo Pascal, PascalABC.NET 3 08.12.2010 18:18
квадратная матрица Ольга123456 Паскаль, Turbo Pascal, PascalABC.NET 3 24.05.2010 16:21
Квадратная матрица anna_ Помощь студентам 8 15.12.2009 21:16