Тема 5. АЛГОРИТМИЗАЦИЯ
Этапы проектирования задач и разработки программ
Непосредственному применению новых технологий обработки информации предшествует их проектирование, т.е. разработка задач и программ. Под задачей понимается совокупность действий по формированию выходной информации на основе входной, а под программой - совокупность логически связанных операторов, записанных в соответствии с определенными правилами. Одной из главных целей проектирования является разработка такой технологии, которая обеспечила бы максимально возможное использование средств вычислительной техники, снижала затраты на обработку информации и отвечала научным методам управления. Как правило, проектирование проводится последовательно в несколько этапов (на каждом из которых ставятся и решаются конкретные задачи, например, выясняются информационные потоки, выбираются технические средства, определяются организационные формы применения разрабатываемой технологии и др.).
В общем плане непосредственному проектированию предшествует подготовительная стадия – первый этап проектирования, на которой решаются организационные вопросы (составляется программа работ с указанием сроков их выполнения, материальная и техническая база проектирования, определяются взаимоотношения проектировщиков со специалистами и руководством объекта управления и т.д.). Второй этап - это изучение объекта управления (исследуются специфические условия объекта, его информационные потоки, затраты на обработку данных и экономическая эффективность функционирования системы обработки информации). Третий этап - разработка предварительного, эскизного проекта (на основании данных, полученных на втором этапе проектирования, выбираются технические средства и оргтехника для информационной технологии и управления объектом и др.). Четвертый этап - разработка рабочего проекта (здесь рассматриваются конкретные вопросы проектирования), который включает:
1. Постановку задачи.
На этом этапе раскрывается организационно-экономическая сущность задачи, формулируются условия и конечная цель ее решения, взаимосвязь с другими задачами, определяются исходные данные и выходная информация, осуществляется проектирование информационно-логической модели предметной области и др.
2. Выбор метода решения.
Здесь осуществляется анализ существующих аналогов, устанавливаются и формализуются зависимости между входными и выходными данными (разрабатывается их структура). Для задач, допускающих математическое описание, выбираются численные методы, модель решения задачи, а также программные средства их реализации.
3. Определение информационного обеспечения.
На данном этапе устанавливается состав нормативно-справочной информации, состав и периодичность получения оперативной информации.
4. Алгоритмизацию.
Прежде всего отметим, что алгоритм - это конечная последовательность правил, преобразующих входную информацию в выходную. На этапе алгоритмизации осуществляется проектирование алгоритма (задача разбивается на более простые подзадачи, определяются их взаимосвязи, конкретизируется и формализуется выполнения каждой подзадачи).
5. Программирование.
Здесь осуществляется выбор языка программирования, реализующего заданный алгоритм, выбираются методы тестирования и отладочные тесты.
6. Тестирование и отладку.
Данный этап реализуется путем вывода промежуточных результатов работы программы и сравнения их с контрольным примером.
Анализ результатов решения задачи.
Здесь анализируются результаты решения задачи и в случае необходимости осуществляется повторное выполнение этапов 2 - 5.
Начало
![]() |
Да Нет
Если есть ошибки
![]() |
Конец
Блок-схема разработки рабочего проекта
Пятый (заключительный) этап - подготовка к внедрению и сопровождение проекта (составляется документация к задаче, математической модели, алгоритму, программе, набору тестов, к использованию).
При проектировании компьютерной технологии наиболее сложным и творческим процессом является алгоритмизация (при этом разрабатываются оригинальные или адаптируются известные на рынке программных продуктов алгоритмы).
Понятие алгоритма
Термин «алгоритм» (Algorithm) происходит от латинской формы написания имени великого математика и астронома, автора персидского учебника по математике Абу Джафара ибн Мусы аль-Хорезми (уроженца Хорезма), жившего в IX в. и сформулировавшего правила выполнения арифметических действий. Первоначально под алгоритмами и понимали только эти правила. Позже термин «алгоритм» стали использовать для обозначения любой последовательности действий, приводящей к решению какой-либо задачи.
Алгоритм является одним из фундаментальных понятий в математике и программировании. В широком смысле алгоритм означает заранее заданное и точное предписание возможному исполнителю последовательности действий над заданным объектом, приводящее к достижению указанной цели за конечное число шагов. При этом понятие исполнителя невозможно определить с помощью какой-либо формализации. Исполнителем может быть человек, группа людей, робот, станок, компьютер, язык программирования и т.д. Важнейшим свойством, характеризующим любого из них, является то, что исполнитель умеет выполнять некоторые команды, действуя формально не вникая в смысл того, что он делает.
Чтобы создать программу для компьютера, недостаточно знания только языка программирования.Надо сконструировать программу, разбить ее на определенные блоки и выстроить эти блоки один за другим в соответствии с заранее заданным порядком действий (этот порядок и называется алгоритмом программы). Алгоритм должен быть составлен таким образом, чтобы исполнитель, в расчете на которого он создан, мог однозначно и точно следовать командам алгоритма и эффективно получать определенный результат. Это накладывает на записи алгоритмов ряд обязательных требований. Сформулируем эти требования в виде перечня свойств, которым должны удовлетворять алгоритмы, адресуемые заданному исполнителю.
1. Одно из первых требований, которое предъявляется к алгоритму, состоит в том, что описываемый процесс должен быть разбит на последовательность отдельных шагов. Возникающая в результате такого разбиения запись представляет собой упорядоченную совокупность четко разделенных друг от друга предписаний (директив, команд, операторов), образующих прерывную (или, как говорят, дискретную) структуру алгоритма. Только выполнив требования одного предписания, можно приступить к выполнению следующего. Рассмотренное свойство алгоритмов называют дискретностью. Итак: дискретность (упорядоченность) означает, что все действия исполнителя (компьютера) в алгоритме должны быть выстроены в четком, раз и навсегда определенном порядке через отдельные шаги.
2. Чтобы составить алгоритм для определенного исполнителя, нужно знать, какие команды он может понять и выполнить, а какие нет. У каждого исполнителя имеется своя система команд и, очевидно, что составляя запись алгоритма для него, можно использовать лишь те команды, которые имеются в системе команд исполнителя. Это свойство алгоритмов называют понятностью. Итак: понятность алгоритма заключается в том, что каждый шаг алгоритма обязательно представляет собой какое-либо допустимое действие исполнителя, т.е. алгоритм состоит только из предписаний, входящих в систему команд данного исполнителя.
3. Будучи понятным, алгоритм не должен содержать предписаний, смысл которых может восприниматься неоднозначно, т.е. одна и та же команда, будучи понятна разным исполнителям, после исполнения каждым из них должна давать одинаковый результат. Запись алгоритма должна быть настолько четкой, полной и продуманной в деталях, чтобы у исполнителя не могло возникнуть потребности в принятии решений, не предусмотренных составителем алгоритма. Иначе говоря, алгоритм не должен оставлять места для произвола исполнителя. Кроме того, в алгоритмах недопустимы также ситуации, когда после выполнения очередной команды алгоритма исполнителю неясно, какая из его команд должна выполняться на следующем шаге. Отмеченное свойства алгоритмов называютопределенностью или детерминированностью. Итак: детерминированность (определенность) имеет ввиду следующее - каждое правило должно быть однозначным, т.е. на каждом шаге однозначно определен способ действий.
4. Обязательное требование к алгоритмам - результативность. Смысл этого требования состоит в том, что при точном исполнении всех предписаний алгоритма процесс должен прекратиться за конечное число шагов и при этом должен получиться определенный результат. Итак: результативность подразумевает, что каждый шаг (и алгоритм в целом) после своего завершения дает однозначно определенный результат.
5. Наиболее распространены алгоритмы, обеспечивающие решение не одной конкретной задачи, а некоторого класса задач данного типа. Это свойство алгоритма называютмассовостью. В простейшем случае массовость обеспечивает возможность использования различных исходных данных. Итак: массовость означает, что алгоритм должен быть как можно более универсальным, подходящим для решения разных типов задач.
6. Алгоритм должен быть по возможности простым и выполняться с минимальными затратами машинного времени и оборудования. Это свойство называют эффективностью. Алгоритм должен быть выполнен не просто за конечное число операций, а за разумное конечное время.
На практике в качестве исполнителя алгоритмов чаще всего используют ЭВМ, поэтому алгоритм, предназначенный для исполнения на компьютере, должен быть записан на понятном ему языке (на первый план здесь выдвигается необходимость точной записи команд, не оставляющей места для произвольного толкования их исполнителем). Короче говоря, язык для записи алгоритмов должен быть формализован (более строго описан). Формализация предполагает замену словесной формулы решаемой задачи краткими символьными обозначениями, близкими к обозначениям в языках программирования или к математическим. Такой язык принято называть языком программирования, а запись алгоритма на этом языке - программой для компьютера.
При построении алгоритма для сложной задачи используют системный подход: использование принципов декомпозиции (нисходящее проектирование «сверху-вниз») и синтеза (программирование «снизу-вверх»). Первое предполагает первоначальную разработку алгоритма в виде укрупненных блоков (разбиение задачи на подзадачи, или модули со связями между собой) и их постепенную детализацию (пошаговое разбиение алгоритма на все более мелкие части до уровня элементарных конструкций, для которых можно составить конкретные команды). Затем (после декомпозиции) проводится сборка блоков (модулей) в единую программу (т.е. синтез). Кроме этих, при разработке алгоритмов применяется принцип «от главного к второстепенному», предполагающий составление алгоритма, начиная с главной конструкции и принцип структурирования, т.е. использования только типовых алгоритмических структур при построении алгоритма.
Как и при разработке структуры любой сложной системы, при формировании алгоритма используют дедуктивный и индуктивный методы. При дедуктивном подходе рассматривается частный случай общеизвестныхалгоритмических моделей (здесь при заданных предположениях известный алгоритм приспосабливается к условиям решаемой задачи). Индуктивный способ предполагает эвристический системный подход (декомпозиция - анализ - синтез). В этом случае общих и наиболее удачных методов не существует (возможны некоторые подходы, позволяющие в каждом конкретном случае находить и строить алгоритмы).
Итак, алгоритмизация - это совокупность взаимосвязанных действий, выполняемых в процессе разработки и обоснования алгоритма. Она включает: расчленение вычислительного процесса на автономные шаги, формальную запись содержания каждого шага вычислительного процесса; определение очередности (порядка) выполнения выделенных шагов; проверку правильности работы алгоритма при реализации заданного метода вычисления. Вычислительный процесс, реализующий алгоритм решения задачи, формализуется в виде вычислительной схемы. Вычислительная схема представляет собой некоторую последовательность операций и форму их записи. При этом алгоритм решения задачи сводится к выполнению некоторого числа операций над исходными данными и получаемыми промежуточными результатами в заданной последовательности, включая получение общего результата решения задачи.