Алгоритм задается в той форме, которая понятна человеку. Алгоритм можно задавать математической формулой, словесным описанием, графиком, логической схемой и т.п.
Наиболее распространенные способы задания алгоритмов следующие:
Словесный способ– отражает содержание выполняемых действий средствами естественного языка. К достоинствам этого способа описания следует отнести его общедоступность, а также возможность описывать алгоритм с любой степенью детализации. Однако словесное описание алгоритмов на любом естественном языке обладает некоторыми недостатками, а именно: возможность неоднозначного понимания предписаний и утверждений; громоздкость, связанная с избыточностью разговорных языков (наличие в предложениях слов, без которых можно обойтись); отсутствие наглядности логических связей между частями алгоритма.
Формально-словесный способ – основан на записи содержания выполняемых действий с использованием изобразительных возможностей языка математики, дополненного с целью указания необходимых пояснений средствами естественного языка. Данный способ, обладая всеми достоинствами словесного способа, вместе с тем более лаконичен, а значит, и более нагляден, имеет большую формализацию, однако также не является строго формальным.
Графический способ (в виде блок-схемы) – представляет собой изображение логико-математической структуры алгоритма, при котором все этапы процесса обработки данных представляются с помощью определенного набора геометрических фигур (блоков), имеющих строго определенную конфигурацию в соответствии с характером выполняемых действий. Таким образом, блок-схема – это графическое изображение структуры алгоритма в виде геометрических фигур или блоков.
Алгоритмический язык – это язык записи алгоритма.
Последовательность команд, записанных на алгоритмическом языке, называетсяпрограммой. Соответственно, алгоритмические языки представляют собой средства описания данных и алгоритмов решения задач, и разработаны для составления программы пользователем. Они отличаются друг от друга различными свойствами и областью применения.
1. Класс машинно-зависимых языков. Центральный процессор ЭВМ предназначен для выполнения команд, которые представляются в виде групп двоичных цифр (битов), т.е. в виде последовательностей из нулей и единиц. Команды, представленные в таком виде, считаются записаннымив машинном коде или намашинном языке.
Двоичный код очень удобен для использования в ЭВМ, но чрезвычайно не удобен для человека и поэтому в наши дни почти не применяется. Цифровая форма записи команд, необходимость разбивать алгоритм на мелкие операции делают программу ненаглядной и громоздкой, затрудняют ее отладку. "Индивидуальный характер" языков ЭВМ исключает прямой перенос программы с машины одного типа на машину другого типа. Процесс программирования на машинном языке сложен и трудоемок, требует тщательности, большого внимания, хорошего знания особенностей ЭВМ, на которых предстоит производить расчеты.
Переход от более абстрактной формы записи к машинному коду можно автоматизировать. Первые программы, которые выполняли такое преобразование, назывались ассемблерами. Главное преимущество ассемблеров в том, что они дают возможность пользователям оперировать символическими наименованиями, состоящими из букв и цифр, вместо того, чтобы запоминать их двоичные эквиваленты.
Язык ассемблера делает доступными все программно-управляемые компоненты компьютера, поэтому он применяется для написания программ, использующих специфику конкретной аппаратуры. Ассемблер – это наиболее трудоемкий язык программирования, и из-за его низкого уровня (уровень языка характеризует степень его близости к естественному, человеческому языку) не удается построить средства отладки, которые существенно снизили бы трудоемкость разработки программ. Команды Ассемблера очень примитивны, так как соответствуют операциям, которые центральный процессор может непосредственно выполнить, – например, команды сравнения двух символов или сложения двух чисел, поэтому программирование на ассемблере требует от программиста детальных знаний технических компонентов ПК. Ассемблер используется, в основном, для системного программирования (компоненты ОС, драйверы и др.).
2.Класс машинно-ориентированных языков. Данный класс представляют языки группы С, С++, Турбо С. Разработчики данных языков попытались объединить возможности ассемблера со встроенными структурами данных.
3. Класс универсальных языков. Важным шагом в развитии языков программирования было появлениемашинно-независимых языков. Разработчики этих языков стремились: во-первых, создать языки, воспринимаемые любым компьютером; во-вторых, максимально учесть специфику класса задач, для решения которых данный язык предполагалось использовать. Например, для многих научно-технических задач характерны большие расчеты по сложным формулам, поэтому в ориентированные на такие задачи языки вводят удобные средства для их записи. Использование понятий, терминов, символов, привычных для специалистов соответствующей области знаний, облегчает им изучение языка, упрощает процесс составления и отладки программ.
К настоящему времени разработано большое количество машинно-независимых языков программирования: Бейсик, Паскаль, Фортран и др. Машино-независимые языки обычно называютязыками высокого уровня.
Каждая команда языка высокого уровня обычно соответствует сразу нескольким машинным командам. В связи с этим для различных ЭВМ можно использовать один абстрактный, т.е. не встроенный в определенный процессор, язык высокого уровня.
Важным преимуществом алгоритмических языков высокого уровня по сравнению с машинным языком является их универсальность, независимость от конкретного типа ЭВМ. Программа, написанная на таком языке, может выполняться на разных машинах, при переходе на другую ЭВМ не требуется никаких переработок.
Чтобы программы на языках высокого уровня работали, необходимы специальные программы-переводчики. Программа-переводчик называетсятранслятором. Транслятор переводит исходную программу (на языке высокого уровня) в объектную программу, т.е. программу на машинном языке. Трансляторы делятся на компиляторы и интерпретаторы.
Компилятор переводит исходную программу в объектную целиком. Интерпретатор транслирует и выполняет команды исходной программы по одной.
4. Класс проблемно-ориентированных языковпредставлен языками Лого, РПГ, системой программирования GPSS и др. Язык Лого был создан с целью обучения школьников основам алгоритмического мышления и программирования. Лого – диалоговый процедурный язык, реализованный на основе интерпретатора с возможностью работы со списками и на их основе с текстами, оснащенный развитыми графическими средствами.
РПГ, или генератор отчетов, представляет собой язык, включающий многие понятия и выражения, которые связаны с машинными методами составления отчетов и проектирования форм выходных документов. Язык используется главным образом для печати отчетов, записанных в одном или нескольких файлах баз данных.
Система программирования GPSS ориентирована на моделирование систем с помощью событий. В терминах этого языка легко описывается и исследуется класс моделей массового обслуживания и другие системы, работающие в реальном масштабе времени.
5. Класс функциональных языковпрограммирования представлен языками Лисп, Пролог и др. Лисп является инструментальным средством для построения программ с использованием методов искусственного интеллекта. Особенность этого языка заключается в удобстве динамического создания новых объектов. В качестве объектов могут выступать и сами исходные объекты. В настоящее время для Лиспа определились две сферы активного применения: проектирование систем искусственного интеллекта и анализ текстов на естественном языке.
В последние годы развивается объектно-ориентированныйподход к программированию. Наиболее полно он реализован в языках Форт, СМОЛТОК, Delphi и т.п. Например, Форт сочетает в себе свойства операционной системы, интерпретатора и компилятора одновременно. Основной чертой языка является его открытость. Программист может легко добавлять новые операции, типы данных и определения основного языка. Форт позволяет поддерживать многозадачный режим работы, использует принцип одновременного доступа программ.