- •Содержание
- •1Алгоритмы линейных структур
- •2 Циклы
- •Введение
- •1 Алгоритмы линейных структур
- •1.1 Этапы разработки программы
- •1.2 Основные понятия
- •1.3 Основная структура программы
- •1.4 Алфавит языка
- •1.5 Идентификаторы
- •1.6 Константы
- •1.7 Понятие переменной Типы
- •1.8 Оператор присваивания Арифметические выражения
- •1.9 Операторы ввода и вывода информации
- •1.10 Практические задачи
- •1.11 Примеры решения задач
- •2 Циклы
- •2.1 Цикл с предусловием
- •Цикл с постусловием
- •Цикл со счетчиком
- •2.2 Задачи
- •2.3 Примеры
- •3 Немного об алгоритмах Алгоритм Кнута - Морриса - Пратта
- •Алгоритм Бойера – Мура
- •Алгоритм Рабина
- •Алгоритмы сортировки
- •Метод пузырька.
- •Сортировка выбором
- •Метод Шелла
- •Метод Хoopа
- •3.1 Разветвляющиеся алгоритмы
- •3.2 Задачи Свойства и виды треугольников (задачи 1-4)
- •Свойства и виды четырехугольников (задачи 5, 6)
- •Каким будет значение переменной а после выполнения фрагмента программы с составным оператором?
- •4 Массивы
- •4.1 Объявление массива
- •4.2 Действия над массивами
- •4.3 Вывод массива
- •4.4 Ввод массива
- •4.5 Сортировка массива
- •4.6 Поиск в массиве
- •4.7 Поиск минимального (максимального) элемента массива
- •4.8 Многомерные массивы
- •4.9 Ошибки при использовании массивов
- •4.10 Практические задачи
- •5 Множества
- •5.1 Описание типа множество
- •5.2 Операции над множествами
- •5.3 Группы операций
- •5.4 Упражнения
- •5.5 Задачи Тема: Множества
- •6 Записи
- •6.1 Понятие записи
- •6.2 Оператор присоединения With ... Do
- •6.3 Вариантные записи
- •6.4 Работа с файлами записей
- •6.5 Задачи
- •7 Файлы
- •7.1 Работа с файлами
- •7.2 Текстовые файлы
- •7.3 Типизированные файлы
- •7.4 Нетипизированные файлы
- •7.5 Задачи
- •8 Графика
- •8.1 Графика в Турбо Паскале
- •8.2 Базовые процедуры и функции
- •Процедуры модуля Graph
- •Функции модуля Graph
- •8.3 Экран и окно в графическом режиме
- •8.4 Вывод простейших фигур
- •8.5 Графические процедуры
- •8.6 Построение прямоугольников
- •8.7 Построение многоугольников
- •8.8 Построение дуг и окружностей
- •8.9 Работа с текстом
- •8.10 Построение графиков функций
- •8.11 Циклы в графике. Построение случайных процессов
- •8.12 Создание иллюзии движения
- •Задания
- •Контрольные тесты
- •1. Программирование алгоритмов линейных структур
- •2. Программирование алгоритмов разветвляющейся структуры
- •3. Программирование алгоритмов циклических структур
- •4. Массивы
- •5. Множества
- •6. Записи
- •7. Файлы
- •8. Графика
Цикл с постусловием
Следующая разновидность цикла — цикл с постусловием. Рассмотрим эту разновидность:
repeat
группа операторов
until условие;
Здесь вначале выполняется группа операторов, а потом производится проверка, следует ли вновь повторить эту группу. Если условие ложно, выполнение цикла повторяется, иначе — заканчивается.
Решение предыдущей задачи о суммировании с использованием цикла repeat... until выглядит так:
program summa2; const
n = 100; var
i : Integer;
sum : Real;
begin
sum := 0;
i :=1;
repeat
sum := sum + 1 / i;
i := i + 1; {i управляет повторением цикла}
until i > n;
WriteLn('сумма ', n, ' элементов = ', sum:10:5);
end.
Здесь выполнение цикла происходит следующим образом:
вначале i = 1 и sum = 0 + 1;
i увеличивается на 1: i = 2;
условие i > 100 ложно, поэтому выполнение цикла повторяется;
значение суммы' изменяется: Siint = 1 + 1 / 2;
i увеличивается на 1: i = 2 + 1;
условие i > 100 ложно, цикл повторяется;
цикл повторяется, пока не окажется i = 100 + 1, а значение суммы
sum = 1 + 1/2 +...+ 1 / 100;
условие i > 100 истинно, цикл завершен.
Слова repeat и until являются зарезервированными, как, впрочем, и слово while. В отличие от цикла while операторы внутри цикла repeat выполняются хотя бы один раз, в то время как в цикле whilе они могут не выполниться ни разу.
Цикл со счетчиком
Цикл со счетчиком имеет следующий вид:
for i := начальное_значение to конечное_значение do ... оператор;
Здесь переменная i, называемая управляющей переменной цикла for (или его счетчиком), является произвольным идентификатором, который объявляется как переменная целого (чаще всего) типа. Она может быть также логической или символьной (о символьном типе речь пойдет дальше). Допускаются и некоторые другие типы, но этот случай мы рассматривать не будем.
При выполнении оператора for сначала вычисляется значение выражения начальное значение, затем вычисляется значение выражения конечное значение, далее управляющая переменная цикла последовательно пробегает все значения от начального до конечного. В том случае, когда начальное значение оказывается больше, конечного значения, тело цикла не будет выполняться вовсе. Начальное и конечное значения остаются неизменными в ходе выполнения всего цикла for.
Параметр цикла i, если он целого типа, пробегает все значения с приращением 1, и его текущее значение не должно изменяться операторами внутри цикла. Такое изменение не запрещено правилами языка, но его последствия будут непредсказуемы. После завершения цикла параметр i считается неопределенным.
В цикле:
for i := начальное_значение
downto конечное_значение do ... оператор;
параметр цикла меняется от начального значения до конечного с шагом -1.
Программа вычисления суммы с использованием цикла со счетчиком дана далее в двух вариантах (вариант с to и вариант с downto).
program summa3;
const
n = 100;
var
i : Integer; sum : Real;
begin
sum := 0;
for i := 1 to n do {При первом выполнении цикла i равняется 1, к sum добавляется 1, затем i = 2, к sum добавляется 1/2}
sum := sum + 1 / i;
{Затем i = 3, к sum добавляется 1/3. и так продолжается до i = n} WriteLn('сумма ', n,' элементов =sum:10:5); end .
Второй вариант:
program summa4;
const
n = 100;
var
i : Integer; sum : Real;
begin sum := 0;
for i := n downto 1 do sum := sum + 1 / i;
WriteLn('сумма’, n, ‘элементов =’, sum:10:5);
end.