Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
3-31102
SSAlex
2003-06-17 13:22
2003.07.10
Доступ до данных в форме Access.


3-31135
Mike1 Kouzmine1
2003-06-18 12:30
2003.07.10
Не знаю как обозвать, но, видимо, о сортировке.


14-31429
Andrey
2003-06-18 16:31
2003.07.10
Стандартный способ передачи параметров в Dll


14-31463
Malder
2003-06-16 23:19
2003.07.10
Программа для печати платежек


1-31193
Maxim Pshevlotsky
2003-06-28 05:51
2003.07.10
Конвертор RTF 2.0 ----> HTML сообщения типа multipart mixed





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский