- •Введение
- •Этапы решения задачи на эвм
- •Графический способ описания алгоритмов
- •Программирование на языке турбо-паскаль
- •Линейные программы
- •Структура программы
- •Описание переменных
- •Целые типы
- •Встроенные процедуры и функции для обработки данных целого типа
- •Вещественные типы
- •Встроенные функции для обработки данных вещественного типа
- •Оператор присваивания
- •Процедуры ввода и вывода
- •Пример линейной программы
- •Разветвляющияся программы
- •Условный оператор
- •Составной оператор
- •Логический тип
- •Оператор case
- •Оператор перехода
- •Пример разветвляющейся программы
- •Тип диапазон
- •Циклические программы
- •Оператор цикла с постусловием
- •Оператор цикла с предусловием
- •Оператор цикла со счетчиком
- •Некоторые простые типы
- •Перечисляемый тип
- •Символьный тип
- •Структурированные типы
- •Обработка массивов
- •Обработка одномерных массивов
- •Раздел типов
- •Примеры обработки одномерных массивов
- •Обработка двумерных массивов
- •ПримерЫ обработки двумерных массивов
- •Mножества
- •Строки символов
Оператор цикла с постусловием
В вышеприведенном примере как раз используется оператор цикла с постусловием. Синтаксис этого оператора следующий:
repeat <операторы> until <условие>
Здесь repeat, until–ключевые слова (перев. сангл. повторять и до тех пор пока);
<операторы>–любые операторы Турбо-Паскаля (их называют телом цикла);
<условие>–логическое выражение типа сравнения, используемое для выхода из цикла. Оператор работает следующим образом: сначала выполняются операторы, расположенные в теле цикла, затем вычисляется условие, и если получается истинное значение, то осуществляется выход из цикла. Если значение выражения ложно, то выполнение операторов тела цикла повторяется, а затем снова проверяется условие. И так, операторы тела цикла выполняются хотя бы раз, а потом все зависит от условия выхода из цикла. Очевидно, один из операторов тела цикла должен влиять на значение условного выражения, поскольку иначе цикл будет повторяться бесконечно.
Проиллюстрируем использование оператора цикла с постусловием на примере, в котором выводятся нечетные числа, меньшие 10. Схема алгоритма приведена на рис.10, а программа в примере – pr10.
Рис. 10

program pr10;
var i:integer;
begin
i:=1;
repeat
writeln(i);
i:=i+2;
until i>10;
end.
В результате работы этой программы будут напечатаны в столбик все нечетные числа от 1 до 9.
Оператор цикла с предусловием
В отличие от оператора цикла с постусловием оператор цикла с предусловием вычисляет и проверяет условие до выполнения операторов, составляющих тело цикла. В остальном эти операторы похожи. Синтаксис этого оператора следующий:
while <условие> do <оператор>;
Здесь while, do–ключевое слово (перев. сангл. пока и делать);
<оператор>–любой оператор Турбо-Паскаля, в том числе и составной (этот оператор называют телом цикла);
<условие>–логическое выражение типа сравнения, используемое для выхода из цикла.
Оператор работает следующим образом: сначала вычисляется условие, и если получается истинное значение, то выполняется оператор, являющийся телом цикла, а затем снова проверяется условие. Если значение условного выражения ложно, то осуществляется выход из цикла. Таким образом, если условие было ложно при первом входе в цикл, то операторы тела цикла не выполнятся ни разу. Очевидно, один из операторов тела цикла должен влиять на значение условного выражения, поскольку иначе цикл будет повторяться бесконечно. Например, следующий фрагмент программы будет печатать радостное сообщение бесконечное число раз, так как отсутствуют в цикле конструкции, изменяющие величину i:
i:=1;
while i<5 do
writeln('Доброе утро!');
Чтобы получить работающий фрагмент программы, добавим в тело цикла оператор, увеличивающий значение i:
i:=1;
while i<5 do
begin
writeln('Доброе утро!');
i:=i+1;
end;
end;
Проиллюстрируем использование оператора цикла с предусловием на примере pr11нахождения среднего арифметического последовательности чисел (схема алгоритма приведена на рис.11). Последовательность чисел вводится с клавиатуры и завершается стоп-кодом. Использование стоп-кода в данном случае состоит в том, что какое-то числовое значение заведомо исключается из входной последовательности и используется как стоп-код. Если мы заранее знаем, что -1у нас никогда не появится в последовательности, то можно -1использовать для указания ее конца.

Рис. 11
program pr11;
const stopcod=-1;
var c: integer;{количество вводимых чисел}
sum,{сумма вводимых чисел}
number:real;{вводимое число}
begin
sum:=0;
c:=0;
writeln('Введите пеpвое число последовательности:');
read(number);
while number<>stopcod do
begin
sum:=sum+number;
c:=c+1;
writeln('Введите cледующее число
последовательности:' );
read(number);
end;
if c=0 then writeln ('Сpеднее значение pавно нулю')
else writeln ('Сpеднее значение pавно ',sum/c);
end.
Необходимо отметить, что перед первым вхождением в цикл whileзначениеnumberдолжно быть прочитано, иначеnumberне будет определено при первой проверке условияwhile. Если первым вводимым числом оказался стоп-код, то тело цикла не выполнится ни разу, счетчиксостанется равным нулю, и чтобы не произошло деление на нуль используется условный оператор.
Кроме того, в этой программе впервые появился раздел констант. Константа stopcod, в отличии от переменной, не может получить новое значение в программе, и тип константы определяется её видом.
Следующий пример иллюстрирует работу оператора цикла с предусловием на задаче, вычисляющей c точностью е сумму ряда:
s=1+1/2+1/3+1/4+... .
Вычислить сумму ряда с точностью е –это значит завершить суммирование членов ряда тогда, когда очередной член ряда окажется меньшеепо абсолютной величине. Схема алгоритма приведена на рис.12, а программа – в примереpr12.
program pr12;
var
i:integer;
sum,{сумма pяда}
e,{точность}
k:real;{очеpедной член pяда}
begin
sum:=0;
i:=1;
writeln('Введите точность:');
read(e);
k:=1/i;
while k>e do {пока очеpедной член pяда больше точности}
begin
sum:=sum+k;
i:=i+1;
k:=1/i;
end;
writeln ('Сумма pяда pавна ', sum);
end.
Рис. 12

