Разработка алгоритмов является в значительной степени творческим,эвристическим процессом, как правило, требует большой эрудиции, изобретательности, нестандартных и нетрадиционных подходов к решениюзадачи.
Составление программы. Представление алгоритма в форме, допускающей ввод в машину и последующий перевод на машинный язык, от-носится к этапу составления программы (программированию), т. е. разработанный алгоритм задачи необходимо изложить на языке, который будет
понятен ЭВМ непосредственно или после предварительного машинногоперевода. От выбора языка программирования зависит процесс отладкирограммы, во время которого программа принимает окончательный рабочий вид. Таким языком может быть язык программирования Паскаль.
Этот язык был предложен в 1970 г. профессором Никлаусом Виртом из Цюриха (Швейцария). Он был назван в честь известного математика Блеза Паскаля, который изобрел один из первых калькуляторов. Языку Паскаль принадлежит особая роль в современном программировании:опираясь на результаты, полученные при разработке алгоритмическогоязыка Алгол-60, он заложил основы современной методологии программирования. Основной тезис его разработки - «язык должен быть очевидным и естественным отражением фундаментальных и наиболее важныконцепций алгоритмов». Широкое распространение языка Паскаль на всех современных ЭВМ свидетельствует о его высокой практической ценности в различных сферах применения.
Отладка программы. Составление программы представляет собойтрудоемкий процесс, требующий от исполнителя напряженного внимания. Практика показывает, что в вычислениях следует избегать поспеш-ости и придерживаться золотого правила: «лучше меньше, да лучше».Но на предыдущих этапах столько возможностей допустить ошибку, что,как бы мы тщательно ни действовали, первоначально составленная программа обычно содержит ошибки и машина или не может дать ответаили приводит неправильное решение.
Отладка начинается с того, что программа, аккуратно записаннаяна бланке, проверяется непосредственно лицом, осуществившим подго-товку и программирование задачи. Выясняется правильность написания
программы, выявляются смысловые и синтаксические ошибки и т. п. Зам программа вводится в память ЭВМ и ошибки, оставшиеся незаме-ченными, выявляются уже непосредственно с помощью машины.
Опытный пользователь ЭВМ знает, что необходим действенный контроль над процессом вычислений, позволяющий своевременно обнару-
живать и предотвращать ошибки. Для этого используются различного рода интуитивные соображения, правдоподобные рассуждения и контрольные формулы. Начинающий пользователь часто считает отладкуизлишней, а получение контрольных точек - неприятной дополнительной работой. Однако очень скоро он убеждается, что поиск пропущеннойошибки требует значительно большего времени, чем время, затраченноена контроль.Гарантией правильности решения может служить, например:
а)проверка выполнения условий задачи (например, для алгебраического уравнения найденные корни подставляются в исходное уравнениеи проверяются расхождения левой и правой частей);
б) качественный анализ задачи;
в) пересчет (по возможности другим методом).
Для некоторых сложных по структуре программ процесс отладкиможет потребовать значительно больше машинного времени, чем собст-венно решение на ЭВМ, так как плохо спланированные процессы алго-ритмизации, программирования и отладки приводят к ошибкам, которыемогут быть обнаружены лишь после многократных проверок.
Вычисления и обработка результатов. Только после того как появится полная уверенность, что программа обеспечивает получение правильных результатов, можно приступать непосредственно к расчетампо программе.
После завершения расчетов наступает этап использования результатов вычислений в практической деятельности или, как говорят, этап внедрения результатов. Интерпретация результатов вычислений снова относится к той предметной области знаний, откуда возникла задача.
Лекция 2 Алгоритмы, Способы описания.
Под алгоритмом, как правило, понимается точное предписание, которое задает вычислительный процесс, начинающийся из некоторой совокупности исходных данных и направленный на получение полностью определяемого исходными данными результата. Обосновывать принципы алгоритмизации целесообразно в рамках анализа свойств алгоритмов. Выделяют следующие свойства алгоритмов.
1. Дискретность – свойство, отражающее выполнение вычислительного процесса, задаваемого алгоритмом по шагам.
2. Детерминированность – свойство, означающее, что на каждом шаге любой полученный результат определяется результатами, полученными на предшествующих шагах.
3. Элементарность – свойство, согласно которому действие, которое выполняется на каждом шаге должно быть простым.
4. Направленность – свойство, обуславливающее необходимость указания, что является результатом того шага, на котором нельзя выполнить определенную в нем операцию.
5. Массовость – свойство, согласно которому алгоритм может быть применен к любой совокупности из допустимого множества исходных данных.
Одной и той же задаче может соответствовать множество алгоритмов, поэтому, для обоснования выбора одного из них для решения конкретной задачи, применяют совокупность показателей, основными из которых являются следующие.
1. Временная сложность – показатель, отражающий время выполнения алгоритма или количество шагов его выполнения.
2. Емкостная сложность – показатель, по которому производят оценку количества данных, необходимых для выполнения алгоритма.
3. Сложность описания – показатель, отражающий длину описания алгоритма, количество инструкций операторов.
Для представления алгоритма используют различные средства, в том числе граф-схемы алгоритмов, каждая из которых представляет собой граф. Понятие элементарного графа дополнено введением надстройки, которая задает вычисления, каждому из которых соответствует путь в этом графе и последовательность меток узлов, лежащих на этом пути. Узлы графа, с помощью введения типизации, интерпретируются как действия, а дуги задают порядок передачи управления. Для каждого алгоритма существует одна начальная дуга и одна или множество конечных. В табл.1 представлены типы узлов граф-схемы алгоритма в соответствии с ГОСТ 19.701-90 «Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения».
Таблица 1
символ | название | интерпретация |
данные | данные, носитель данных не определён | |
процесс | функция обработки данных любого вида (выполнение определённой операции или группы операций, приводящие к изменению значения, формы или размещения информации или к определению, по которому из нескольких направлений потока следует двигаться) | |
предопределённый процесс | предопределённый процесс, состоящий из одной или нескольких операций или шагов, которые определены в другом месте (в подпрограмме, модуле) | |
подготовка | модификация команды или группы команд с целью воздействия на некоторую последующую функцию | |
решение | решение или функция переключательного типа, имеющая один вход и ряд альтернативных выходов, один и только один из которых может быть активизирован после вычисления условий, определённых внутри этого символа; соответствующие результаты вычислений могут быть записаны по соседству с линиями, отображающими эти пути | |
граница цикла | начало и конец цикла; обе части имеют один и тот же идентификатор; условия инициализации, приращения, завершения, и т.д. помещаются внутри символа в начале или в конце в зависимости от расположения операции, проверяющей условия | |
соединитель | выход в часть схемы и вход из другой части схемы; используется для обрыва линии и продолжении её в другом месте; соответствующие символы-соединители должны содержать одно и то же уникальное обозначение | |
терминатор | вход из внешней среды и выход во внешнюю среду(начало и конец программы) | |
_______________ | линия | поток данных или управления; для направлений справа -налево и снизу-вверх добавляются стрелки |
- - - - - - - - - - - - - - | пунктирная линия | используется для обведения аннотируемого участка |
- - - - - - - - - [ | комментарий | пояснительные записи и примечания |
______ . . . _____ | пропуск | пропуск символа или группы символов, в которых не определены ни тип ни число символов; используется только в символах линии или между ними; служит для отображения общих решений с неизвестным числом повторений. |
Приведем основные свойства граф-схем.
1. Графическое представление.
2. Поддержка описания управляющей части алгоритма.