- •Раздел 3 Программирование
- •1 Структура программы на языке Pascal
- •2 Операторы языка Pascal
- •2.1 Оператор присваивания
- •2.2 Операторы ввода данных
- •2.3 Операторы вывода данных
- •3 Стандартные функции Pascal
- •3.1 Примеры составления линейной программы
- •4 Контрольные вопросы
- •5 Задание
- •Содержание отчета
- •1 Условный оператор if
- •2 Оператор варианта case
- •3 Контрольные вопросы
- •4 Задание
- •4.1 Задание по условному оператору
- •4.2 Задание по оператору варианта
- •5 Содержание отчета
- •1 Оператор цикла с постусловием
- •2 Оператор цикла с предусловием
- •3 Оператор цикла с параметром
- •4 Контрольные вопросы
- •5 Задание
- •6 Содержание отчета
- •1 Итерационные циклы
- •2 Программа итерационного цикла
- •3 Контрольные вопросы
- •4 Задание
- •5 Содержание отчета
- •1 Краткая теория
- •1 Программа "цикл в цикле"
- •2 Программа "цикл и ветвление"
- •3 Программа "цикл в цикле и ветвление"
- •4 Контрольные вопросы
- •5 Задания
- •6 Содержание отчета
- •1 Одномерные и многомерные массивы
- •2 Обработка массивов
- •3 Контрольные вопросы
- •4 Задания
- •5 Содержание отчета
- •1 Описание функций
- •2 Параметры функции
- •2.1 Параметры-значения
- •2.2 Параметры-переменные
- •3 Контрольные вопросы
- •4 Задание
- •5 Содержание отчета
- •1 Формат описания процедуры
- •2 Параметры процедуры
- •3 Контрольные вопросы
- •4 Задание
- •5 Содержание отчета
- •1 Средства и методы отладки программ
- •1.1 Понятие отладки
- •1.2 Разновидности ошибок
- •1.2.1 Ошибки этапа компиляции
- •1.2.2 Ошибки этапа выполнения
- •1.2.3 Логические ошибки
- •2 Выполнение программы по шагам и трассировка
- •2.1 Выполнение по шагам и трассировка
- •2.2 Остановка выполнения
- •2.3 Отслеживание и модификация
- •2.4 Понятие отладочного шага
- •2.5 Выполнение программы по шагам
- •2.6 Трассировка программы
- •2.7 Выполнение больших фрагментов
- •3 Отладочные выражения, точки останова
- •3.1 Понятие отладочного выражения
- •3.2 Просмотр выражений
- •3.2.1 Добавление просматриваемого выражения
- •3.2.2 Редактирование просматриваемых выражений
- •3.3 Вычисление и модификация
- •3.3.1 Вычисление выражений
- •3.3.2 Модификация переменных
- •3.4 Использование точек останова
- •3.5 Задание точек останова
- •3.6 Отмена точки останова
- •3.7 Модификация точек останова
- •3.8 Создание условной точки останова
- •5.2 Установка точек останова
- •6 Содержание отчета
1 Оператор цикла с постусловием
Оператор цикла с постусловием начинается со служебного слова repeat, заканчивается после выполнения условия, следующего за служебным словом until.
Формат оператора:
repeat
<последовательность операторов>;
until <выражение>;
Результат выражения должен быть булевского типа. Операторы, заключенные между ключевыми словами repeat и until, выполняются последовательно до тех пор, пока результат выражения не примет значение True (т.е. если выражение есть false, то цикл повторяется). Последовательность операторов выполнится по крайней мере один раз, поскольку проверка - вычисление
139
выражения производится в конце цикла, после каждого выполнения последовательности операторов.
При использовании оператора repeat возможно зацикливание программы. Это может произойти, если проверяемое выражение постоянно сохраняет значение False.
Пример 1
repeat
K := I mod J; {остаток от деления I на J}
I := J;
J := K;
until J = 0;
Цикл выполняется ДО тех пор, пока J (остаток) не станет равно нулю.
Пример 2
repeat
Write('Введите значение (0..9):');
Readln(I);
until (I >= 0) and (I <= 9);
Цикл выполняется ДО тех пор, пока 0<=I<=9.
2 Оператор цикла с предусловием
Оператор цикла с предусловием начинается с ключевого слова while и содержит в себе выражение, которое управляет повторным выполнением оператора тела цикла. Оператор тела цикла может быть составным оператором.
Формат оператора:
while <выражение> do
<оператор>;
Поскольку проверка условия на повторение цикла производится в начале, до тела цикла, оператор цикла while может быть выполнен ни разу, если выражение проверки примет значение False. Выражение, с помощью которого осуществляется управление повторением оператора, должно иметь булевский тип. Внутренний оператор выполняется повторно до тех пор, пока выражение имеет значение Тruе. Если выражение с самого начала принимает значение False, то цикл не выполняется ни разу.
Применяя оператор while, также следует соблюдать осторожность, чтобы не допускать зацикливания.
Пример 3 Нахождение факториала числа Х.
Fact:=1;
140
while X<=N do
begin
Fact:=Fact*X;
X:=X+1;
end;
Пример 4 Генерация случайного числа, не равного 10.
while I <> 10 do
I:=Random(10) {функция Random(10) генерирует случайное
число 0<=I<10}
3 Оператор цикла с параметром
Оператор цикла с параметром начинается со слова for и вызывает повторяющееся выполнение оператора цикла пока переменной цикла присваивается последовательно возрастающие или убывающие значения. Оператор тела цикла может быть составным оператором.
Оператор for имеет два варианта записи:
- инкрементный (с возрастанием переменной цикла):
for <переменная цикла>:=<начало> to <конец> do
<оператор>;
- декрементный (с убыванием переменной цикла):
for <переменная цикла>:=<начало> downto <конец> do
<оператор>;
В качестве переменной цикла должна использоваться переменная порядкового типа, объявленная в том блоке, где содержится оператор for. Параметры <начало> и <конец> задаются выражениями, типы которых должны быть совместимы по присваиванию с типом переменной цикла. Когда начинает выполняться оператор for, начальное и конечное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора for. Оператор, который содержится в теле цикла, выполняется один раз для каждого значения в диапазоне между начальным и конечным значением.
Переменная цикла всегда инициализируется начальным значением.
Когда работает оператор for, значение переменной цикла (счетчика циклов) увеличивается (в случае инкрементного варианта) при каждом повторении на единицу. Если начальное значение превышает конечное значение, то содержащийся в теле цикла оператор не выполнятся. (Операторы в теле цикла не выполняются ни разу, если конечное значение меньше начального).
В случае декрементного варианта цикла значение переменной цикла
141
уменьшается при каждом повторении на единицу. Если начальное значение в таком операторе меньше, чем конечное значение, то содержащийся в теле оператора цикла оператор не выполнятся. (Операторы в теле цикла не выполняются ни разу, если конечное значение больше начального).
Если оператор, содержащийся в теле цикла for, изменяет значение управляющей переменной, то это является ошибкой. После выполнения оператора for значение управляющей переменной становится неопределенным.
Пример 5 Инкрементный вариант
Вычислить сумму первых N членов разложения в ряд экспонен-
ты ex ,где N и X – заданные числа соответственно целого и вещественного типа.
Экспонента раскладывается в ряд по формуле
Напишем следующий фрагмент программы:
Sum:=1;
Prod:=1;
Fact:=1; {Начальные значения}
for I:=1 to N-1 do
begin
Fact:=Fact*I; {Факториал I}
Prod:=Prod*X; {X в степени I}
{Сумма (I+1) члена разложения}
Sum:= Sum + Prod/Fact;
end;
Пример 6 Декрементный вариант
Обратный отсчет времени при запуске ракет:
WriteLn(‘Начинается обратный отсчет времени’);
for Seconds:=10 downto 1 do
WriteLn(‘Осталось’,Seconds,’ сек.’);
WriteLn(‘Пуск !’);
Программа выведет числа 10, 9,…, 1 и слово "Пуск".