
- •Структурное программирование и оформление программ
- •Теоретические сведения
- •Структурное программирование
- •Оформление программ
- •Отладка и тестирование программ
- •Задание к работе
- •Пример построения цикла
- •Определения элементов цикла
- •Пример формального построения цикла
- •Задание к работе
- •Содержание отчета
- •Контрольные вопросы
- •Алгоритмы сортировки
- •Теоретические сведения
- •Задача сортировки
- •Реализация простейшего алгоритма сортировки
- •Сложный алгоритм сортировки
- •Задание к работе
- •Содержание отчета
- •Контрольные вопросы
- •Приложение
Структурное программирование и оформление программ
Цель работы: получение первоначальных навыков структурного программирования, правильного оформления и тестирования программ; повторение основных элементов языка С.
Теоретические сведения
Структурное программирование
Большинство программ содержит значительное число строк кода, а человек не способен держать в памяти и понимать одновременно программу даже в 100 строк. Для разрешения этого противоречия программу принято разделять на отдельные подпрограммы. Если подпрограммы получаются большими и сложными, их, в свою очередь, также разбивают на более мелкие подпрограммы. В результате такого разбиения программа предстает в виде иерархической структуры, наверху которой находится вся программа целиком, чуть ниже – подпрограммы основной программы, а в самом низу – простые подпрограммы, которые программист способен понять, написать и проверить их работу.
Такой подход к построению программы называется структурным программированием, оно представляет собой принципы написания программ с хорошей структурой, которые бы легко читались и понимались.
Необходимо заметить, что структурное программирование содержит ряд ограничений, которые не позволяют писать неправильные программы. Например, самое известное ограничение структурного программирования – запрет на использование оператора безусловного перехода, который позволяет после любого оператора продолжить выполнение программы с любого другого места в программе.
Хотя язык С содержит ряд неструктурных операторов (например, оператор безусловного перехода goto, операторы выхода из цикла break и continue и др.), здесь они не рассматриваются, так как применение таких операторов для выполнения лабораторных работы запрещено.
Основные принципы структурного программирования заключаются в следующем:
любая программа представляет собой структуру, построенную из трех типов базовых конструкций;
повторяющиеся фрагменты программ и логически целостные вычислительные блоки оформляются в виде подпрограмм;
разработка программы ведется пошагово, методом «сверху вниз».
Три типа базовых конструкций включают в себя
последовательное исполнение – однократное выполнение операций в том порядке, в котором они записаны в тексте программы. В языке С для этой цели используется составная инструкция, внутри которой можно записать несколько действий;
ветвление – однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия. В языке С для организации ветвления используется управляющая конструкция «if-else»;
цикл – многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла). В языке С есть несколько конструкций циклов, из которых рекомендуется использовать конструкции «while» и «for».
В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последователь-ностью выполнения операций не предусматривается.
Подпрограммы на языке С реализованы в виде функций. Важно отметить, что функции должны реализовывать логически целостный небольшой вычислительный блок. Этот блок, с одной стороны, не должен быть слишком прос-тым, иначе будет проще написать его код вместо кода вызова функции. С другой стороны, он должен быть достаточно простым, чтобы программист мог понять его целиком. Во времена, когда мониторы компьютеров работали в основном в текстовом режиме, сформировалось эмпирическое правило – код функции со всеми заголовками и комментариями должен быть не больше 24 строк, каждая из которых должна содержать не больше 80 символов.
Разработка программ методом «сверху вниз» (употребляют также термин «нисходящее проектирование») связана с уровнями структуры программы. Например, разрабатывается программное обеспечение для банкомата. Фрагмент структурной схемы программы приведен на рисунке.
На рисунке видно три уровня программы. На верхнем уровне реализуется одна функция – «Выдать деньги». Разрабатывая эту функцию, можно использовать другие функции, которые еще не определены и не реализованы.
Для того чтобы выдать деньги, нужно определить пользователя, узнать требуемую сумму, проверить возможность выдачи и выдать деньги. Функции, реализующие перечисленные действия, лежат на втором сверху уровне. При их реализации можно использовать еще не созданные функции, реализация которых будет осуществляться на более низких уровнях структуры программы.
Преимуществом нисходящего проектирования является то, что при разработке каждого уровня структуры программы нужно решать относительно простую задачу, которая требует нескольких действий.
Структурная схема работы банкомата
Неудобством описанного подхода является то, что нет возможности сразу после разработки какого-либо уровня проверить работу программы. Для того чтобы предварительно проверить работу программы, часто прибегают к функциям-заглушкам, которые работают вместо обычных функций, но делают это максимально упрощенно или просто сообщают, что сработала функция-заглушка. Например, вместо функции, которая запрашивает PIN-код у пользователя, можно вставить заглушку, в которой этот код хранится в виде константы и выдается в качестве результата.
Как видно из сказанного, ключевым элементом структурного программирования является правильное разбиение задачи на части – функции. Основной целью структурного программирования является получение легко понятных программ и, как следствие, наиболее полное понимание программистом прог-рамм, написанных как им самим, так и другими людьми.