Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по С Живицкая (Мет пособие).doc
Скачиваний:
112
Добавлен:
15.06.2014
Размер:
2.11 Mб
Скачать

7.3.Свойства алгоритма

Свойства алгоритма—набор свойств, отличающих алгоритм от любых предписаний и обеспечивающих его автоматическое исполнение.

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

Дискретность– выполнение команд алгоритма последовательно, с точной фиксацией моментов окончания выполнения одной команды и начала выполнения следующей, т. е. алгоритм должен содержать последовательность указаний (команд), каждое из которых приводит к выполнению в ЭВМ одного шага.

Определенность (точность)– точные сведения о том, что после выполнения каждой очередной команды завершено выполнение алгоритма, либо о том, какая следующая команда должна выполняться, т.е. алгоритм должен предусматривать определенный порядок выполнения действий, так как ЭВМ должно быть указано, какую следующую команду исполнять после завершения текущего указания.

Результативность – либо завершение решения задачи после выполнения алгоритма, либо вывод о невозможности продолжения решения по какой-либо из причин, т.е. алгоритм должен обеспечивать возможность получения результата после конечного числа шагов.

Массовость – единообразное применение алгоритма к любой конкретной формулировке задачи, для решения которой он разработан (см. также Алгоритмическая универсальность), т.е. алгоритм должен обеспечивать возможность его применения для решения класса однотипных задач.

Команда алгоритма– предписание о выполнении отдельного законченного действия исполнителя.

В процессе алгоритмизации задачи исходный алгоритм разбивают на отдельные частные алгоритмы(шаги).

Частные алгоритмы могут быть линейными, разветвляющимися и циклическими.

Линейный алгоритм – набор команд (указаний), выполняемых последовательно во времени друг за другом.

Разветвляющийсяалгоритм – алгоритм, содержащий хотя бы одно условие, в результате проверки которого ЦВМ обеспечивает переход на один из двух возможных шагов.

Циклический алгоритм – алгоритм, предусматривающий многократное повторение одного и того же действия (одних и тех же операций) над новыми исходными данными.

К циклическим алгоритмам сводится большинство методов вычислений, перебора вариантов.

Цикл программы – последовательность команд (серия, тело цикла), которая может выполняться многократно (для новых исходных данных) до удовлетворения некоторого условия.

Вспомогательный (подчиненный) алгоритм (процедура) – алгоритм, ранее разработанный и целиком используемый при алгоритмизации конкретной задачи.

На всех этапах подготовки к алгоритмизации задачи широко используется структурное представление алгоритма.

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

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

Графическое изображение алгоритма широко используется перед программированием задачи вследствие его наглядности, так как зрительное восприятие обычно облегчает процесс написания программы, ее корректировки при возможных ошибках, осмысливание процесса обработки информации.

Задание и запись алгоритма для решения задачи с помощью ЭВМ при программировании ведутся с использованием некоторого алгоритмического языка. описывать алгоритм с любой степенью детализации. Недостатки: громоздкость описания (как следствие низкая наглядность), отсутствие строгой формализации в силу неоднозначности восприятия естественного языка.

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

Обладая всеми достоинствами словесного, вместе с тем более лаконичен, более нагляден, имеет большую формализацию, однако также не является строго формальным.

Графическ4ий представляет собой изображение логико-математической структуры алгоритма, при которой все этапы обработки данных представляются с помощью определённого набора геометрических фигур (блоков), и имеющих строго определённую конфигурацию в соответствии с характером выполняемых действий.

Для облегчения процесса разработки и восприятия графического изображения алгоритмов, их составление осуществляется в соответствии с требованием ГОСТа:

схемы алгоритмов программ, данных и систем, условные обозначения и правила выполнения.

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

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

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

Все схемы алгоритмов должны начинаться и заканчиваться соответствующими

символами , обозначающими начало и конец алгоритма.

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

Основные графические обозначения блоков алгоритмов и программ.

блок вычисления

– ввод, вывод

проверка условий

модификация

подпрограмма:

Необходимые условия корректности схем алгоритмов является недопустимость более чем одного выхода из символов, обозначающие обрабатываемые блоки и не менее двух выходов и символов, обозначающих логические5 операции по проверке выполнения условия. С целью повышения наглядности графической схемы алгоритма могут сопровождаться кратким, формульно-словесным описанием внутри условного обозначения блока, раскрывающих содержание выполняемой операции.

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

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

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

Для обозначения связи между удалёнными друг от друга блоками соответствующие им линии потока можно разрывать. В этом случае вначале и конце линии обрыва потока изображаются специальные символы:

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

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

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

Последовательность выполнения операций алгоритма определяется расположением операторов в схеме (при чтении слева направо) в соответствии с цифровой индексацией.

Передача управления от оператора к оператору осуществляется в порядке следования символов записи алгоритма. В случае отсутствия передачи управления от очередного оператора к последующему, между ними ставится признак завершения ветви алгоритма, а именно (;). Нарушение естественного порядка выполнения оператора отображаются с помощью стрелок.

Использование операторного способа представления упрощает процесс записи алгоритма, но малонагляден.

Для отображения алгоритмов решения многовариантных расчетов с большим количеством проверок условий, определяющих выбор той или иной ветви процесса обработки информации, используются таблицы решений. Имеется возможность применения их для описания параллельных процессов, а также для описания логики построения модифицируемых процессов. Специфика обработки экономической информации ограничивает эффективность применения таблиц решения. Здесь таблицы решения используются главным образом в качестве дополнений к основным способам описания алгоритмов.

4. Составление программ или кодирование является завершающим этапом процесса разработки программных средств предшествующим непосредственно началу машинной реализации алгоритма решения задач.

В процессе составления программ на ЭВМ конкретизируются тип и структура используемых данных, а последовательность действий, реализующих алгоритм, отражается посредством языка программирования.

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

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

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

в какой-то момент не может продолжить работу (прерывание) с сообщением оператора;

программа работает, но не выдаёт всех запланируемых результатов и не выходит на остановку (происходит зацикливание);

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

Программа считается отлаженной, если она безошибочно выполняет на достаточно представительном наборе данных, обеспечивающих проверку всех её ветвей. Процесс тестирования и отладки программ могут составлять порядка 30-50% в общей структуре затрат времени на разработку проекта и зависит от объёма и логической сложности разрабатываемых программных комплексов.

Для сокращения затрат на проведение тестирования и отладки в настоящее время широко используют специальные программные средства тестирования (например трассировки программ).

После завершения процесса тестирования и отладки программные средства вместе с сопроводительной документацией передаются пользователю для эксплуатации.

Основное назначение сопроводительной документации – обеспечить пользователя инструктивными материалами по работе с программными средствами. Как правило, это документы, регламентирующие работу пользователя при эксплуатации программных средств, а также содержащие информацию о программе, необходимую для изменений и дополнений в ней, которые могут потребоваться с целью дальнейшей её модернизации. Сопроводительная документация признана облегчить процесс выяснения причин в ходе эксплуатации переданных пользователю программ.

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

Экспериментальная эксплуатация заключается во внедрении разработанных программных средств на объекте заказчика (иногда параллельно с традиционными методами решения задач). С целью проверки неработоспособности при решении реальных задач в течение достаточно большого периода времени (обычно не менее года).

После завершения экспериментальной эксплуатации и устранения при этом ошибок, программное средство передаётся в промышленную эксплуатацию. Для повышения качества работ оперативности исправления ошибок, выявленных при эксплуатации программных средств, а также выполнение различного рода модификаций по согласованию с заказчиком, разработчик может осуществлять сопровождение программных средств. Целесообразность привлечения высококвалифицированных специалистов для сопровождения программных средств и пользователей объясняется тем, что затраты на сопровождение программ чаще превосходят затраты на приобретение программных средств.

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

Методы проектирования, создания и оформления программных средств.

Проектирование и создание программных средств приобретает черты индустриального производства. Это объясняется с одной стороны классовой потребностью в программных средствах при условии достаточно высокой стоимости этих средств, а с другой стороны необходимостью отчуждения программного продукта от непосредственного разработчика и потребностью в простоте последующих модификаций программ у потребителя. В настоящее время затраты на разработку программных средств примерно в 10 раз превышают затраты на вычислительное оборудование, а затраты на модификацию программ в процессе эксплуатации составляют приблизительно ¾ от стоимости всех затрат на создание и последующее подержание программных средств в рабочем состоянии. Такое положение предъявляет ряд специальных требований к методам проектирования. Создание и оформление программ, целью которых является обеспечение значительного сокращения трудовых стоимостных затрат на получение готовых программных средств и также их последующее сопровождение.

Существует несколько методов проектирования программ:

нисходящие TOPDOWN– метод или проектирование сверху вниз, иерархическое проектирование

структурное и модульное программирование.

Основная идея нисходящегозаключается в том, что будущая программа разбивается на более мелкие элементы, которые в свою очередь могут быть разбиты на более простые и так до тех пор, пока они не будут доведены до примитивов или элементарных операций, которые могут быть реализованы на ЭВМ. Этот метод является неизменным при разработке сложных по характеру и больших по объёму программ, когда к их разработке необходимо привлекать большое количество программистов, работающих параллельно. Он позволяет концентрировать внимание разработчиков на более ответственных частях программы, а также облегчает возможность постоянного контроля за его работоспособностью по мере разработки, отладки и объединения, отдельно составленных программ за счёт организации непрерывности этого процесса в течение всей разработке. Для устранения разработки программного комплекса вместо некоторых программ нижнего уровня могут использоваться специальные программы заглушки. Программы заглушки требуются только на ранних стадиях разработки для того, чтобы не сдерживать общий ход создания программного комплекса. Благодаря их использованию обеспечивается возможность имитирования на ЭВМ работы реально создаваемой программы, то есть осуществлять проверку работоспособности программ верхнего уровня до того, как будут разработаны и отлажены все составляющие его программы нижн6его уровня.

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

на модуль можно ссылаться по имени (в том числе и из других модулей)

по завершении работы модуль должен передавать управление тому модулю, который его вызывал

модуль должен иметь 1 вход и 1 выход, небольшой размер.

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

Рис. Структурная форма организации сложных программных комплексов.

А – управляющие модули

1 – резидентный головной модуль

– транзитный модуль

В – модули, реализующие основное назначение пакета

2 – функциональные модули

С – вспомогательные – обслуживающие модули

3 – транслятор с входного языка

4 – модуль сбора и обработки статистики

5 – модуль обработки ошибочных ситуаций

6 – модуль экспорта, импорта информации

7 – модуль обучения и подсказки

Модульный принцип разработки программ обладает следующими преимуществами:

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

Позволяет создавать (многократно использовать в дальнейшем) библиотеки наиболее употребительных программ.

Упрощается процедура загрузки больших программ в оперативную память, когда требуется её сегментации.

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

Обеспечивается более эффективное тестирование программ. Проще осуществляется тестирование, проектирование и последовательная отладка программ.

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

Недостатки могут привести к увеличению времени компиляции при загрузке программ, к увеличению требуемой памяти и времени исполнения программ.

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

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

линейную

циклическую

ветвлящуюся

Исключение оператора безусловного перехода даёт возможность читать программы сверху вниз без перерывов, возникающих из-за передачи управления. Благодаря этому легко можно определять условия, необходимые для модификации того или иного блока программы.

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