Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы по информатике.doc
Скачиваний:
469
Добавлен:
17.03.2015
Размер:
3.59 Mб
Скачать

17. Методы проектирования алгоритмов

Методы проектирования алгоритмов включают: нисходящее проектирование, модульность, структурное программирование.

Нисходящее проектирование предполагает последовательное разбиение исходной задачи на подзадачи до такой конкретизации, когда подзадача сможет быть реализована одним оператором выбранного для программирования языка. По ходу нисходящего проектирования та или иная подзадача может сформировать самостоятельный модуль. Тогда может быть применен принцип модульного программирования. Он обеспечивает легкость составления алгоритмов и отладки программ, легкость сопровождения и модификации, а также возможность одновременной разработки различных модулей разными специалистами с использованием разных языков программирования.

При работе над модулем можно применить принцип структурного программирования. Его цель – повышение читабельности и ясности алгоритма (и программы), более высокой производительности программистов и упрощение отладки. В соответствии с этим принципом для построения любого алгоритма (программы) требуются три типовых блока:

функциональный. Используется для представления линейных алгоритмов. Описывается языком графических символов следующим образом:

циклический. Используется для представления циклических алгоритмов. Описывается языком графических символов одним из двух способов:

конструкция принятия двоичного решения. Применяется для представления разветвляющихся алгоритмов. Описывается языком графических символов следующим образом:

В качестве примера разработаем блок-схему для задачи учета абитуриентов из примера, используя принципы нисходящего проектирования, модульности и структурного программирования.

Выделим в поставленной задаче три основных подзадачи и введем необходимые комментарии:

  1. ввод и размещение в памяти компьютера списка абитуриентов и их оценок по аттестату. При этом количество абитуриентов заранее неизвестно, поскольку документы принимаются у всех желающих;

  2. ввод и анализ оценок по каждому экзамену по каждому абитуриенту. В результате анализа возможно исключение абитуриента из списка. Число абитуриентов известно после решения первой подзадачи. Количество экзаменов известно заранее;

  3. упорядочение списка абитуриентов в зависимости от оценок. Здесь возможно использовать не сами оценки, а средний балл по аттестату и средний балл за вступительные экзамены;

  4. определение нужного подмножества абитуриентов для зачисления. Число студентов набора известно заранее.

В соответствии с выделенными подзадачами определим четыре модуля, взаимосвязь которых представлена на рисунке:

После такой декомпозиции исходной задачи, полученные укрупненные блоки являются модулями, которые могут быть реализованы независимо друг от друга. Единственным ограничением при реализации является необходимость согласования межмодульных связей, когда результат работы одного модуля служит входной информацией другого. Такими данными являются:

  • от блока Ввод и размещение в блок Ввод и анализ передаются следующие данные: список абитуриентов (фамилии и инициалы), средний балл по аттестату, количество абитуриентов;

  • от блока Ввод и анализ блоку Упорядочение передаются: список абитуриентов, средний балл по аттестату и средний балл за вступительные экзамены;

  • от блока Упорядочение блоку Определение передается список абитуриентов и число тех, кто сдал вступительные экзамены.

После этих соглашений введем обозначения для требуемых переменных, придерживаясь принципа мнемоничности имен переменных, а также определим их тип:

фамилия и инициалы студента – FIO, тип - символьный;

начальное число абитуриентов – CHISLO, тип – целый;

число отчисленных абитуриентов – OTCHISL, тип – целый;

оценки по аттестату – ATTECTAT_OCENKI, тип – числовой одномерный массив;

оценки за вступительные экзамены – BCTUPIT_OCENKI, тип – числовой одномерный массив;

средний балл по аттестату – SR_ATTECTAT, тип - вещественная переменная;

средний балл по вступительным экзаменам – SR_BCTUPIT, тип - вещественная переменная;

число вступительных экзаменов – EXAMINE, тип - целая переменная;

объем набора – NABOR, тип - целая переменная.

Разработаем алгоритмы для выделенных четырех модулей, представим их графическими символами, т.е. блок-схемами, и рассмотрим подробнее полученные блок-схемы:

1. Модуль Ввод и размещение;

2. Модуль Ввод и анализ;

3. Модуль Упорядочение;

4. Модуль Определение.

Анализ блок-схем показывает:

при проектировании алгоритма использован принцип нисходящего проектирования, в соответствии с которым исходная задача декомпозирована на подзадачи;

выделенные подзадачи реализованы как отдельные модули, т.е. применен принцип модульности;

в структуре модулей можно выделить типовые конструкции, которые указывались ранее, т.е. алгоритмы выполнены с учетом принципов структурного программирования;

каждый блок из полученных блок-схем может быть закодирован одним оператором такого операторного языка, как, например, Турбо-Паскаль. Это означает, что блок-схемы разработаны с учетом требуемой степени детализации, а сама кодировка блок-схем может быть выполнена читателем самостоятельно.

Таким образом, разработка алгоритма и его кодирование есть не что иное, как представление исходной задачи и способов ее решения средствами, понятными компьютеру.