Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Ромка666
6 / 6 / 2
Регистрация: 02.10.2010
Сообщений: 100
#1

Расстановка ферзей - Turbo Pascal

01.03.2011, 22:07. Просмотров 1273. Ответов 0
Метки нет (Все метки)

В общем надо расставить максимальное количество ферзей на шахмотной доске чтобы они не угрожали друг другу, резмер доски вводится пользователем эта программа у меня есть вот :
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
program ferzi;
TYPE
  mas=array [1..15,1..15] of integer;
VAR
  a:mas;   
{матрица, описывающая положение шахматной доски}
  i,j,n:integer;
  k:longint;
PROCEDURE Fill_F(x,y:integer; var a:mas);   
 {x, y*— координаты вставки ферзя}
var
  i, j:integer;
begin
  for i:= 1 to n do
    begin
      a[x,i]:=1; {строка, где будет стоять ферзь*—«под боем»}
      a[i,y]:=1;     {столбец, где будет стоять ферзь*—«под боем»}
    end;
i:=x-1;     {переходим в левую верхнюю клетку по диагонали} j:=y-1;     {от (x,y)}
  while (i<>0) and (j<>0) do
    begin
      a[i,j]:=1;   {помечаем диагональ слева и вверх от (x,y) }
      dec(i);
      dec(j);
    end;
  i:=x+1;      {переходим в правую нижнюю клетку по диагонали от (x,y)}
  j:=y+1;
  while (i<>n+1) and (j<>n+1) do
    begin
      a[i,j]:=1;    {помечаем диагональ справа и вниз от (x,y) }
      inc(i);
      inc(j);
    end;
  i:=x-1;      {переходим в правую верхнюю клетку}
  j:=y+1;
  while (i<>0) and (j<>n+1) do
    begin
      a[i,j]:=1;    {помечаем диагональ справа и вверх от (x,y)}
      dec(i);
      inc(j);
    end;
  i:=x+1;   {переходим в левую нижнюю клетку от (x,y)}
  j:=y-1;
  while (i<>n+1) and (j<>0) do
    begin
      a[i,j]:=1;    {помечаем диагональ слева и вниз от (x,y)}
      inc(i);
      dec(j);
    end;
  a[x,y]:=2;    {ставим ферзя на место (x,y)}
end;
PROCEDURE Set_F(x:integer; a:mas); 
{x*— строка, куда добавляем ферзя}
var
  i,j:integer;
  b:mas;
begin
  if x=n+1 then     {если все ферзи расставлены}
    begin
    for i:=1 to n do       {выводим матрицу расстановки}
      begin
        for j:=1 to n do
          write(a[i,j]);
          writeln;
      end;
      writeln;
    inc(k)      {наращиваем счетчик вариантов расстановки}
  end
else        {в противном случае}
    for i:= 1 to n do       {ищем в строке}
      if a[x,i]=0 then      {первую свободную клетку}
        begin
          b:=a;        {копируем матрицу a в матрицу b}
          Fill_F(x,i,b);  {устанавливаем ферзя в i-й столбец строки x}
          Set_F(x+1,b);      {вызываем процедуру вставки ферзя в следующую x+1-ю строку измененной матрицы b}
        end;
end;
BEGIN
  readln(n);     {вводим размерность доски}
  k:=0;      {количество вариантов расстановок равно 0}
  for i:= 1 to n do
    for J:= 1 to n do
      a[i,j]:=0;       {все клетки матрицы свободны}
  Set_F(1,a);        {вызываем рекурсивную процедуру установки ферзя (сначала устанавливаем первого ферзя на свободную доску)}
  writeln(k);    {выводим ответ*— число вариантов расстановки}
  readln;
END.
Но проблема в том что на поле стоит ещё 1 ладья её координаты вводятся пользователем и эта программа у меня тоже есть вот :
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
uses crt;
const n=8;
type mas=array[1..n,1..n] of integer;
procedure Vyvod(var a:mas);
var i,j:byte;
begin
for i:=1 to n do
 begin
  for j:=1 to n do
  write(a[i,j]:2);
  writeln;
 end;
readln
end;
var a:mas;
    i,j,x,y:integer;
begin
clrscr;
readln(x1,y1);
    for i:=1 to n do
    for j:=1 to n do
    if (i=x1)or(j=y1) then a[i,j]:=1
    else a[i,j]:=0;
    a[x,y]:=2;
    Vyvod(a);
end.
Помогите пожалуйста связать эти две программы . Требуется вывести все комбинации и их количество. Пожалуйста помогите .

Добавлено через 1 час 23 минуты
Ну пожалуйста помогите !!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2011, 22:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Расстановка ферзей (Turbo Pascal):

Получить m расстановок 8 ферзей на шахматной доске, при которых ни один из ферзей не угрожает другому
10. Дано натуральное число m. Получить m расстановок 8 ферзей на шахматной...

8 ферзей
Помогите, пожалуйста, переделать программу))) Нужно, что бы было расставлено 8...

Расстановка знаков
Можно ли так расставить 5 заданных чисел и знаки арифметических операций (‘+’,...

Расставить на шахматной доске 8 ферзей.
люди помогите решить пожалуйста курсовик срочно нужно(((( Расставить на...

Пожалуйста, расстановка мебели
Здравствуйте Уважаемые знатоки программирования. Помогите пожалуйста решить...

Расстановка символов в массив
Мне надо, чтобы каждый символ, напечатонного мною предложения, становился на...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2011, 22:07
Привет! Вот еще темы с решениями:

Написать игру, расстановка 16 букв
Доброе утро. Помогите исправить программу.Здача.нужно написать...

Расстановка натуральных чисел в правильный треугольник
Здравствуйте. Помогите пожалуйста с задачей на языке Turbo Paskal: расстановка...

На заданных с клавиатуры координат клеток шахматной доски нарисовать ферзей
На заданных с клавиатуры координат клеток шахматной доски нарисовать ферзей...

Определить максимально возможное количество ферзей, не бьющих друг друга
Нужно написать программу, которая на шахматной доске nxn определяла максимально...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru