Интересует такая штука. Если есть выражение:
C++ (Qt)
if ( condition1 && condition2 ) { do_something(); }
то правильно ли я понимаю, что
в любом случае проверяются оба условия - condition1 и condition2?
А в этом случае, где вместо AND будет OR:
C++ (Qt)
if ( condition1 || condition2 ) { do_something(); }
будет ли проверяться второе условие, если первое = true?
Это к тому, что я нашел
ресурс, где объясняется работа поисковых алгоритмов (Boyer-Moore algorithm). В функции suffixes(char *x, int m, int *suff) используется переменная 'f', но она не инициализируется. Написал авторам, они ответили, что все правильно, т.к. по в первом цикле i = m-2, а g = m-1, и поэтому i<g, и f станет равной i. Но че-то я не доганаяю. Вот код:
C++ (Qt)
void suffixes(char *x, int m, int *suff) {
int f, g, i;
suff[m - 1] = m;
g = m - 1;
for (i = m - 2; i >= 0; --i) {
if (i > g && suff[i + m - 1 - f] < i - g)
suff[i] = suff[i + m - 1 - f];
else {
if (i < g)
g = i;
f = i;
while (g >= 0 && x[g] == x[g + m - 1 - f])
--g;
suff[i] = f - g;
}
}
}
Первое встречающееся условие
if (i > g && suff[i + m - 1 - f] < i - g)
сработает непонятно, если проверяются оба выражение, т.к. во втором 'f' не инициализирована.