Сьогодні | Разом | |
Відвідувань | 13 | 5257411 |
Авторізацій | 1 | 420118 |
Користувачів | 1 | 2680 |
17. Оператор цикла while
while <условие> do <тело цикла>;Цикл будет выполнятся до тех пора, пока условие выполняется (результат логического выражения равен true). Поэтому условие в цикле while иногда называют условием входа.
i := 1; while (i <= 100) do begin writeln(i); i := i + 1; end;У нас появилась необходимость использовать операторные скобки begin end, так как тело цикла состоит из более, чем одного действия (оператора). Напомним, что группа операторов, объединенных операторными скобками называется составной оператор и рассматривается компилятором, как один оператор.
18. Чтение последовательности до нуля
var a: longint; // Значение текущего элемента n: longint; // Количество элементов begin // Читаем первое значение из входного потока read(a); // Обнуляем счетчик элементов n := 0; // Пока мы не прочтем нулевое значение, повторяем while a <> 0 do begin n := n + 1; // Увеличить счетчик на единицу read(a); // Читаем следующее значение end; // Выводим результат writeln(n) end.
19. Индекс первого положительного элемента
i := 1; while a[i] <= 0 do i := i + 1;Мы начинаем с первого элемента, проверяем его знак, и если это не положительный - переходим к следующему элементу.
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) на наличие самого элемента, и только в случае положительного результата такой проверки, проверить знак этого элемента.