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

 

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

 

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

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

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

 

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

 

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

 

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

 

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

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

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

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

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

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

 

 

 

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

 

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

 

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

 

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

 

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

 

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

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

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

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

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

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

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

 

 

В блоке 1 переменной CHISLO присваивается начальное нулевое значение – выполняется ее подготовка к накоплению числа абитуриентов, которое осуществляется в цикле в блоке 6. В блоке 2 вводятся исходные данные по одному абитуриенту – его фамилия, имя, отчество, список оценок по аттестату. Данные заносятся в соответствующие переменные (см. комментарий к блоку). Для прерывания цикла задаются специальным знаком, ввод которого свидетельствует об окончании ввода списка абитуриентов. Этот анализ выполняется в блоке 3. Если достигнут конец списка абитуриентов (выход ДА), алгоритм прекращает свою работу. Если конец цикла не достигнут (выход НЕТ), рассчитывается среднее арифметическое значение оценок в аттестате (блок 4). Затем фамилия, имя, отчество и средний балл по аттестату запоминаются на диске (блок 5).

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

 

 

В блоке 1 вводится число вступительных экзаменов. В блоке 2 формируется начальное (равное нулю) значение числа отчисленных абитуриентов: эта переменная нужна для определения реального числа абитуриентов, сдавших экзамены и допущенных к зачислению. В блоке 3 организуется циклический процесс, позволяющий по каждому вступительному экзамену выполнить ввод соответствующих оценок по каждому абитуриенту. Обращение ко всем абитуриентам организуется с помощью блока 4. Если введенная оценка равна 2, абитуриент исключается из списка, размещенного на диске (блок 7). В противном случае оценка добавляется к списку оценок абитуриента (блок 9). Внутри цикла формируется также число отчисленных абитуриентов (блок 8). Таким образом, данный алгоритм является примером вложенной циклической структуры, когда один циклический процесс вложен в другой. По окончании цикла определяется число оставшихся абитуриентов (блок 10) и рассчитывается средний балл за вступительные экзамены по каждому абитуриенту (блок 11). Результат последнего расчета помещается в список абитуриентов на диск.

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

 

 

 

В этом модуле реализован один из методов упорядочения списка по убыванию значений элементов (в нашем случае по убыванию средних баллов по вступительным экзаменам и по аттестату). Идея метода состоит в том, что последовательно, начиная с первого элемента списка, сравниваются два рядом стоящих элемента. Если последующий элемент больше предыдущего, они меняются местами. Таким образом, если в списке n элементов, указанное сравнение выполняется (n-1) раз по количеству различных пар. Чтобы учесть соотношение не только рядом стоящих, но и разнесенных по списку элементов, описанный анализ пар элементов выполняется (n-1) раз. Иначе говоря, этот метод представляется вложенным циклическим алгоритмом (блоки 1 и 2). В блоке 3 сравниваются два рядом стоящих элемента в списке своими средними оценками за вступительные экзамены: если последующий элемент (абитуриент) имеет средний балл больше, чем предыдущий элемент, выполняется блок 6 и элементы меняются местами; иначе выполняется блок 4. В этом случае определяется, равны ли средние баллы за вступительные экзамены у рядом стоящих элементов в списке. Если это так (выход ДА из блока 4), в расчет берутся средние баллы за аттестат (блок 5): преимущества имеет тот абитуриент, у которого больше средний балл по аттестату при равных оценках на вступительных экзаменах. Если же окажется, что средний балл за вступительные экзамены у последующего элемента списка меньше, чем у предыдущего (выход НЕТ у блока 4), элементы местами не меняются – они и так упорядочены по убыванию среднего балла за вступительные экзамены. В блоке 5 анализируются средние баллы за аттестат. Этот анализ выполняется только тогда, когда средние оценки по вступительным экзаменам одинаковые у рядом стоящих в списке абитуриентов. Если средний балл по аттестату у последующего элемента больше, чем у предыдущего (выход ДА блока 5), элементы меняются в списке местами (блок 6). Иначе (выход НЕТ у блока 5) никаких преобразований в списке не происходит.

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

 

 

В блоке 1 вводится значение набора студентов. В блоке 2 определяется, превышает ли требуемый набор количество абитуриентов, допущенных к зачислению. Если вступительные экзамены успешно сдало меньшее количество абитуриентов, чем требуется (выход ДА из блока 2), то значение набора уменьшается до этой величины (блок 3). Иначе (выход НЕТ из блока 2) управление передается блоку 4, в котором организуется циклический алгоритм просмотра списка абитуриентов и вывод данных по каждому абитуриенту (блок 5). На этом работа алгоритма заканчивается: сформирован список абитуриентов, которые могут быть зачислены по результатам вступительных экзаменов.








Дата добавления: 2015-03-03; просмотров: 3032;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.012 сек.