Сьогодні | Разом | |
Відвідувань | 340 | 5266040 |
Авторізацій | 49 | 421854 |
Користувачів | 40 | 2716 |
20. Индекс первого положительного элемента, но его может и не быть
i := 1; while (i <= n) and (a[i] <= 0) do i := i + 1;Возникает вопрос: а имеет ли значение в каком порядке записывать простые условия, формируя составное? Что будет, если написать такой вариант решения задачи?
i := 1; // Внимание! while (a[i] <= 0) and (i <= n) do // Это плохой алгоритм, i := i + 1; // может привести к фатальной ошибкеПредположим, что положительного элемента в массиве не существует. В этом случае, наступит момент, когда значение переменной i станет равным n + 1, и при этом значении i будет попытка вычислить значение логического выражения оператором while: (a[i] <= 0) and (i <= n), что приведет к ошибке, так как i + 1 элемента массива не существует. Поэтому, правильно будет проверить первым условие (i <= n) на наличие самого элемента, и только в случае положительного результата такой проверки, проверить знак этого элемента.