
- •Содержание
- •Предисловие
- •1. Этапы разработки программы
- •1.1. Формальная постановка задачи
- •1.2. Выбор метода решения
- •1.3. Внешняя спецификация программы
- •1.4. Разработка алгоритма
- •1.5. Кодирование алгоритма на языке программирования
- •1.6. Испытания программы на тестах
- •Вопросы для самоконтроля
- •2. Язык для записи алгоритмов
- •2.1. Базовые типы величин
- •2.2. Объявление величин в алгоритме
- •2.3. Структура компьютера с позиций программы
- •2.4. Базовые операции
- •2.5. Управляющие структуры
- •2.6. Структура алгоритма
- •Вопросы для самоконтроля
- •3. Введение в язык программирования паскаль
- •3.1. Краткая характеристика языка
- •Алфавит, лексемы, разделители
- •3.1.2. Структура программы
- •3.2. Средства кодирования вычислительных операций
- •3.2.1. Операция ввода
- •3.2.2. Операция присваивания
- •3.2.3. Операция вывода
- •3.3. Средства кодирования управляющих конструкций
- •3.3.1. Кодирование структуры «Ветвление»
- •3.3.2. Кодирование структуры «Цикл»
- •3.4. Кодирование алгоритма в целом
- •Заключение
- •Вопросы для самоконтроля
- •Разработка алгоритмов методом пошаговой детализации
- •4.1. Структура алгоритма
- •4.2. Описание действий
- •4.3. Обратная подстановка
- •4.4. Пример
- •4.4.1. Разработка внешней спецификации
- •4.4.2. Разработка главного алгоритма
- •4.4.3. Подстановка
- •4.4.4. Кодирование на языке Паскаль
- •4.4.5. Разработка алгоритма подпрограммы сортировки
- •4.5. Вопросы для самоконтроля
- •5.Тестирование
- •5.1. Общие принципы тестирования
- •5.2. Виды тестирования
- •5.3. Стратегии тестирования
- •5.3.1. Методы стратегии «черного ящика»
- •5.3.2. Методы стратегии «белого ящика»
- •5.4. Правила записи трассировки
- •Вопросы для самоконтроля
- •6. Характеристики качества программы
- •Вопросы для самоконтроля
- •Вопросы для самоконтроля (продолжение)
- •7. Типовые алгоритмы обработки массивов
- •А1. Ввод массива с клавиатуры
- •А7. Выбор элементов по условию
- •А8. Проверка выполнения некоторого условия
- •Пример 2. ”Найти значение элемента, встречающегося в массиве наибольшее количество раз”.
- •Пример 3. В матрице a[1..N, 1..M] поменять местами первый и третий отрицательные элементы, встретившиеся при просмотре матрицы по строкам слева направо и сверху вниз.
- •8. Обработка символьной информации
- •8.1. Обработка строк
- •8.2. Особенности ввода информации строкового вида
- •Вопросы для самоконтроля
- •9. Типы данных, задаваемых пользователем
- •9.1. Множества
- •9.2. Записи
- •9.3. Оператор with
- •Вопросы для самоконтроля
- •10. Файлы
- •Введение
- •10.2. Классификация файлов в Турбо-Паскале
- •10.3. Объявление файла
- •10.4. Открытие и закрытие файла
- •10.5. Чтение и запись
- •10.6. Текстовые файлы
- •10.7. Нетипизированные файлы
- •10.8. Пример. Программа работы с файлами
- •Вопросы для самоконтроля
- •11. Подпрограммы
- •11.1. Область действия идентификаторов
- •11.2. Способы передачи параметров
- •11.3. Примеры
- •Вопросы для самоконтроля
- •12. Динамические структуры данных
- •12.1. Указатели
- •12.2. Динамические структуры типа «Список»
- •12.3. Средства языка Паскаль для организации списков
- •12.4. Типовые алгоритмы работы со списками
- •А1. Инициализация списка. (Создание нового и пустого списка)
- •А2. Добавить элемент в конец односвязного списка
- •А9. Добавить элемент в упорядоченный односвязный список
- •Задачи для закрепления материала
- •Вопросы для самоконтроля
- •13. Динамические структуры данных типа «дерево»
- •13.1. Определение дерева и способы представления в программе
- •13.2. Рекурсия
- •1. Наличие тривиального случая.
- •2. Определение сложного случая в терминах более простого.
- •13.3. Алгоритмы работы с деревьями
- •А1. Вычисление суммы значений информационных полей элементов
- •А2. Подсчет количества узлов в бинарном дереве
- •А3. Подсчет количества листьев бинарного дерева
- •A5. Поиск элемента в двоичном упорядоченном дереве
- •Вопросы для самоконтроля
- •14. Модули
- •14.1. Введение
- •14.2. Форма модульной программы
- •14.3. Стандарты структурного программирования
- •14.4. Модули в турбо-паскале
- •14.5. Использование модулей
- •14.6. Стандартные модули Турбо-Паскаля
- •14.7. Пример использования модулей
- •Вопросы для самоконтроля
- •15. Основы объектно-ориентированного программирования
- •15.1. Основные понятия
- •15.2. Объявление классов объектов
- •15.3. Статические и динамические объекты
- •15.4. Правила построения и использования объектов а. Правила наследования
- •Б. Виртуальные методы
- •В. Ранее и позднее связывание
- •Г. Совместимость классов объектов
- •Вопросы для самоконтроля
- •Заключение
- •Библиографический список
2.5. Управляющие структуры
Для организации разнообразной последовательности действий в алгоритме используются три вида управляющих структур, обеспечивающих требуемую последовательность. Это – следование, альтернативный выбор и циклическое повторение. При их использовании рекомендуется применять определенные правила записи, которые позволят наглядно представить структуру алгоритма. Такая запись получила название структурной. Далее, при рассмотрении управляющих структур будут излагаться и правила структурной записи.
Рассмотрим их.
Следование. Данное правило определяет следующее: два действия (в частности, например, две операции) связаны отношением следования в том случае, если второе действие выполняется после окончания первого, начинает выполняться в момент завершения первого и выполняется вне зависимости от результата первого действия.
При структурной записи следования двух действий в алгоритме их тексты должны располагаться друг под другом, и начинаться они должны с одинаковым отступом от края листа. Если для записи некоторого действия требуется более одной строки, все строки кроме первой должны записываться с отступом вправо по отношению к первой строке. Это позволит сделать более наглядной структуру алгоритма.
Н
иже
приведены графическое и текстовое
изображение двух действий, связанных
отношением следования.
Два действия, связанные отношением следования, при изображении алгоритма можно рассматривать как одно, имеющее одну точку входа и одну точку выхода.
Конкретные примеры использования как данной, так и других структур будут приведены ниже.
Альтернативный выбор. Данная конструкция применяется в случае, когда в процессе выполнения алгоритма дальнейшие действия связываются с выполнением некоторого условия. Различают следующие варианты данной конструкции: одноальтернативная (а), двухальтернативная (б) и многоальтернативная (в).
При записи данной конструкции используются специально зарезервированные (ключевые) слова – если, то, инес (от слов иначе-если), иначе и все. Для того чтобы в тексте алгоритма эти слова выделялись, они будут изображаться подчеркнутыми. Ниже приведены типовые формы их записи.
(а)
В
если
<условие>
то
действие-1
все
(б)
если
<условие> то
действие-1 иначе
действие-2 все
(в)
В
если
<условие1> то
действие-1 инес
<условие2> то
действие-2
иначе
действие-3 все
Любой вариант конструкции “альтернативный выбор” имеет одну точку входа (слово если) и одну точку выхода (слово все). И в этом смысле она может быть связана отношением следования с любым другим действием алгоритма. Точно так же любая из альтернатив может рассматриваться не как единое действие, а как несколько действий, связанных отношением следования.
Циклическое повторение. Данная конструкция предназначена для задания многократного повторения одного и того же действия (или группы действий). В программировании эту конструкцию называют просто конструкцией цикл, а повторяющиеся действия – телом цикла.
Можно выделить три основных варианта данной конструкции: “цикл с предусловием”, “цикл с постусловием” и “цикл со счетчиком”. Рассмотрим их.
(
цикл-пока
<условие>
тело-цикла кцикл
Принцип выполнения конструкции:
Вначале проверяется условие, записанное после ключевого слова цикл-пока, и если оно истинно, выполняется тело цикла. После достижения ключевого слова кцикл (аббревиатура от слов “конец цикла”) происходит возврат на повторную проверку условия, записанного в начале конструкции. В случае нарушения истинности условия выполнение конструкции завершается и происходит переход к действию алгоритма, следующему за циклом.
Из изложенного следует, что тело цикла может быть не выполнено ни разу, если в первый момент условие не выполняется, и может повторяться неопределенное число раз. Если условие выполняется всегда, выхода из данной конструкции может не произойти никогда. Такая ситуация называется зацикливанием, и разработчик алгоритма должен сам позаботиться о том, чтобы избежать ее. Очевидно, что для ограничения числа повторений в теле цикла должны происходить изменения переменных, которые используются в условии.
Пример конструкции “цикл с предусловием” (ее иногда называют “цикл-пока”) во фрагменте алгоритма:
Здесь тело цикла составляют две операции присваивания, связанные отношением следования. Их выполнение повторяется до тех пор, пока истинно условие “S<35”, а поскольку значение переменной S монотонно возрастает, то в некоторый момент условие перестанет выполняться и, соответственно, прекратится выполнение всей конструкции.
(б) Цикл с постусловием записывается следующим образом:
Принцип выполнения:
Вначале выполняется тело цикла, затем проверяется условие, записанное после ключевого слова кцикл-до. Если условие не выполняется (ложно), происходит возврат на начало, и тело цикла выполняется вновь. Этот процесс повторяется до тех пор, пока при очередной проверке условие не примет истинного значения, и в этом случае выполнение конструкции завершается и происходит переход к действию алгоритма, следующему за циклом. Здесь также возможно зацикливание.
Описываемая конструкция, как и предыдущая, является конструкцией с неопределенным числом повторений тела цикла. Основное отличие этой конструкции от предыдущей заключается в том, что в ней тело цикла выполняется хотя бы один раз.
Пример конструкции “цикл с постусловием” (ее иногда называют “цикл-до”) во фрагменте алгоритма:
(в) Цикл со счетчиком записывается следующим образом:
Здесь
сч - имя скалярной переменной целого типа, выполняющей функции счетчика числа повторений тела цикла (ее называют счетчиком или параметром цикла)
нач - целочисленное выражение, которое задает начальное значение счетчика цикла
кон - целочисленное выражение, которое задает конечное значение счетчика цикла.
Полагается, что с каждым повторением тела цикла значение счетчика изменяется (увеличивается или уменьшается ) на единицу. Отсюда, данная конструкция такова, что число повторений тела цикла в ней всегда конечно и его можно точно вычислить. Поэтому ее называют конструкцией цикла с определенным числом повторений.
Принцип выполнения: Изложим его для случая, когда с каждым повторением тела цикла значение счетчика увеличивается на 1. Вначале счетчику цикла присваивается начальное значение. Затем производится проверка, не превысило ли текущее значение счетчика конечной величины. Если это условие истинно, выполняется тело цикла. После этого значение счетчика увеличивается на 1, и производится возврат в начало цикла, где вновь проверяется, как соотносятся между собой текущее значение счетчика цикла и конечного значения. Процесс повторений прекращается и происходит переход к действию, записанному после рассматриваемой конструкции цикла, когда текущее значение счетчика превысит конечное значение.
Анализ описанной логики исполнения показывает, что, во-первых, тело цикла может быть не выполнено ни разу, и, во-вторых, что здесь невозможно зацикливание.
Имеется одно существенное замечание: счетчик цикла можно использовать, но нельзя изменять в теле цикла.
Пример конструкции “цикл со счетчиком” во фрагменте алгоритма:
Здесь k – счетчик цикла, и он принимает
последовательно значения: 1, 2, . . ., n. За
счет этого, после завершения цикла,
переменная S примет значение суммы
квадратов указанных выше значений
счетчика цикла:
.