Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Офф-топ

Страница: 1 |

 

  Вопрос: One moment please Добавлено: 29.01.05 15:18  

Автор вопроса:  freeloader  | Web-сайт: freeloader.folder-pro.net | ICQ: 50804884 
Недавно отыскал на wasm.ru статью "Идентификация IF...THEN...ELSE" в разделе исследование программ, автор статьи Крисс Касперски
Все везде было понятно до сих пор:

IF a==b THEN check_null
IF a!=c THEN continue
   check_null:
IF a==0 THEN continue
...// код условия
   continue:
...// прочий код

который в собранном виде выглядит как:
if (a==0) || (a==c) & (a!=0)

Сколько нидумал, ни как не мог дойти до такого же вида, получалось только вот это:
if (a==b) & (a!=0) || (a==c) & (a!=0)

Теперь поясню, при первой проверке на равенство a==b если истина то прыгаем на check_null, где идет еще одна проверка на a==0, нам нужен код условия, поэтому получается так: if (a==b) & (a!=0), если а==b ложно, то идет проверка на неравенство a!=c-если условие не удовлетворяется, то идет
опять тот же a==0, тем самым, если все это дело собрать, то получается вот что:
if (a==b) & (a!=0) || (a==c) & (a!=0),
Крис Касперски написал неверно?(с трудом верится) или же я что то не так понимаю?

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 30.01.05 08:39
А бинарные деревья он для кого рисовал? Там как раз и объясняется, как сворачивать сложные логические условия, получающиеся прямым просмотром. И, кстати, логический And в Си и в ассемблере &&, а не &.
Мне лень было искать конкретно, где Касперски такое написал, но собирается листинг, конечно, не так, потому что если a=0, тогда условие всегда неверное, а в собранном варианте всегда верное.

Ответить

Номер ответа: 2
Автор ответа:
 freeloader



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #2
Добавлено: 31.01.05 01:57

void CIfThenDlg::OnOK()
{
// TODO: Add extra validation here

int a;
int b;
int c;
    
b = 0;
    a = 0;
c = 3;
    
if (((a == b) || (a == c)) && (a != 0)){
        this->MessageBox("OK";);
}
    
}

Не поленись и посмотри, что как бы там не стало мы всегда делаем проверку на равность нулю!!! И на картинке это изумительно видно...
//Вот сверху то, что у меня получилось, помоему должно быть так...
или не так?
так мне ктонить обяъяснит ошибку мою? если она у меня есть? :)

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 31.01.05 07:42
У меня получилось if(a!=0 && (a==b || a==c)) expresssion;

Ответить

Номер ответа: 4
Автор ответа:
 freeloader



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #4
Добавлено: 31.01.05 08:48
Вот и у меня также...
Выходит что у Крисс Касперски неверно :)

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 31.01.05 10:10
Напиши ему, он обрадуется

Ответить

Номер ответа: 6
Автор ответа:
 freeloader



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #6
Добавлено: 31.01.05 10:33
Обязательно, только не для того что бы он обрадовался, а что бы больше никто типо таких как я не попался на этом ;)

Ответить

Номер ответа: 7
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 31.01.05 15:45
Ну дык поспеши

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам