Расстановка 8 ферзей на Delphi / Pascal

автор evteev, Дек.30, 2009, рубрики Delphi/Pascal

Программа расставляет на шахматной доске 8 ферзей так, чтобы они не били друг друга.

Расстановка 8 ферзей. Исходный код


Uses CRT;

Const N = 8; // 8 Клеток
M = 8; // [block]0[/block]

Type Queen = record
X,Y : Integer;
End;

Var A : Array[1..N, 1..N] Of Integer;
K : Array[1..M] Of Queen;
I,J,Q,X,Y : Integer;


Procedure ClearQueen;
Var I : Integer;
Begin
For I := 1 To M Do
Begin
K[I].X := 0;
K[I].Y := 0;
End;
End;

Procedure ShowQueen;
Var I : Integer;
Begin
For I := 1 To M Do
WriteLn('Q',I, ' [', K[I].X, ',', K[I].Y, ']');
End;

Procedure SetQueen;
Begin
For I := 1 To M Do
If (K[I].X <> 0) And (K[I].Y <> 0) Then
A[K[I].X, K[I].Y] := I;
End;

Procedure ClearArray;
Var I,J : Integer;
Begin
For I := 1 To N Do
For J := 1 To N Do
A[I, J] := 0;
End;

Procedure ShowArray;
Var I,J : Integer;
Begin
For I := 1 To N Do
Begin
For J := 1 To N Do
Write(A[I, J]:3);
WriteLn;
End;
End;

Procedure SetArray(X,Y : Integer);
Var I,J : Integer;
Begin
For I := 1 To N Do Inc(A[I,Y]);
For I := 1 To N Do Inc(A[X,I]);
For I := -N To N Do
If (X+I>=1) And (X+I<=N) And (Y+I>=1) And (Y+I<=N) Then
Inc(A[X+I,Y+I]);
For I := -N To N Do
If (X+I>=1) And (X+I<=N) And (Y-I>=1) And (Y-I<=N) Then
Inc(A[X+I,Y-I]);
End;

Function CountArray:Integer;
Var I,J,S : Integer;
Begin
S := 0;
For I := 1 To N Do
For J := 1 To N Do
If A[I, J] = 0 Then Inc(S);
CountArray := S;
End;

Begin
ClrScr;
ClearArray;
ClearQueen;

// =ЦЕЛОЕ((B2-1)/8)+1
// =B2-8*(C2-1)

Q := 1;
I := 1;

While (Q <= M) Do
Begin
X := Trunc((I-1)/N)+1;
Y := I-N*(X-1);
If A[X,Y] = 0
Then
Begin
SetArray(X,Y);
K[Q].X := X;
K[Q].Y := Y;
Inc(Q);
End
Else Inc(I);

If I > N*N
Then
Begin
Dec(Q);
I := 1+((K[Q].X - 1) * N + K[Q].Y);
K[Q].X := 0;
K[Q].Y := 0;

ClearArray;
For J := 1 To Q-1 Do SetArray(K[J].X,K[J].Y);
End;

End;

ClrScr;
ShowQueen;
ClearArray;
SetQueen;
ShowArray;

End.

Мой блог о программировании находят по следующим фразам

Комментировать :

Комментирование закрыто.



Что-то ищите?

Используйте форму для поиска по сайту:



Все еще не можете что-то найти? Оставьте комментарий или свяжитесь с нами, тогда мы позаботимся об этом!

Все о программировании - языки программирования скачать

Все о программировании

  • языки программирования
  • php программирование
  • программирование C++
  • программирование на java
  • язык программирования java
  • программирование на delphi
  • программирование на pascal
  • купить программы программирования
  • язык программирования assembler
  • языки программирования скачать
  • скачать языки программирования

Архив сообщений

Все вхождения, в хронологическом порядке...