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

Вниз

проблемы с IF   Найти похожие ветки 

 
Dush ©   (2007-04-14 11:08) [0]

Доброго времени суток!
возникла проблема: в условии
if (data1=data2) and (Time1<=Time2) then DoIt;
если верно первое условие то второе не проверяется. Как от этого избавится?
Я знаю что можно сделать так:
if (data1=data2) then
  if (Time1<=Time2) then DoIt;

а по другому?


 
Johnmen ©   (2007-04-14 11:12) [1]

Выставить опцию компилятора {$B+}


 
Dush ©   (2007-04-14 11:13) [2]

спасибо


 
Johnmen ©   (2007-04-14 11:13) [3]


> сли верно первое условие то второе не проверяется.

...то второе проверяется.


 
Anatoly Podgoretsky ©   (2007-04-14 13:18) [4]

> Dush  (14.04.2007 11:08:00)  [0]

> то второе не проверяется

С чего бы? Новое слово в программирование?


 
{RASkov}   (2007-04-14 13:26) [5]

При соотвествующих опциях компилятора, второе условие может не проверяться если первое ложно... что в данном случае - наоборот.


 
homm ©   (2007-04-14 13:36) [6]

> второе условие может не проверяться если первое ложно

Не ложное. а если результат первого условия делает бессмысленым проверку второго. Например если это AND то ясно что если первое условие ложн, то выражение ложно, вне зависимости от второго. Если OR и первое условие истоино, то выражение истино и дальнейшая проверка так-же не имеет смысла.


 
{RASkov}   (2007-04-14 13:40) [7]

> [6] homm ©   (14.04.07 13:36)

Согласен... :) но в любом случае

> второе условие не проверяеться - если первое ложно

:)


 
homm ©   (2007-04-14 13:46) [8]

> но в любом случае

Не в любом. В случае если выставлены определенные опции (возможно даже по умолчанию) и это для случая AND для случая OR все наоборот.


 
{RASkov}   (2007-04-14 13:52) [9]

> для случая OR все наоборот.

ну да... чет я с ором ступил :)


 
Johnmen ©   (2007-04-14 19:15) [10]


> Anatoly Podgoretsky ©   (14.04.07 13:18) [4]
> чего бы? Новое слово в программирование?

Старое слово. В вычислении булевских выражений.


 
Anatoly Podgoretsky ©   (2007-04-14 19:26) [11]

> Johnmen  (14.04.2007 19:15:10)  [10]

Я что то не знаю такого, если первое выражение истинно, то для AND не надо вычислять второе.


 
Johnmen ©   (2007-04-14 21:34) [12]


> Anatoly Podgoretsky ©   (14.04.07 19:26) [11]
> > Johnmen  (14.04.2007 19:15:10)  [10]Я что то не знаю такого,
>  если первое выражение истинно, то для AND не надо вычислять
> второе.

Кто-то кого-то не понимает...
Я говорю о выражении A and B (как и указано в [0]).
Если первое выражение A истинно, то вычисляем B.


 
Anatoly Podgoretsky ©   (2007-04-14 22:31) [13]

Это ты говоришь и я тут с тобой солидарен, но автор говорит, что
Если первое выражение A истинно, то НЕ вычисляем B.


 
homm ©   (2007-04-14 22:31) [14]

> [12] Johnmen ©   (14.04.07 21:34)

Так, не спорь, [4] было написано автору вопроса, дабы указать на его ошибку, то что ты посто ранее сам на нее указал не удаляет ошибку из поста автора.


 
Johnmen ©   (2007-04-14 22:54) [15]

Да-да, я уже запутался, где чьи посты...:) Пойду спать...


 
Anatoly Podgoretsky ©   (2007-04-14 23:01) [16]

> Johnmen  (14.04.2007 22:54:15)  [15]

Лучше водки выпей


 
Johnmen ©   (2007-04-14 23:10) [17]


> Anatoly Podgoretsky ©   (14.04.07 23:01) [16]
> Лучше водки выпей

Я завязал...


 
Германн ©   (2007-04-15 01:23) [18]

Вот ну никогда не возникала у меня необходимость использовать Complete boolean evaluation! По-моему это что-то из разряда "соломку подстелить" или "первое приближение алгоритмизации к батонокидательству".


 
homm ©   (2007-04-15 01:28) [19]

> По-моему это что-то из разряда "соломку подстелить" или
> "первое приближение алгоритмизации к батонокидательству".

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


 
Германн ©   (2007-04-15 01:45) [20]


> Какое право ты имееш(ь) принежать тех(,) у кого такая необходимость
> возникала? Если после долгих раздумий не можеш(ь) понять зачем
> нужна такая штука, это совсем не значит что она для батонокидателей.
>  Ты не думал что это именно у тебя ума не хватило найти
> ей применение? А применение ей есть.
>

А я собс-но и не стараюсь обязательно найти применение всем значениям всех опций компиллятора. У меня нет времени на глупости.

> А применение ей есть.

Пример в студию, пожалуйста!

P.S.
Выделения в цитате - мои. Было бы очень смешно читать сей пост, если бы не было столь грустно :(


 
Sha ©   (2007-04-16 00:37) [21]

> homm ©   (15.04.07 01:28) [19]

Есть-то оно есть ))
Но если ты не мазохист, забудь про это сразу -
и спокойный сон по ночам гарантирован.


 
Asail   (2007-04-16 09:22) [22]


> Пример в студию, пожалуйста!

. . .
if IsCheckSomething1 and IsCheckSomthing2 then
 DoSomething1;
. . .

function IsCheckSomething1: Boolean;
begin
 DoSomething2;
end;

function IsCheckSomething2: Boolean;
begin
 DoSomething3;
end;


Если "Complete boolean evaluation" не выставленна, а IsCheckSomething1 возвращает true, то DoSomething3 не будет выполнена никогда (что может быть весьма не желательно).


 
Johnmen ©   (2007-04-16 09:26) [23]


> Если "Complete boolean evaluation" не выставленна, а IsCheckSomething1
> возвращает true, то DoSomething3 не будет выполнена никогда
> (что может быть весьма не желательно).

Если это "весьма не желательно", то м.б. стОит просто вызвать DoSomething3 и не гиморойничать с if ?


 
Asail   (2007-04-16 10:18) [24]

Не факт...
На пример, если надо выполнить DoSomething1 только в том случае если DoSomething2 и DoSomething3 обе выполнились успешно (вернули True), то приведенный в [22] пример ИМХО наиболее лаконичен и читабелен.


 
{RASkov}   (2007-04-16 11:31) [25]

> [24] Asail   (16.04.07 10:18)
> Если "Complete boolean evaluation" не выставленна, а IsCheckSomething1
> возвращает true, то DoSomething3 не будет выполнена никогда

Да вжизь не поверю, что:
if True and False then DoSomething1;
- при таком раскладе выполниться DoSomething1;
С OR вот такое может случиться...


 
{RASkov}   (2007-04-16 11:39) [26]

> [24] Asail   (16.04.07 10:18)

> Complete boolean evaluation

при отключенной опции вычисляются ВСЕ выражения до тех пор, пока вычисление дальше не перестанет быть значимым...
if A and B or C then...
здесь С может быть опущен(не вычеслен)....


 
Asail   (2007-04-16 11:45) [27]


> {RASkov}   (16.04.07 11:31) [25]

Ой туплю... Конечно-же OR...
Ну, да пример остается в силе (с небольшой поправкой: выполнить DoSomething1 только в том случае если или DoSomething2 или DoSomething3 или обе выполнились успешно.)


 
{RASkov}   (2007-04-16 12:04) [28]

> Ой туплю...

Да ладно...:) я с [5] и в [9] точ так-же ступил :)


 
Германн ©   (2007-04-16 16:03) [29]


> Asail   (16.04.07 09:22) [22]
>
>
> > Пример в студию, пожалуйста!
>
> . . .
> if IsCheckSomething1 and IsCheckSomthing2 then
>  DoSomething1;
>

Это не пример. Это теоретическая абстракция. :(


 
Asail   (2007-04-16 23:29) [30]

function A(Qry: TQuery): Boolean;
begin
 try
   Qry.ExecSQL;
   Result := False;
 except
   Result := True;
 end;
end;

procedure Test;
begin
 if A(Query1) or A(Query2) or A(Query3) then
  ShowMessage("Ошибка в запросах!");
end;


Вот конкретный пример, демонстрирующий проблему.
1) {$B-} При падении в Query1 - Query2 и Query3 даже не попытаются выполниться
2) {$B+} При падении в Query1 - Query2 и Query3 замечательно отработают.

Так-что учитывать сей нюанс весьма желательно :-).


 
{RASkov}   (2007-04-16 23:44) [31]

> [30] Asail   (16.04.07 23:29)

Это пример того, как НЕ надо делать :) И это уже ошибка программиста... имхо.


 
{RASkov}   (2007-04-16 23:47) [32]

Не видел ни одного примера где была необходимость включать Complete boolean evaluation.... Т.е. чёб без нее никак.


 
Asail   (2007-04-17 00:25) [33]


> {RASkov}   (16.04.07 23:47) [32]
> Не видел ни одного примера где была необходимость включать
> Complete boolean evaluation.... Т.е. чёб без нее никак.

И нет таких (чтоб необходимость)... Я просто показал конкретный пример, как можно нарваться на неприятности в совершенно тривиальном коде, по незнанию некоторых нюансов компиляции. И если бы не этот нюанс с директивой Complete boolean evaluation, то этот код был-бы вполне легитиный ...имхо тоже.


 
homm ©   (2007-04-17 00:37) [34]

> Это пример того, как НЕ надо делать :)

А ежели так? :)

{$B+}

function A(Qry: TQuery): Boolean;
begin
try
  Qry.ExecSQL;
  Result := False;
except
  Result := True;
end;
end;

procedure Test;
begin
if A(Query1) or A(Query2) or A(Query3) then
 ShowMessage("Ошибка в запросах!");
end;


 
Германн ©   (2007-04-17 01:06) [35]


> Asail   (16.04.07 23:29) [30]


>
> Вот конкретный пример, демонстрирующий проблему.
> 1) {$B-} При падении в Query1 - Query2 и Query3 даже не
> попытаются выполниться

Факт падения в Query1 очевидно должен рассматриваться как сбой программы, после которого результат дальнейшей работы непредсказуем. Зачем же тогда обязательно выполнять Query2 и Query3?

P.S.
Имхо. Единственно кто бы мог привести реальный пример необходимости Complete boolean evaluation, это "железячник", вроде меня. А у меня Вот ну никогда не возникала у меня необходимость использовать Complete boolean evaluation!
Имею мнение, хрен оспоришь :)



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

Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.037 c
15-1175790951
Pazitron_Brain
2007-04-05 20:35
2007.05.06
Извечный спор: микроядро или монолитное?


2-1176780365
Romm
2007-04-17 07:26
2007.05.06
Защита файла от удаления


15-1175945597
frame3
2007-04-07 15:33
2007.05.06
дипломная работа


6-1162829430
NetUser
2006-11-06 19:10
2007.05.06
Пакет IP


8-1156315403
Maxim new
2006-08-23 10:43
2007.05.06
Ассоциация файлов





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