- •21. Операторы языка. Операторы циклов. Вложенные циклы.
- •22. Операторы языка. Операторы циклов. Циклы с предусловием и постусловием.
- •Оператор цикла с постусловием repeat…until
- •23. Операторы циклов. Операторы break. Оперотор continue.
- •24. Подпрограммы. Структура описания подпрограмм.
- •25. Описание заголовка процедуры (Параметры-значения, параметры-переменные, параметры-константы и входные параметры).
- •26. Функции. Глобальные и локальные переменные. Параметры, имеющие значения по умолчанию.
- •27. Строковые типы. Строковые константы.
- •28. Строковые выражения и стандартные процедуры.
- •29. Тип Variant.
- •30. Структурированные типы. Массивы. Статические массивы.
- •31. Структурированные типы. Динамические массивы. Объявление динамического массива.
- •32. Множества. Операции над множествами.
- •Операции над множествами
- •33. Записи. Доступ к полям записи. Оператор присоединения.
- •34. Файлы. Понятие файла. Последовательность работы с файлами. Описание файловых переменных. Стандартные подпрограммы для доступа к файлам.
- •35. Файлы. Текстовые файлы.
- •36. Файлы. Типизированные файлы.
- •37. Файлы. Нетипизированные файлы.
Оператор цикла с постусловием repeat…until
Применяется для организации циклов с неизвестным заранее числом повторений, логика которых предполагает выполнение цикла до тех пор пока не станет истинным некоторое условие.
Синтаксис оператора REPEAT…UNTIL:
REPEAT Оператор1; Оператор2; ··· ОператорN; UNTIL Условие;
Операторы (Оператор1, Оператор2, … ОператорN), образующие тело цикла, будут выполнятся циклически, до тех пор пока значение “Условия” не станет равно TRUE (истина). Иными словами, в цикле REPEAT…UNTIL условием продолжения итераций является невыполнение “Условия” (его значение FASLE – ложь).
Условие цикла может быть логической константой, переменной или логическим выражением.
Оператор REPEAT…UNTIL имеет две части: начальную (слово REPEAT) и завершающую (слово UNTIL), которые охватывают группу операторов, составляющих тело цикла. Поэтому необходимости в использовании составного оператора для построения тела цикла из нескольких простых операторов не возникает.
Принципиальное отличие оператора REPEAT…UNTIL от оператора WHILE в том, что проверка условия производится не перед началом выполнения тела цикла, а после его выполнения, когда решается вопрос, повторить ли еще раз действия. Поэтому тело цикла всегда выполняется по крайней мере один раз.
Пример 1. Проверка ввода
VAR N : Integer; BEGIN . . . REPEAT Write(‘Введите целое число от 0 до 10: ’); ReadLn(N); UNTIL (N>=0) and (N<=10); . . . END.
В этом примере программа будет запрашивать ввод числа до тех пор, пока пользователь не введет “правильное” число.
23. Операторы циклов. Операторы break. Оперотор continue.
Процедура BREAK применяется для досрочного прекращения циклов WHILE, REPEAT…UNTIL и FOR.
Пример: Определение номера первого нулевого элемента в массиве А
VAR i, num : Integer; A : array[1..10] of Integer; BEGIN . . . { Ввод элементов массива А } num := 0; FOR i:=1 TO 10 DO { Цикл для i от 1 до 10 } IF A[i]=0 THEN begin { если найден нулевой элемент } num := i; { запоминаем его номер } BREAK { прекращаем цикл } end; IF num <> 0 THEN WriteLn(num) ELSE WriteLn(‘Нулевых элементов нет’); END.
Процедура CONTINUE вызывает переход к следующей циклической итерации игнорируя расположенные ниже операторы, составляющие тело цикла.
Пример: Определение наибольшего общего делителя (НОД) двух чисел
VAR CommDiv, { кандидат в НОД } num1, { первое число } num2 : Integer; { второе число } BEGIN Write(‘Введите первое число: ’); ReadLn(num1); Write(‘Введите второе число: ’); ReadLn(num2); FOR CommDiv := num1 DOWNTO 1 DO begin IF (num2 mod CommDiv)<> 0 THEN CONTINUE; IF (num1 mod CommDiv) = 0 THEN begin WriteLn(‘Наибольший общий делитель: ’, CommDiv); BREAK end {if} end {for} END.
В примере применен цикл FOR, в котором по убывающий перебираются возможные кандидаты в наибольший общий делитель. Критерий делимости – равенство нулю остатка от деления (операция mod). Если кандидат (значение переменной CoomDiv) не является делителем числа num2, по команде CONTINUE начинается следующий проход цикла, а операторы, оставшиеся в теле цикла, не выполняются. Если число (CommDiv) оказывается делителем числа num2 и num1, что проверяется вторым оператором IF тела цикла, значит, оно – общий делитель. А поскольку перебор идет от больших к меньшим значениям, первый найденный общий делитель – наибольший. Выводим его на печать и прерываем цикл командой BREAK.