Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.03.30;
Скачать: CL | DM;

Вниз

Почему программа не работает? Не могу найти ошибку.   Найти похожие ветки 

 
oliksin   (2013-06-08 21:26) [0]

Поля шахматной доски характеризуются записью
Type
     Pole=record
               Ver:(a,b,c,d,e,f,g,h);  {вертикальные координаты}
               Hor:1..8;                    {горизонтальные координаты}
              end;
Var   Figura:Pole;
Вывести сообщение, может ли конь за один ход перейти с поля Figura i на поле Figura j

unit Unit3;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

Type Vertikal=(a,b,c,d,e,f,g,h);
    Pole=record
         Ver:Vertikal; {вертикальные координаты}
         Hor:1..8;     {горизонтальные координаты}
         end;
 TForm3 = class(TForm)
   Button1: TButton;
   ComboBox1: TComboBox;
   ComboBox2: TComboBox;
   ComboBox3: TComboBox;
   ComboBox4: TComboBox;
   Edit1: TEdit;
   procedure Button1Click(Sender: TObject);
//  procedure FormCreate(Sender: TObject);
//   procedure ComboBox1Change(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);

var Figura1,Figura2: Pole;
   c1,c2:char;
   hod:boolean;
begin
c1:=Combobox2.Text[1]; //вводим a..h
Figura1.Ver:=Vertikal(ord(c1)-97);//присваиваем 0..7
Figura1.Hor:=StrToInt(Combobox1.Text); //вводим 1..8
c2:=Combobox4.Text[1];//вводим a..h
Figura2.Ver:=Vertikal(ord(c2)-97);//присваиваем 0..7
Figura2.Hor:=StrToInt(combobox3.Text); //вводим 1..8
hod:=((abs(ord(Figura1.Ver)-ord(Figura2.Ver))=2)
  and(abs(Figura1.Hor-Figura2.Hor)=1))
 or ((abs(ord(Figura1.Ver)-ord(Figura2.Ver))=1)
  and(abs(Figura1.Hor-Figura2.Hor)=2));
if hod then Edit1.Text:="Может"
else Edit1.Text:="Не может";

end;
end.


 
RWolf ©   (2013-06-09 00:18) [1]

всё в норме.


 
[ВладОшин] ©   (2013-06-09 07:13) [2]


> всё в норме.

+1

а если не работает, то что то не то вводите
для теста
var
   hod:boolean;
 Figura1,Figura2: Pole;
 i,j:Integer;
begin
  for i := 0 to 7  do
   for j := 0 to  7 do
   begin
     if StringGrid1.cells[i,j] = "1" then
     begin
      Figura1.Ver := Vertikal(i);
      Figura1.Hor := j;
     end;
     if StringGrid1.cells[i,j] = "2" then
     begin
      Figura2.Ver := Vertikal(i);
      Figura2.Hor := j;
     end;
   end;

 hod := (
        (abs(ord(Figura1.Ver)-ord(Figura2.Ver))=2)
        and
        (abs(Figura1.Hor-Figura2.Hor)=1)
      )
      or
      (
        (abs(ord(Figura1.Ver)-ord(Figura2.Ver))=1)
         and
         (abs(Figura1.Hor-Figura2.Hor)=2)
     );

  if hod then
    ShowMessage("da") else
    ShowMessage("net");


 
Труп Васи Доброго ©   (2013-06-14 14:31) [3]

Можно и по другому.
if (х1<>x0)&(y1<>y0)&((abs(x1-x0)+(abs(y1-y0))=3) Then
ShowMessage("da")
else
 ShowMessage("net");


 
Труп Васи Доброго ©   (2013-06-14 14:35) [4]

Или по другому
if ((х1-x0)*(y1-y0)>0)&((abs(x1-x0)+(abs(y1-y0))=3) Then
ShowMessage("da")
else
ShowMessage("net");


 
Труп Васи Доброго ©   (2013-06-14 14:43) [5]

Скорее всего даже так будет правильно, но надо проверить.
Или по другому
if (abs((х1-x0)*(y1-y0))*(abs(x1-x0)+abs(y1-y0)))=6 Then
ShowMessage("da")
else
ShowMessage("net");


 
Труп Васи Доброго ©   (2013-06-14 14:51) [6]

Всё ещё проще!!! Второе условие лишнее! Вот так достаточно!

if (abs((х1-x0)*(y1-y0))=2) Then
ShowMessage("da")
else
ShowMessage("net");


 
[ВладОшин] ©   (2013-06-14 14:56) [7]


> if (abs((х1-x0)*(y1-y0))=2) Then

!!

Жалею, что не сам  догадался )


 
Palladin ©   (2013-06-14 15:03) [8]


> Почему программа не работает?

Написал, но не смог запустить?


 
Dennis I. Komarov ©   (2013-06-21 20:33) [9]

Усложним задачу:
Поле доски кодируется одним байтом:
00XXX000 - 1-8
00000XXX - a-h
Написать функцию, которая возвращает минимальное количество ходов за которое конь может перейти с поля "A" на поле "B"...

function KnightStepCount (A,B: Byte): Byte;
begin
end;


А-ля пятница :)


 
Dennis I. Komarov ©   (2013-06-21 20:52) [10]

На троечку:
function CanKnightStep (A,B: Byte): Boolean; // из [0]


 
Dennis I. Komarov ©   (2013-06-21 21:33) [11]

Первая задача рекурсией на четверку...



Страницы: 1 вся ветка

Текущий архив: 2014.03.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.007 c
15-1381168512
Noso
2013-10-07 21:55
2014.03.30
Возвращение набора данных из Ms sql


1-1323770413
ZeroDivide
2011-12-13 14:00
2014.03.30
Как установить RunParams в XE2 из эксперта (ToolsAPI)


1-1323671628
Almaz
2011-12-12 10:33
2014.03.30
Ошибка доступа в CreateRemoteThread


2-1371981030
clix
2013-06-23 13:50
2014.03.30
список выбора цвета.


6-1272206861
tippa
2010-04-25 18:47
2014.03.30
много подключений с одного сокета