
- •Р.К. Ахмадулин технология программирования
- •Оглавление
- •§1. Основные понятия
- •Основные символы языка Паскаль
- •Элементарные конструкции языка Паскаль
- •Примеры записи чисел и выражений на языке Паскаль
- •Вопросы для самопроверки
- •§2. Типы данных
- •Целые типы
- •Вещественные типы
- •Символьный тип
- •Логический тип
- •Скалярные типы, определяемые пользователем
- •Вопросы для самопроверки
- •§3. Операции и выражения
- •Приоритет операций и отношений в выражениях
- •Стандартные (встроенные) функции
- •Вопросы для самопроверки
- •§4. Структура программы
- •Комментарии
- •Директивы компилятора
- •Оформление исходного текста
- •Вопросы для самопроверки
- •§5. Переменные и константы. Оператор присваивания
- •Понятие константы
- •Понятие переменной
- •Оператор присваивания
- •Совместимость типов данных
- •Понятие типизированной константы
- •Вопросы для самопроверки
- •§6. Процедуры ввода и вывода
- •Процедуры вывода
- •Форматированный вывод
- •Процедуры ввода
- •Вопросы для самопроверки
- •§7. Условный оператор и оператор выбора. Оператор перехода
- •Условный оператор if
- •Понятие составного оператора
- •Оператор выбора
- •Оператор перехода
- •Вопросы для самопроверки
- •§8. Операторы цикла
- •Циклы с заданным числом итераций
- •Циклы с предусловием
- •Циклы с постусловием
- •Вопросы для самопроверки
- •§9. Пример использования циклов
- •Вычисление факториала
- •Вычисление суммы по заданной формуле
- •Вычисление суммы по формуле с заданной точностью
- •Вычисление максимального элемента последовательности
- •Вычисление длины последовательности элементов
- •Вопросы для самопроверки
- •§10. Массивы
- •Описание массива
- •Обращение к элементам массива
- •Многомерные массивы
- •Допустимые операции с массивами
- •Инициализация массива
- •Вопросы для самопроверки
- •§11. Алгоритмы сортировки
- •Сортировка выбором
- •Сортировка вставкой
- •Пузырьковая сортировка
- •Улучшенные сортировки
- •Вопросы для самопроверки
- •§12. Строковый тип
- •Описание строковых переменных
- •Операции над строками
- •Процедуры и функции для работы со строками
- •Вопросы для самопроверки
- •§13. Записи
- •Объявление записи
- •Обращение к записям
- •Оператор присоединения with
- •Записи с вариантами
- •Инициализация записи
- •Вопросы для самопроверки
- •§14. Множества
- •Описание множеств
- •Операции над множествами
- •Пример использования множеств
- •Множества как типизированная константы
- •Вопросы для самопроверки
- •§15. Процедуры и функции
- •Понятие процедуры и функции
- •Структура процедуры
- •Структура функции
- •Формальные параметры
- •Глобальные и локальные объекты
- •Вопросы для самопроверки
- •§16. Модули
- •Понятие модуля
- •Стандартные модули в Турбо Паскаль
- •Подключение модулей
- •Структура модуля
- •Вопросы для самопроверки
- •§17. Файлы
- •Понятие файла
- •Процедуры и функции для работы с файлами
- •Понятие буфера ввода-вывода
- •Вопросы для самопроверки
- •§18. Типизированные файлы
- •Описание типизированных файлов
- •Операции над типизированными файлами
- •Последовательный и прямой доступ
- •Вопросы для самопроверки
- •§20. Текстовые файлы
- •Описание типизированных файлов
- •Чтение и запись
- •Конец строки и конец файла
- •Дополнительные процедуры для работы с текстовыми файлами
- •Файлы Input и Output
- •Вопросы для самопроверки
- •§21. Ссылки и указатели
- •Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Выделение и освобождение динамической памяти
- •Вопросы для самопроверки
- •Рекомендуемая литература
- •Технология программирования
- •625000, Тюмень, ул. Володарского, 38
- •625039, Тюмень, ул. Киевская, 52
Циклы с предусловием
Оператор цикла с предусловием while вызывает повторяющееся выполнение оператора до тех пор, пока некоторое условие принимает истинное значение.
Записывается цикл while следующим образом:
WHILE <логическое выражение> DO <оператор>;
Пример: возводить x в квадрат, пока он не станет больше 1000.
while x<=1000 do x:=sqr(x);
Логическое выражение вычисляется до того, как Оператор будет выполнен. Если оно возвращает значение Истина, то выполняется Оператор и вновь вычисляется значение Логического выражения.
Если Логическое выражение возвращает Ложь, то выполнение оператора while прекращается.
Оператор выполняется повторно до тех пор, пока выражение принимает значение Тruе. Если выражение с самого начала принимает значение False, то оператор, содержащийся внутри оператора цикла с предусловием, не выполняется ни разу.
Пример: что будет напечатано на экране после выполнения следующих операторов:
s:=0;
i:=1;
while i<3 do
begin
s:=s+i;
i:=i+1
end;
writeln(s);
Рассмотрим значения переменных на каждом шаге.
Шаг |
s |
i |
Описание |
1 |
0 |
|
Присвоили в s ноль |
2 |
0 |
1 |
Присвоили в i единицу |
3 |
1 |
2 |
Т.к. 1 (значение i) меньше 3, то выполняется тело цикла: в s записывается сумма текущих значений s и i (0+1=1), а значение переменной i увеличивается на 1 (1+1=2) |
4 |
3 |
3 |
Т.к. 2 меньше, чем 3, то вновь выполняется тело цикла: записываем новые значения в s и i |
Далее результатом выражения цикла будет False, поэтому тело цикла более не выполняется, а управление передается следующему оператору – процедуре вывода на экран. Значение переменной s равно 3, следовательно, на экран выведется 3.
Пример: вычислить сумму чисел от 1 до 100.
i:=1;
sum:=0;
while i<=100 do
begin
sum:=sum+i;
i:=i+1; { или inc(i); }
end;
Циклы с постусловием
Оператор цикла с постусловием repeat вызывает повторяющееся выполнение оператора до тех пор, пока некоторое условие не примет истинное значение.
Записывается цикл repeat следующим образом:
REPEAT <операторы> UNTIL <логическое выражение>;
Пример: возводить x в квадрат, пока он не станет больше 1000.
repeat x:=sqr(x) until x>1000;
Между ключевыми словами repeat и until могут быть записаны сразу несколько операторов. Операторы выполняются последовательно до тех пор, пока Логическое выражение не примет значение Истина. Последовательность операторов выполняется, по крайней мере, один раз, т.к. логическое выражение вычисляется после выполнения операторов.
Пример: что будет напечатано на экране после выполнения следующих операторов:
s:=0;
i:=1;
repeat
s:=s+i;
i:=i+1
until i>=3;
writeln(s);
Рассмотрим значения переменных на каждом шаге.
Шаг |
s |
i |
Описание |
1 |
0 |
|
Присвоили в s ноль |
2 |
0 |
1 |
Присвоили в i единицу |
3 |
1 |
2 |
В s записывается сумма текущих значений s и i (0+1=1), а значение переменной i увеличивается на 1 (1+1=2). После этого вычисляется результат выражения: при i=2 результат равен False, следовательно, тело цикла выполнится еще раз |
4 |
3 |
3 |
Вновь выполняется тело цикла: записываем новые значения в s и i. Затем происходит проверка: на этот раз выражение принимает значение Истина, а это значит, что тело цикла Repeat более выполняться не будет. |
После цикла управление передается следующему оператору – процедуре вывода на экран. Значение переменной s равно 3, следовательно, на экран выведется 3.
Пример: вычислить сумму чисел от 1 до 100.
i:=0;
sum:=0;
repeat
inc(i);
sum:=sum+i;
until i=100;
Имеется три основных различия между циклом while и циклом repeat.
Во-первых, операторы в цикле repeat всегда выполняются хотя бы один раз, поскольку проверка выражения осуществляется не сразу после ключевого слова repeat. Наоборот, в цикл while, если выражение изначально имеет значение False, то пропускается все тело цикла.
Во-вторых, цикл repeat выполняется до тех пор, пока выражение не примет значение Тrue; в отличие от него цикл while выполняется, пока выражение имеет значение Тrue. Это означает, что следует внимательно заменять один тип цикла на другой.
В третьих, цикл repeat может содержать несколько операторов, не образующих составной оператор. Заметьте, что в последней программе не используется begin..end, в то время как в варианте с циклом while это имело место.