Меня вот заинтересовало, что такое "четно-четный" магический квадрат. Четный - знаю, нечетный - понятно, по аналогии. А четно-четный - это должно быть нечто ужасное...
P.S. Заполнение магического квадрата на Паскале я выкладывал на форуме... По-моему, он работал и для четных и для нечетных N...
чeтно-чeтный это мaгичeский квaдрaт с рaзмeрностью 4, 8, 12, 16 ... Всe что дeлится нa 4. А в прогe нужно, нaписaть прогрaмму пользовaтeль ввeл рaзмeрность, построился квaдрaт. А процeдурa чeтного у мeня нa пaскaлe рaботaeт, a нa дeлфи нeт(
unit Unit1;
interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, XPMan, StdCtrls, Grids;
type matr=array[1..50,1..50] of integer;
type
TForm1 = class(TForm)
Label2: TLabel;
Label4: TLabel;
StringGrid1: TStringGrid;
Edit2: TEdit;
Edit1: TEdit;
Button1: TButton;
XPManifest1: TXPManifest;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
private{ Private declarations }public{ Public declarations }procedure Draw(p: boolean);
end;
var
Form1: TForm1;
a:matr;
z:boolean;
implementation{$R *.dfm}Procedure Swap(Var a, b: Integer);
Var T: Integer;
Begin
T := a; a := b; b := T
End;
Function CreateMagic(n: Integer): boolean;
Var
i, j, k, s, b, r, m: Integer;
p: boolean;
Begin
p := True;
If Odd(n) ThenBegin
i := 1; j := Succ(n div2);
For k := 1To Sqr(n) doBegin
a[i,j] := k;
If k mod n = 0Then Inc(i)
ElseBegin
Dec(i); Inc(j);
If i = 0Then i := n;
If j > n Then j := 1EndEnd;
EndElseIf n mod4 = 0ThenBegin
k := 1;
For i := 1To n DoFor j := 1To n DoBegin
a[i, j] := k; Inc(k)
End;
j := 2; m := n div2;
For i := 1To m DoFor k := 1To m Div2DoBeginIf j = Succ(m) Then j := 2ElseIf j = (m + 2) Then j := 1;
s := Succ(n - i); b := Succ(n - j);
Swap(a[i, j], a[s, b]);
Swap(a[i, b], a[s, j]);
Inc(j, 2)
EndEndElseIf n <> 2ThenBegin
k := 1;
For i := 1To n DoFor j := 1To n DoBegin
a[i, j] := k; Inc(k)
End;
r := Pred(n div2) div2; m := n div2;
For i := 1To m DoBegin
j := i;
For k := 1To r DoBeginIf j > m Then j := 1;
s := Succ(n - i); b := Succ(n - j);
Swap(a[i, j], a[s, b]);
Swap(a[i, b], a[s, j]);
Inc(j)
EndEnd;
i := 1; j := Succ(r);
For k := 1To m DoBeginIf j > m Then j := 1;
s := Succ(n - i);
Swap(a[i, j], a[s, j]);
Inc(i); Inc(j)
End;
i := 1; j := r + 2;
For k := 1To m DoBeginIf j > m Then j := 1;
b := Succ(n - j);
Swap(a[i, j], a[i, b]);
Inc(i); Inc(j)
EndEndElse p := False;
result := p;
End;
procedure TForm1.Draw(p: boolean);
var
i, j: integer;
n, sum: integer;
beginif p thenbegin
n := StrToInt(Edit1.Text);
with StringGrid1 dobegin
ColCount := n;
RowCount := n;
for i := 0to pred(RowCount) dofor j := 0to pred(ColCount) dobegin
Cells[i, j] := IntToStr(a[i+1, j+1]);
end;
end;
sum := (n * (sqr(n) + 1)) div2;
Edit2.Text := IntToStr(sum);
endelse
ShowMessage('Не существует...');
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begincase Key of'0'..'9',#8:;
else key:=chr(0);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: integer;
begin
Edit2.Clear;
for i := 0to StringGrid1.RowCount - 1dofor j := 0to StringGrid1.ColCount - 1do
StringGrid1.Cells[i, j] := '';
Draw(CreateMagic(StrToInt(Edit1.Text)));
end;
end.
В семёрке открывается, но с кодировками лажа. Кстати, давно хотел спросить - почему программы, откомпилированные в семёрке, под вистой часто вместо русских букв показывают закорючки?
В семёрке открывается, но с кодировками лажа. Кстати, давно хотел спросить - почему программы, откомпилированные в семёрке, под вистой часто вместо русских букв показывают закорючки?
Блин, перегонкой через ворд я заниматься умею. Я о том, что если запустить то, что скачалось, то будут закорючки. И что делать с готовыми программами, которые у других показывают не те буквы?
И что делать с готовыми программами, которые у других показывают не те буквы?
Писать программы как положено. В частности - если программа рассчитана на работу у других - она по определению не должна считать, что у других такие же настройки системы, как и у разработчика. К примеру, язык для Non-Unicone приложений у меня выставлен в Hebrew, следовательно, если я запущу любое русифицированное приложение, работающее с ANSI - я увижу вопросики или кракозябры. Юникод с правильными шрифтами - будет отображаться нормально.