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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2012, 19:53   #1
FlipFan
Пользователь
 
Регистрация: 30.03.2012
Сообщений: 14
По умолчанию Чётный разряды м.квадрата

Подскажите что-нибудь плз.
Мне нужно сделать магический квадрат nxn, заполненный цифрами от 1 до n, эти цифры не должны повторяться по вертикали горизонтали и диагонали.
Не могу довести до ума как сгенерировать квадрат с чётным разрядом (6х6, 8х8 и т.д). Надеюсь на вашу помощь.
Код:
unit Unit1;
 interface
 uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    sg: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 var
  Form1: TForm1;
 implementation
 {$R *.dfm}
 procedure TForm1.Button1Click(Sender: TObject);
label error;
var a,b:array[1..168,1..168] of integer;
    n,i,j,x:integer;
    s:string;
begin
  s:=edit1.Text;
  if s='' then goto error;
  n:=strtoint(edit1.Text);
 
 if (n>167) then
  begin
    label1.Caption:='razryad slishkom bolshoi! (n<=167)';
    goto error;
  end;
  if (n<=4) then
  begin
    label1.Caption:='razryad slishkom malenkii!(n>=4)';
    goto error;
  end;
  label1.Caption:='';
  sg.Height:=22*n;
  sg.Width:=22*n;
  sg.ColCount:=n;
  sg.RowCount:=n;
 
  for i:=1 to n do
  begin
    for j:=i to n do a[i,j-i+1]:=j;
    for j:=1 to i-1 do a[i,n-(i-j)+1]:=j;
  end;
  x:=0;
  for i:=1 to n do
  begin
    if (i mod 2)=1 then
    begin
      inc(x);
      for j:=1 to n do
        b[x,j]:=a[i,j];
    end;
  end;
 
  for i:=1 to n do
  begin
    if (i mod 2)=0 then
    begin
      inc(x);
      for j:=1 to n do
        b[x,j]:=a[i,j];
    end;
  end;
 
 for i:=1 to 101 do
    for j:=1 to 101 do
      sg.Cells[j-1,i-1]:='';
 
  for i:=1 to n do
    for j:=1 to n do
      sg.Cells[j-1,i-1]:=inttostr(b[i,j]);
  error:
end; 
end.
м. квадрат.zip на всякий случай.

Последний раз редактировалось Stilet; 21.06.2012 в 20:09.
FlipFan вне форума Ответить с цитированием
Старый 21.06.2012, 20:08   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

http://old.kspu.ru/magazine/no4/pub/pr3-4.htm
http://www.klassikpoez.narod.ru/metody.htm
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.06.2012, 20:41   #3
FlipFan
Пользователь
 
Регистрация: 30.03.2012
Сообщений: 14
По умолчанию

Мне нужен не совсем магический квадрат, а латинский где квадрат NxN заполненный числами от 1 до N а не до N в квадрате. (немного отличаются)



ап.

Последний раз редактировалось FlipFan; 21.06.2012 в 22:10.
FlipFan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Максимальный чётный элемент vrtp Общие вопросы C/C++ 2 07.12.2011 17:00
Задача по Си. Байты, разряды. meta Помощь студентам 2 31.05.2011 12:02
найти первый отрицательный элемент массива имеющий чётный номер (Delphi) Vanger Помощь студентам 5 25.01.2011 11:41
старшие разряды Михаил2261 Microsoft Office Excel 13 15.10.2010 02:00
Переставить местами разряды valerij Microsoft Office Excel 2 23.03.2009 00:55