Страница: 1 |
Страница: 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-сайт:
Профиль | | #1
Добавлено: 30.01.05 08:39
А бинарные деревья он для кого рисовал? Там как раз и объясняется, как сворачивать сложные логические условия, получающиеся прямым просмотром. И, кстати, логический And в Си и в ассемблере &&, а не &.
Мне лень было искать конкретно, где Касперски такое написал, но собирается листинг, конечно, не так, потому что если a=0, тогда условие всегда неверное, а в собранном варианте всегда верное.
Номер ответа: 2
Автор ответа:
freeloader
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 50804884
Вопросов: 72
Ответов: 642
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #3
Добавлено: 31.01.05 07:42
У меня получилось if(a!=0 && (a==b || a==c)) expresssion;
Номер ответа: 4
Автор ответа:
freeloader
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 50804884
Вопросов: 72
Ответов: 642
Web-сайт:
Профиль | | #4
Добавлено: 31.01.05 08:48
Вот и у меня также...
Выходит что у Крисс Касперски неверно
Номер ответа: 5
Автор ответа:
Sharp
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #5
Добавлено: 31.01.05 10:10
Напиши ему, он обрадуется
Номер ответа: 6
Автор ответа:
freeloader
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 50804884
Вопросов: 72
Ответов: 642
Web-сайт:
Профиль | | #6
Добавлено: 31.01.05 10:33
Обязательно, только не для того что бы он обрадовался, а что бы больше никто типо таких как я не попался на этом
Номер ответа: 7
Автор ответа:
Sharp
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #7
Добавлено: 31.01.05 15:45
Ну дык поспеши