0 / 0 / 0
Регистрация: 11.12.2018
Сообщений: 4
1

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

11.12.2018, 20:41. Показов 2655. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В коде какая-то ошибка поправьте пожалуйста

Delphi
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
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  var R,stek:array[1..8] of integer;
    x,y,j:integer;
    s:string;
implementation
 
{$R *.dfm}
function uspeh:boolean;
begin
  result:=false;
  while (y<8) and  (not result) do
   begin
    y:=y+1;
    result:=(R[y]=0);
    if Result then
      for j := 1 to x do
        if (y-stek[j])=(x-j) then
          result:=false;
      end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 y:=0;
for y:=1 to 8 do R[y]:=0;
  x:=1; y:=0;
  repeat
   if uspeh=true then begin
     stek[x]:=y;
     if x=8  then break;
     R[y]:=1; Inc(x); y:=0;
   end else begin
     dec(x);
     if x>0 then y:=stek[x];
     R[y]:=0;
   end;
  until x=0;
  if x=0 then begin showmessage('решение не найдено'); exit;
  end;
  for j := 1 to 8 do begin memo1.Lines.Add(inttostr(stek[j]));
  stringgrid1.cells[j,stek[j]]:=inttostr(1);
  end;
 
  end;
 
end.
Миниатюры
Расставить 8 ферзей на шахматной доске так, чтобы они не били друг друга  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2018, 20:41
Ответы с готовыми решениями:

Число способов расставить на шахматной доске NxN K ладей так, чтобы они не били друг друга
Требуется найти число способов расставить на шахматной доске NxN K ладей так, чтобы они не били...

Дано шахматное поле, расставить n ферзей так чтобы они не били друг друга
Здраствуйте, программисты! У меня случилась беда и я не знаю к кому больше обратиться.... у меня...

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

Рекурсия: На шахматной доске расставить 8 ферзей так, чтобы они не били друг друга
Всем привет. Прошу помочь в решении задачи в VBA c помощью рекурсии. Задача: На шахматной доске...

3
5393 / 4321 / 1060
Регистрация: 29.08.2013
Сообщений: 27,128
Записей в блоге: 3
11.12.2018, 21:52 2
проверяй функцию uspeh
если она позволяет ставит точки по диагонали, то ошибка в ней

ЗЫ но я бы все переделал совсем
0
1437 / 1014 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
11.12.2018, 22:04 3
Лучший ответ Сообщение было отмечено Diman4ikRUS как решение

Решение

Цитата Сообщение от Diman4ikRUS Посмотреть сообщение
В коде какая-то ошибка поправьте пожалуйста
Какая? Если не компилируется, то компилятор пишет, какая конкретно ошибка не даёт ему это сделать. Этот текст компилятора и приводите сюда. Судя по скрину, вижу, что ошибка не столько в коде, сколько в алгоритме.
1
0 / 0 / 0
Регистрация: 11.12.2018
Сообщений: 4
11.12.2018, 22:16  [ТС] 4
Цитата Сообщение от qwertehok Посмотреть сообщение
проверяй функцию uspeh
если она позволяет ставит точки по диагонали, то ошибка в ней

ЗЫ но я бы все переделал совсем
Спасибо тебе огромное, я нашел ошибку, если бы не твой совет, то никогда бы не додумался
0
11.12.2018, 22:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2018, 22:16
Помогаю со студенческими работами здесь

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

Расставить на доске N ферзей так, чтобы они не били друг друга
смысл в том чтобы расставить на шахматной доске размером N*N, N ферзей так, чтобы они не били друг...

Рекурсия: расставить на шахматной доске 8 ладей так, чтобы они не били друг друга
Нужно расставить на шахматной доске 8 ладей так, чтобы они не били друг друга, вот что я наваял: ...

Вывести максимальное количество ферзей, которых можно расставить на доске N*M так, чтобы они не били друг друга
Задается шахматная доска N*M Нужно вывести максимальное количество Ферьз которых можно расставить...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru