- •1.1. Формальная постановка задачи
- •1.2. Выбор метода решения
- •1.3. Внешняя спецификация программы
- •1.4. Разработка алгоритма
- •1.5. Кодирование алгоритма на языке программирования
- •1.6. Испытания программы на тестах
- •Вопросы для самоконтроля
- •2. Язык для записи алгоритмов
- •2.1. Базовые типы величин
- •2.2. Объявление величин в алгоритме
- •2.3. Базовые операции
- •2.4. Управляющие структуры
- •2.5. Структура алгоритма
- •Вопросы для самоконтроля
1.4. Разработка алгоритма
Существует несколько определений алгоритма. Мы приведем неформальное определение алгоритма, которое полезно с позиций содержания данного этапа разработки программы.
Алгоритм – упорядоченная совокупность действий, приводящая за конечное число шагов к результатам, соответствующим исходным данным. Любой алгоритм предполагает исполнителя. Исполнителем алгоритма может быть человек или автоматическое устройство. Очевидно, что набор действий зависит от возможностей исполнителя, и что любой исполнитель умеет выполнять ограниченный набор действий. А для случая, когда разработчик алгоритма не является его исполнителем, необходимо каким-либо образом представить его в такой форме, чтобы он был понятен и доступен исполнителю.
Компьютер – автоматическое устройство, которое может исполнить алгоритм только в том случае, если алгоритм представлен в виде упорядоченной совокупности элементарных действий, которые называют командами. Полный набор команд компьютера называется системой команд. Компьютеры разных фирм-производителей и даже разных моделей одной и той же фирмы, как правило, имеют несовпадающие системы команд. Отсюда становится очевидным, что представлять алгоритм сразу на уровне системы команд конкретного компьютера в подавляющем большинстве случаев нецелесообразно, поскольку перенести алгоритм на компьютер с отличающейся системой команд без переделки невозможно. Кроме того, разработчик алгоритма в этом случае обязан хорошо знать систему команд и особенности операционной системы того компьютера, на котором будет исполняться разработанный алгоритм. Эти обстоятельства существенно ограничивают круг лиц, которые могут в разумные сроки и качественно решить задачу сразу на языке компьютера (в среде программистов говорят – в кодах компьютера).
Кроме того, язык системы команд – искусственный, и программисты (в первую очередь, непрофессиональные) все равно вначале должны представить алгоритм на естественном и понятном для них языке. Однако живые естественные языки (русский, английский и другие), кроме несомненных достоинств, имеют и один существенный недостаток применительно к записи алгоритмов: запись на таком языке может быть неоднозначной, в связи с чем разные исполнители могут интерпретировать ее неодинаково. А это недопустимо. Поэтому для записи алгоритмов используются искусственные языки. Именно их стали называть алгоритмическими языками. Те из этих языков, которые в качестве исполнителей предполагают компьютеры, называются языками программирования. Средства этих языков должны быть такими, чтобы на них можно было представить алгоритм, отвечающий следующим основным свойствам: однозначность, результативность, массовость, правильность.
Однозначность алгоритма заключается в однозначности правил его исполнения любым исполнителем. Результативность алгоритма означает, что его исполнение завершается определенными результатами. Результативность алгоритма – наиболее важное свойство алгоритма, поскольку деятельность, не приводящая ни к каким результатам бесполезна. Массовость алгоритма заключается в возможности его применения для решения целого класса задач с различными конкретными исходными данными. Правильность алгоритма заключается в получении результатов, однозначно соответствующих конкретным исходным данным.
Очевидно, что для лиц, начинающих изучение программирования для компьютеров и не знающих, или знающих недостаточно хорошо языки программирования, разработку алгоритмов значительно проще проводить на языке, ориентированном на возможности человека. За короткую историю существования компьютеров было предложено несколько видов таких языков. На сегодня наиболее популярны два вида языков для записи алгоритмов, используемые на этапе разработки алгоритма – язык блок-схем и псевдокод.
На языке блок-схем алгоритм изображается графически. При этом используется некоторый ограниченный набор операций, каждая из которых имеет свое собственное обозначение (образ). Псевдокод – язык, на котором алгоритм записывается в виде текста, предложения которого описывают определенные действия. Языка псевдокода также содержат ограниченный набор действий и очень несложный синтаксис. И хотя начинающим язык блок-схем представляется более предпочтительным, чем псевдокод, последний значительно удобней.
К основным достоинствам псевдокода относится следующее:
алгоритм на нем записывается с использованием лексики на родном для разработчика языке, в связи с чем его легко понять и выполнить (однозначно);
запись алгоритма не зависит не только от модели компьютера, но и от языка программирования, вследствие чего алгоритм при необходимости можно перевести без изменений (перекодировать) на заданный язык программирования.
Язык псевдокода и его использование будут подробно рассматриваться в дальнейшей части пособия. Здесь же отметим, что данный этап является наиболее трудоемким среди прочих. Процесс разработки алгоритма должен быть организован так, чтобы обеспечить его правильность. А это достигается в результате применения определенной технологии.
Под технологией понимают определенную совокупность средств, методов и действий, направленных на достижение поставленной цели. А когда речь идет о разработке (создании) программ, термин технология используется в сочетании со словом “информационная”. Информационная технология – процесс, использующий совокупность средств и методов сбора, обработки и передачи первичной информации для получения информации нового качества (информационного продукта).
В дальнейшей части пособия мы подробно познакомимся с технологией разработки, которая получила название метода пошаговой детализации. Результатом данного этапа будет алгоритм решения задачи, записанный на языке псевдокода, а также набор тестов, которые были разработаны и использовались в процессе разработки алгоритма. Определение теста и принципы разработки тестов будут рассматриваться позже.
