| Сьогодні | Разом | |
| Відвідувань | 151 | 5382730 |
| Авторізацій | 20 | 432086 |
| Користувачів | 18 | 2708 |
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) на наличие самого элемента, и только в случае положительного результата такой проверки, проверить знак этого элемента.