
информатика_книги / Информатика. Теория и практика_Острейковский В.А, Полякова И.В_2008 -608с
.pdf—программа работает, но не выдает всех запланированных результатов и не останавливается (происходит ее «зацикливание»);
—программа выдает результаты и завершает свою работу, но эти результаты полностью или частично не совпадают с контрольными. После выявления логических ошибок и установления причин их возникновения в программу вносятся соответствующие исправления, и ее отладка продолжается.
Программа считается отлаженной, если она безошибочно выполняется на достаточно представительном наборе тестовых данных, обеспечивающих проверку всех ее ветвей.
Процесс тестирования и отладки программ носит итерационный характер и считается одним из наиболее трудоемких этапов разработки программ. По оценкам специалистов, он может составлять от 30 до 50 % (а иногда и больше) от общего времени, затрачиваемого на разработку проекта, и зависит от объема и логической сложности разрабатываемых программных комплексов.
Для сокращения затрат на проведение тестирования и отладки в настоящее время широко используются специальные программные средства тестирования (например, генераторы тестовых данных) и приемы отладки (например, метод трассировки программ).
5.2.3. Эксплуатация программных средств
После завершения процесса тестирования и отладки программные средства вместе с сопроводительной документацией передаются пользователю для эксплуатации. Основное назна- чение сопроводительной документации — обеспечить пользователя необходимыми инструктивными материалами для работы с программными средствами. Как правило, это документы, регламентирующие работу пользователя при эксплуатации программных средств, а также содержащие информацию о программе, необходимую для изменений и дополнений в ней, которые могут потребоваться при дальнейшей ее модернизации. Сопроводительная документация призвана также облегчить процесс выявления причин возникновения тех или иных ошибок в работе программ, которые могут быть обнаружены уже в ходе их эксплуатации пользователем.
441
Состав сопроводительной документации обычно оговаривается заказчиком (пользователем) и разработчиком техниче- ского задания на программное средство.
Для передачи пользователю разработанных программных средств обычно создается специальная комиссия, включающая в свой состав представителей как разработчиков, так и заказчиков (пользователей). Комиссия в соответствии с заранее составленным и утвержденным обеими сторонами планом проводит работы по приемке-передаче программных средств
èсопроводительной документации. По завершении работы комиссии оформляется акт приемки-передачи.
Âпроцессе внедрения и эксплуатации программных средств могут быть выявлены различного рода ошибки, не обнаруженные разработчиком при их тестировании и отладке. Поэтому при реализации достаточно сложных и ответственных программных комплексов этап эксплуатации программных средств может быть разбит на подэтапы экспериментальной (опытной)
èпромышленной эксплуатации. Смысл экспериментальной эксплуатации заключается во внедрении разработанных программных средств на объекте заказчика (иногда параллельно с традиционными методами решения задач) с целью проверки их работоспособности при решении реальных задач в течение достаточно большого периода времени (обычно не менее года). Только после завершения периода экспериментальной эксплуатации и устранения выявленных при этом ошибок программное средство передается в промышленную эксплуатацию.
Для повышения качества работ, оперативности исправления ошибок, выявляемых в процессе эксплуатации программных средств, а также выполнения различного рода модификаций разработчик (поставщик) может по договоренности с заказчи- ком (пользователем) осуществлять сопровождение программных средств. Целесообразность привлечения высококвалифицированных специалистов для сопровождения программных средств у пользователей объясняется тем, что затраты на сопровождение программ в большинстве случаев значительно превосходят первоначальные затраты на их разработку (приобретение).
Следует принимать во внимание, что по своему характеру
èпоследовательности выполняемых действий внесение различного рода изменений в уже функционирующие программы
442
представляет собой в значительной мере повторение рассмотренных выше этапов, начиная с постановки задачи и заканчи- вая внесением изменений в сопроводительную документацию.
Описанная схема технологического процесса разработки и эксплуатации программных средств отражает их жизненный цикл.
Длительность и высокая стоимость разработки программных средств обусловливает целесообразность применения индустриальных методов их разработки, тиражирования и распространения. По мнению специалистов, в ближайшее время примерно 20—30 % финансовых средств пользователей, выделяемых на программное обеспечение систем обработки информации, будет затрачиваться на приобретение готовых программных средств.
КОНТРОЛЬНЫЕ ВОПРОСЫ К РАЗДЕЛУ 5
1. Раскройте понятие «гипотеза».
2. Что такое аналогия?
3. В чем состоит содержание понятия «модель»?
4. В каком соотношении находятся понятия «гипотеза», «аналог», «модель»?
5. Дайте определение научного метода «моделирование». 6. Каково соотношение эксперимента и моделирования?
7. Как вы понимаете два подхода — аналитический и имитацион-
íûé?
8. Какие средства моделирования объектов вам известны?
9. Что такое структурный и функциональный подходы к описанию объектов?
10. Расскажите о математическом моделировании. 11. Что такое формализм?
12. Объясните формальную модель объекта. 13. Что такое информационная модель объекта?
14. Перечислите основные этапы решения задачи на компьютере.
443
Раздел 6
АЛГОРИТМИЗАЦИЯ
В результате изучения материала шестого раздела студент должен:
знать:
—основные алгоритмические конструкции;
—способы записи алгоритмов;
—назначение подпрограмм;
уметь:
—разрабатывать простейшие алгоритмы и записывать их
âграфическом представлении;
—использовать графические представления для построения алгоритмов;
—приводить примеры алгоритмов;
—перечислять свойства алгоритмов.
Ì å ò î ä è ÷ å ñ ê è å ó ê à ç à í è ÿ
Целью изучения материала шестого раздела является выработка у студентов основ алгоритмического мышления. Преподаватель должен четко объяснить им, что алгоритм — это организованная последовательность действий, допустимых в определенных случаях, а программа — это алгоритм, записанный на языке, понятном программисту и ЭВМ. При этом студенты должны уметь распознавать, подходит ли данный алгоритм для решения задач данного класса. Важным условием усвоения основ алгоритмизации является четкое понимание сути ветвления, циклов и рекурсии: ветвление в алгоритмах появляется тогда, когда необходимо сделать выбор одного из нескольких действий в зависимости от некоторого условия; любой выбор
444
можно свести к одному или нескольким ветвлениям; при записи ветвлений необходим указатель конца ветвления, отделяющий его от остальной части алгоритма.
Òåìà 6.1
ПОНЯТИЕ АЛГОРИТМА. СВОЙСТВА АЛГОРИТМА.
СПОСОБЫ ЗАПИСИ АЛГОРИТМОВ
6.1.1. Понятие алгоритма
Можно утверждать, что каждый читающий эти строки знаком с термином «алгоритм». Его применяют весьма широко и не только в области вычислительной техники и программирования. Несомненно и то, что у читателя сформировалось свое (пусть даже большей частью интуитивное) понимание смысла этого термина.
В основу процесса алгоритмизации положено фундаментальное понятие математики и программирования — «алгоритм». Слово «алгоритм» происходит от латинизированного воспроизведения арабского имени узбекского математика АльХорезми, жившего в конце VIII — начале IX в., который первым сформулировал правила, позволяющие систематиче- ски составлять и решать квадратные уравнения.
Европейцы, начавшие осваивать современную десятичную систему счисления в XII в., знакомились с трудами арабских ученых, и труд упомянутого выше жителя Хорезма, посвященный правилам счета в десятичной системе счисления, был широко известен. Поэтому и наполнение термина «алгоритм» было следующим: операции над числами.
Со временем прежнее понимание этого термина утратилось, и его стали применять по отношению к одному-единст- венному алгоритму — алгоритму Евклида, который был предназначен для нахождения наибольшего общего делителя пары натуральных чисел (m, n).
Алгоритм Евклида:
1. {Нахождение остатка} r:= m mod n.
2.{Замена} m:=n; n:=r.
3.{Остановка?} Если n 0, то переход к п. 1.
4.{Остановка процесса} m — искомое число.
445
Представленное описание алгоритма — это последовательность шагов, направленных на достижение некоторого результата (наибольшего общего делителя).
Теория алгоритмов — это раздел математики, изучающий общие свойства алгоритмов. Современное понятие «алгоритм» сформировалось в математике в 1920-х гг. Началом системати- ческой разработки теории алгоритмов можно считать 1936 год, и связывают это с публикацией работы А.А. Черча.
Под алгоритмом всегда (и до возникновения строгой теории) понималась процедура, которая позволяла путем выполнения последовательности элементарных шагов получать однозначный результат (не зависящий от того, кто именно выполнял эти шаги) или за конечное число шагов прийти к выводу о том, что решения не существует.
Конечно же это не строгое определение понятия алгоритма, и именно попытки сформулировать такое понятие привели к возникновению теории алгоритмов. Причиной развития этой теории были внутренние проблемы математики, и лишь с возникновением и развитием вычислительной техники и смежных наук выяснилось, что в их основе должна лежать теория алгоритмов. Так стало очевидным прикладное значение новой науки.
В основе формализации понятия «алгоритм» лежит идея построения алгоритмической модели. Составляющими такой модели должны быть конкретный набор элементарных шагов, способы определения следующего шага и т. д. От модели также требуются простота и универсальность. Требование простоты важно для того, чтобы выделить действительно необходимые элементы и свойства алгоритма и облегчить доказательства общих утверждений об этих свойствах. Универсальность необходима для того, чтобы модель позволяла описать любой алгоритм.
Алгоритм — это точное предписание, которое задает алгоритмический процесс, начинающийся с произвольного исходного данного (из некоторой совокупности возможных для конкретного алгоритма исходных данных) и направленный на получение полностью определенного этим исходным данным результата.
Алгоритмический процесс (алгоритмизация) — это процесс последовательного преобразования конструктивных объектов
446
(слов, чисел, пар слов, пар чисел, предложений и т. п.), происходящий дискретными шагами. Каждый шаг состоит в смене одного конструктивного объекта другим.
Поскольку алгоритмы могут применяться к весьма произвольным объектам (числам, буквам, словам, графам, логиче- ским выражениям и т. д.), в определении алгоритма используется специальный термин — «конструктивный объект», объединяющий в себе все эти возможные случаи. Так, в алгоритме Евклида под конструктивными объектами можно понимать пары чисел.
Процесс алгоритмизации решения задачи в общем случае реализуется по следующей схеме:
—выделение автономных этапов процесса решения задачи (как правило, с одним входом и одним выходом);
—формализованное описание содержания работ, выполняемых на каждом выделенном этапе;
—проверка правильности реализации выбранного алгоритма на различных примерах решения задач.
Развитие ЭВМ сделало понятие алгоритма одним из центральных в прикладной математике, так как возникла острая потребность в определении общих способов формирования и единообразного решения целых классов задач управления на основе разработки комплексов универсальных алгоритмов.
Наряду с трактовкой алгоритма в соответствии с ГОСТ 19.004—80 («алгоритм — это точное предписание, определяющее вычислительный процесс, ведущий от варьируемых начальных данных к искомому результату»), существует и иное определение: алгоритм — это конечный набор правил, однозначно раскрывающих содержание и последовательность выполнения операций для систематического решения определенного класса задач за конечное число шагов.
Таким образом, алгоритм представляет собой заранее определенное, точное предписание, которое задает дискретный (пошаговый) процесс, начинающийся определенным образом
èприводящий к результату за конечное число шагов. Алгоритм относится к исходным математическим понятиям, которые не могут быть определены через другие, более простые понятия. Иногда такое или подобное определение называют интуитивным, т. е. понятным из опыта.
447
Каждый алгоритм должен задаваться:
—множеством допустимых исходных данных;
—начальным состоянием;
—множеством допустимых промежуточных состояний;
—правилами перехода из одного состояния в другое;
—множеством конечных результатов;
—конечным состоянием.
В зависимости от конкретного задания этих параметров определяются классы алгоритмов, например алгоритмы линейные, циклические, сортировки и т. д.
Уточнение понятия алгоритма в интуитивном смысле представляется в виде машины Тьюринга, машины Поста, нормального алгоритма Маркова и пр.
Машина Тьюринга — это математическое построение, предназначенное для уточнения понятия алгоритма и называемое машиной потому, что при построении используются некоторые понятия реальных машин — «память», «команда» и пр. Машина получила имя английского математика А. Тьюринга и решает следующую проблему: если для решения задачи можно построить машину Тьюринга, она алгоритмически разрешима.
Машина Тьюринга состоит из неограниченной в обе стороны ленты, разделенной на ячейки, последовательно пронумерованные целыми числами, как положительными, так и отрицательными. В каждой ячейке ленты может стоять любой символ из заданного алфавита, в котором выделен «пустой» символ — признак того, что ячейка пустая.
Машина имеет конечное множество внутренних состояний: начальное (с него начинается работа машины) и конечное, попав в которое машина прекращает работу. Кроме ленты, имеется головка чтения/записи, которая умеет двигаться вперед, назад и стоять на месте, читать содержимое, стирать и записывать символы из данного алфавита.
Машина управляется программой. Программа — это таблица, в каждой клетке которой записана команда. Каждая клетка определяется двумя параметрами — символом алфавита и состоянием машины. Команда — это указание, куда передвинуть головку чтения/записи из текущего состояния, какой символ записать в текущую ячейку и в какое состояние перейдет машина.
448
Можно ли любой алгоритм представить в форме машины Тьюринга? Ответ на этот вопрос дается в виде так называемого тезиса Тьюринга: всякий алгоритм представим в форме машины Тьюринга. Это тезис потому, что его невозможно доказать, так как в нем фигурируют, с одной стороны, интуитивное понятие «всякий алгоритм», а с другой — точное понятие «машина Тьюринга».
Машина Поста — это математическое построение для уточ- нения понятия алгоритма. Машиной называется потому, что при построении используются некоторые понятия реальных машин — «память», «команда» и пр.
Машина получила имя американского математика Э. Поста и решает следующую проблему: если для решения задачи можно построить машину Поста, то она алгоритмически разрешима.
Машина Поста состоит из неограниченной в обе стороны ленты, разделенной на ячейки, последовательно пронумерованные целыми числами, как положительными, так и отрицательными. В каждой ячейке ленты стоит либо признак того, что
âячейке записана метка, либо признак того, что ячейка пустая. Состояние ленты — это данные, какие ячейки заняты, а какие пусты. Кроме ленты имеется головка чтения/записи, которая умеет двигаться вперед и назад, стоять на месте, читать содержимое, стирать и записывать метку.
Машина управляется программой, в которую могут входить
âлюбой комбинации и в любом количестве шесть команд: 1) вправо; 2) влево; 3) поставить метку; 4) стереть метку; 5) передать управление на один номер команды в программе, если
âтекущей ячейке есть метка; если метки нет, то передать управление на другой номер команды; 6) прекратить работу машины.
Состояние машины — это состояние ленты и положение головки чтения/записи.
Несмотря на внешнюю простоту, машина Поста может производить различные вычисления, для чего надо задать начальное состояние машины и программу, которая эти вычисления сделает.
Машина Поста и машина Тьюринга эквивалентны по своим возможностям; разработаны практически в одно и то же время (в 1936 г.) независимо друг от друга.
449
Класс нормальных алгоритмов Маркова и класс алгоритмов, представленных в форме машин Тьюринга и Поста, совпадают.
Нормальный алгоритм Маркова — это математическое построение для уточнения понятия «алгоритм», задается алфавитом А и нормальной схемой подстановок. Алгоритм назван по имени автора — русского математика А.А. Маркова (1856— 1922).
Алфавит — конечное, непустое множество элементов, называемых буквами. Различные сочетания букв образуют слова.
Нормальная схема подстановок — это конечный набор, состоящий из пар слов, где левое слово переходит в правое (но не наоборот).
Нормальным алгоритмом в алфавите А называют следующий алгоритм построения последовательности слов: в качестве начального слова берется само слово Р и к нему применяют по порядку каждую пару из схемы подстановки. Если подстановка возможна, то ее осуществляют и начинают подстановки снача- ла. Если процесс обрывается (нет ни одной допустимой подстановки) на слове Q или приходит в конечную подстановку, то данный нормальный алгоритм преобразовал Р в Q.
Если есть задача: от Р перейти к Q, и доказано, что нельзя построить нормальную схему, то имеет место алгоритмически неразрешимая задача.
Можно ли любой алгоритм представить в виде нормального алгоритма Маркова? На этот вопрос дается ответ в виде так называемого тезиса (гипотезы) Маркова: всякий алгоритм в алфавите А представим в виде нормального алгоритма в этом же алфавите. Это тезис потому, что его невозможно доказать, так как в нем фигурируют, с одной стороны, интуитивное расплывчатое понятие «всякий алгоритм», а с другой — точное понятие «нормальный алгоритм».
6.1.2. Свойства и способы записи алгоритмов
Любой алгоритм обладает следующими свойствами: детерминированностью, массовостью, результативностью, дискретностью и конечностью.
450