Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2014.03.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
2-1370712411
oliksin
2013-06-08 21:26
2014.03.30
Почему программа не работает? Не могу найти ошибку.


2-1371577610
Cobalt
2013-06-18 21:46
2014.03.30
Велосипед - список "N к 1"


15-1381177802
Юрий
2013-10-08 00:30
2014.03.30
С днем рождения ! 8 октября 2013 вторник


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


9-1194966580
Voland2000
2007-11-13 18:09
2014.03.30
Посчитать количество полигонов в Octree узле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский