Форум: "Потрепаться";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
ВнизВ чём лучше хранить условия ? У объекта в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c