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

Вниз

В чём лучше хранить условия ? У объекта в 2D мире есть свойства   Найти похожие ветки 

 
Кен ©   (2003-06-21 06:21) [0]

Pos.X Pos.Y Это его текущие координаты. И есть в этом 2D мире место в которое надо объекту добраться (Prishli : Bolean) оно рассположено в
((1<x<2) and (3<y<4))
В чём лучше хранить эту запись, и как сделать так, чтобы при выполнении условия Prishli выставлялось в True , а при невыполнении в False ?

Тонкость в том, что условия могут быть самые разные, и зависить не только от x и y, а и от любых других переменных. Какой самый простой способ это организовать ?

Километры кода писать совершенно не хочеться, тем более, что таких Prishli может быть огромное колличество и по совершенно разным поводам. Чтоже тогда для всех отдельную кучу кода писать что ли ?


 
ZeroDivide ©   (2003-06-21 08:53) [1]

1. Эту запись лучше всего хранить в TRect
2. Да, представь себе, писать всю эту кучу в функцию
function Prishli(variables):boolean;
подругому никак


 
Кен ©   (2003-06-22 05:45) [2]

> ZeroDivide © (21.06.03 08:53)
> 1. Эту запись лучше всего хранить в TRect
> 2. Да, представь себе, писать всю эту кучу в функцию
> function Prishli(variables):boolean;
> подругому никак

TRect - это для этого конкретного случая, а для общего случая ?

Вот сами по себе сравнения - в чём хранятся ? Какие это переменные ?
Например можно вместо if x < y then ... написать :
z := <;
if x z y then ...

Или сравнениями вообще никак нельзя изменять по ходу работы программы ?


 
Всеволод Соловьёв ©   (2003-06-22 14:19) [3]

booleanvar := x=y
тебе это надо? все что ты можешь написать в if"e, можно написать в
booleanvar := ...;
это для твоего же общего образования

>Километры кода писать совершенно не хочеться
всем не хочеця


 
Кен ©   (2003-06-23 04:56) [4]

> Всеволод Соловьёв © (22.06.03 14:19)
> booleanvar := x=y
> тебе это надо?

Это. Только в справке Дельфи 6 ничего о booleanvar нету.
Откуда это ? Можно хотя бы пример ?


 
Кен ©   (2003-06-23 06:13) [5]

> Всеволод Соловьёв © (22.06.03 14:19)
А я уже для этого дела себе функции написал. И программку небольшую, чтобы осмысливать : http://www.triponavtika.narod.ru/relat.zip ( исходник+экзэшник )

Если лень скачивать, то вот текст :

unit Unit1;

interface

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

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function RE(X:Integer;Relation:String;Y:Integer):Boolean; overload; begin // Проверка отношений. Пример : RE(x,"<=",y); // : Boolean
case ANSIIndexText(Relation, ["<>", "=", "<", "<=", ">", ">=", "=="]) of
0: if(X<>Y)then RE:=True else RE:=False;
1: if(X=Y) then RE:=True else RE:=False;
2: if(X<Y) then RE:=True else RE:=False;
3: if(X<=Y)then RE:=True else RE:=False;
4: if(X>Y) then RE:=True else RE:=False;
5: if(X>=Y)then RE:=True else RE:=False;
6: if(X=Y) then RE:=True else RE:=False; // ==
else RE:=False; //beep;
end;
end;
function RE(X:Boolean;Relation:String;Y:Boolean):Boolean; overload; begin // Проверка отношений для and, or, xor
case ANSIIndexText(LowerCase(Relation), ["and", "or", "xor"]) of
0: if(X and Y) then RE:=True else RE:=False;
1: if(X or Y) then RE:=True else RE:=False;
2: if(X xor Y) then RE:=True else RE:=False;
else RE:=False; beep; end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
i, j : Integer;
begin
for i:= 0 to 2 do
for j:= 0 to 2 do
if RE( RE( i,ComboBox1.Items[ComboBox1.ItemIndex],1 ),
ComboBox3.Items[ComboBox3.ItemIndex],
RE( j,ComboBox2.Items[ComboBox2.ItemIndex],1 ) )
then StringGrid1.Cells[i,j] := "X"
else StringGrid1.Cells[i,j] := "";
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1Change(Self);
end;

end.


и Unit1.dfm :
object Form1: TForm1
Left = 294
Top = 114
Width = 370
Height = 340
Caption = "Form1"
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object StringGrid1: TStringGrid
Left = 16
Top = 8
Width = 233
Height = 233
ColCount = 3
DefaultColWidth = 60
DefaultRowHeight = 60
FixedCols = 0
RowCount = 3
FixedRows = 0
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -32
Font.Name = "MS Sans Serif"
Font.Style = []
ParentFont = False
TabOrder = 2
end
object ComboBox1: TComboBox
Left = 16
Top = 256
Width = 73
Height = 21
Style = csDropDownList
ItemHeight = 13
ItemIndex = 1
TabOrder = 0
Text = "="
OnChange = ComboBox1Change
Items.Strings = (
"<>"
"="
"<"
"<="
">"
">=")
end
object ComboBox2: TComboBox
Left = 264
Top = 8
Width = 73
Height = 21
Style = csDropDownList
ItemHeight = 13
ItemIndex = 0
TabOrder = 1
Text = "<>"
OnChange = ComboBox1Change
Items.Strings = (
"<>"
"="
"<"
"<="
">"
">=")
end
object ComboBox3: TComboBox
Left = 264
Top = 256
Width = 73
Height = 21
Style = csDropDownList
ItemHeight = 13
ItemIndex = 2
TabOrder = 3
Text = "xor"
OnChange = ComboBox1Change
Items.Strings = (
"and"
"or"
"xor")
end
end


Теперь вот пытаюсь осмыслить, что может дать программисту возможность изменять знаки соотношений.


 
Всеволод Соловьёв ©   (2003-06-23 08:57) [6]

>> Всеволод Соловьёв © (22.06.03 14:19)
>> booleanvar := x=y
>> тебе это надо?
>Это. Только в справке Дельфи 6 ничего о booleanvar нету.
>Откуда это ? Можно хотя бы пример ?

Это из головы! Ведь в иф’е ты получаешь булевый результат. А значит его можно присвоить любой переменной булевого типа.


 
Кен ©   (2003-06-24 07:10) [7]

> Всеволод Соловьёв © (23.06.03 08:57)
> Это из головы! Ведь в иф’е ты получаешь булевый результат.
> А значит его можно присвоить любой переменной булевого типа.

А. Понял. Тогда речь не о том. Как, например, на ходу поменять везде в программе меньше на не равно или на >= ?
Вон мой пример. Он простейший. Один if всего. А как его переписать на нормальный язык ? В смысле без модификации знака.


 
Asteroid ©   (2003-06-24 12:34) [8]

Кен © (24.06.03 07:10)
Что-то не понимаю, в чем проблема. В зависимости от обстоятельств (которые тебе надо обработать) своей функции посылаешь либо <=, либо >=, либо что еще.


 
Кен ©   (2003-06-25 03:59) [9]

> Asteroid © (24.06.03 12:34)
> Кен © (24.06.03 07:10)
> Что-то не понимаю, в чем проблема. В зависимости от обстоятельств
> (которые тебе надо обработать) своей функции посылаешь либо
> <=, либо >=, либо что еще.

А процедуре что посылать ?

Ну попробуй переписать procedure TForm1.ComboBox1Change(Sender: TObject);
на нормальный язык.



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

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

Наверх




Память: 0.5 MB
Время: 0.028 c
3-31157
Orpheus
2003-06-19 08:12
2003.07.10
Проблема с Commit в IB


1-31263
Dima2
2003-06-28 17:02
2003.07.10
OleContainer : Word - > ASCII


1-31257
zolotov
2003-06-30 00:20
2003.07.10
Customize ToolBar2000


14-31457
b_baranov
2003-06-24 00:02
2003.07.10
Как


3-31141
EndDie
2003-06-18 14:34
2003.07.10
Как выбрать нужную запись через CommandText TADODataSet-a?