oghab
یک شنبه 15 آبان 1384, 18:25 عصر
سلام
حسابی گیج شدم. اصلا به عقل جور دار نمی آید. چندین بار چکش کردم!!!! صد تا label گذاشتم تا مقدار متغیرها در هر بار نشونم بده. تا بفهمم چرا نمیشه. هیچ مشکلی نداشت!!!!
من 3 تا متغیر از نوع زمان دارم. t,t1,t2
یه کد دارم
if (t>t1) and (t<t2) then
begin
s:=ADOQuery1.Fields[1].AsString ;
label9.Caption:='ggg';
end;
که الیته خط مربوط به label9 به خاطر اینه که ببینم وارد if میشه یا نه!
حالا من مقدار t را میدم : 05:00:00PM و مقدار t1 برابر 02:00:00PM و t2 برابر 09:00:00PM است.
وقتی قسمت {(t>t1) and} را داخل کروشه گذاشتم اجرا شد. و با قسمت (t<t2) هیچ مشکلی نداشت!
کلی label گذاشتم تا مقدارهای t , t1, t2 را نشون بده. همه چیز درست بود!
این کد را نوشتم:
label10.Caption:='(t<t1)= '+BoolToStr(t<t1)+' (t1<t)= '+BoolToStr(t1<t)+' (t>t1)= '+booltostr(t>t1)+' (t=t1)= '+BoolToStr(t=t1);
میدونید مقدار label چقدر شد!!!!:
(t<t1)= -1 (t1<t)= 0 (t>t1)= 0 (t=t1)= 0
مگه مقدار بولین نباید یا 0 باشه یا 1 (false یا true) پس چرا این منفی 1 است؟ 1-
یعنی چه؟
تازه t=18:29:00 PM است و t1=02:00:00 PM است یعنی باید
(t>t1)=1
ولی این برعکس جواب میده!
اگر از
not(t>t1)
به نظرم عاقلانه نمیاد و در ضمن در یه مرحله دیگه باعث بروز اشتباه میشه!
حالا بگید من چیکار کنم؟
یه راه دیگه برای مقایسه دو متغیر زمانی بگید!
چک کردم وقتی t=06:40:00 PM و t2:=09:00:00 PM است
نتیجه این است:
(t<t2)= -1 (t2<t)= 0 (t>t2)= 0 (t=t2)= 0
در حالیکه
(t<t2)=1
درست است و در این صورت باید کد زیر اجرا شود.
if {(t>t1) and} (t<t2) then
begin
s:=ADOQuery1.Fields[1].AsString ;
label9.Caption:='hhh';
end;
ولی با همان -1 اجرا میشود!
یه راه دیگه برای مقایسه دو متغیر زمانی بگید!!!!!
من پاک گیج شدم! اصلا سر در نمیارم!
ممنونم
حسابی گیج شدم. اصلا به عقل جور دار نمی آید. چندین بار چکش کردم!!!! صد تا label گذاشتم تا مقدار متغیرها در هر بار نشونم بده. تا بفهمم چرا نمیشه. هیچ مشکلی نداشت!!!!
من 3 تا متغیر از نوع زمان دارم. t,t1,t2
یه کد دارم
if (t>t1) and (t<t2) then
begin
s:=ADOQuery1.Fields[1].AsString ;
label9.Caption:='ggg';
end;
که الیته خط مربوط به label9 به خاطر اینه که ببینم وارد if میشه یا نه!
حالا من مقدار t را میدم : 05:00:00PM و مقدار t1 برابر 02:00:00PM و t2 برابر 09:00:00PM است.
وقتی قسمت {(t>t1) and} را داخل کروشه گذاشتم اجرا شد. و با قسمت (t<t2) هیچ مشکلی نداشت!
کلی label گذاشتم تا مقدارهای t , t1, t2 را نشون بده. همه چیز درست بود!
این کد را نوشتم:
label10.Caption:='(t<t1)= '+BoolToStr(t<t1)+' (t1<t)= '+BoolToStr(t1<t)+' (t>t1)= '+booltostr(t>t1)+' (t=t1)= '+BoolToStr(t=t1);
میدونید مقدار label چقدر شد!!!!:
(t<t1)= -1 (t1<t)= 0 (t>t1)= 0 (t=t1)= 0
مگه مقدار بولین نباید یا 0 باشه یا 1 (false یا true) پس چرا این منفی 1 است؟ 1-
یعنی چه؟
تازه t=18:29:00 PM است و t1=02:00:00 PM است یعنی باید
(t>t1)=1
ولی این برعکس جواب میده!
اگر از
not(t>t1)
به نظرم عاقلانه نمیاد و در ضمن در یه مرحله دیگه باعث بروز اشتباه میشه!
حالا بگید من چیکار کنم؟
یه راه دیگه برای مقایسه دو متغیر زمانی بگید!
چک کردم وقتی t=06:40:00 PM و t2:=09:00:00 PM است
نتیجه این است:
(t<t2)= -1 (t2<t)= 0 (t>t2)= 0 (t=t2)= 0
در حالیکه
(t<t2)=1
درست است و در این صورت باید کد زیر اجرا شود.
if {(t>t1) and} (t<t2) then
begin
s:=ADOQuery1.Fields[1].AsString ;
label9.Caption:='hhh';
end;
ولی با همان -1 اجرا میشود!
یه راه دیگه برای مقایسه دو متغیر زمانی بگید!!!!!
من پاک گیج شدم! اصلا سر در نمیارم!
ممنونم