Мы рассмотрели простейшие формы записи алгоритмов, ориентированные на использование компьютеров. Однако для реализации алгоритма нужно записать его в виде программы для компьютера на понятном ему языке. В качестве такого языка можно использовать внутренний язык компьютера, связанный с его системой команд. В начале, когда появились первые ЭВМ, программы писались на этом языке. Но вскоре выяснилось, что такой способ записи алгоритмов неудобен: трудоемкость и громоздкость программ, сложность их верификации, т. е. отыскания ошибок. Поэтому возникла потребность в таких языках программирования, которые максимально приближены к естественному человеческому языку и общепринятой математической символике. В этом случае приходится разрабатывать специальные средства перевода (трансляции) программы на внутренний язык компьютера. Однако эти затраты окупаются за счет значительного облегчения процесса программирования алгоритмов.
Развитие языков программирования шло по двум направлениям: машинно-ориентированные языки и машинно-независимые языки. Программа алгоритма на машинно-ориентированном языке по виду напоминает программу на внутреннем языке компьютера. Однако в ней для удобства программиста используется символьная форма записи. Это придает программе наглядность и облегчает отыскание и устранение ошибок. Программист, использующий этот язык, должен иметь ясное представление об устройстве компьютера, его системе команд, способах представления данных и команд, их адресации и т. п. Такой язык называют ассемблером или автокодом. При записи алгоритма на автокоде программист имеет возможность наиболее полно учитывать особенности компьютера. Вследствие этого программа после трансляции получается достаточно простой и быстродействующей.
Алгоритмические языки высокого уровня, никак не связанные с особенностями конкретного компьютера, называются машинно-независимыми. Сегодня в мире имеется несколько сотен таких языков. Часть из них стандартизирована и используется в качестве универсальных языков программирования. К ним, в частности, относятся БЕЙСИК, ФОРТРАН, АЛГОЛ, PL/I и ПАСКАЛЬ.
Одним из первых был создан алгоритмический язык ФОРТРАН. Его название происходит от английского FORTRAN-FORmula TRANslation (перевод формул). Этот язык высокого уровня особенно удобен для решения задач вычислительного характера.
Широко применяется в мире язык АЛГОЛ, название которого происходит от английского ALGOL-ALGOrithmic Language (алгоритмический язык). Чаще всего этот язык используется для моделирования вычислительных алгоритмов.
Большой популярностью пользуется алгоритмический язык БЕЙСИК, разработанный в 1965 г. Его название произошло от английского BASIC-Beginner's All-purpase Simbolic Instruction Code (многоцелевой язык символических инструкций для начинающих). Особенно часто язык высокого уровня используется в режиме диалога человека и компьютера. На его основе разработаны средства автоматизации программирования движений роботов.
Все большее распространение получают языки PL/I, ПАСКАЛЬ и другие универсальные языки. Трансляторы с этих языков имеются практически во всех современных компьютерах. Поэтому достаточно изучить какой-либо один из этих языков, составить на нем программу и ввести в компьютер, имеющий собственный транслятор с этого языка.
Итак, любой алгоритм есть последовательность предписаний, выполнив которые можно перейти за конечное число шагов от условий задачи к ее решению. Уровень алгоритмического языка зависит от степени детализации предписаний. Чем больше детализация, тем ниже уровень языка. С этой точки зрения рассмотренные выше внутренние языки компьютеров и машинноориентированные языки следует отнести к языкам самого низкого уровня. Они требуют полной детализации процесса обработки информации в системе команд компьютера. Поскольку современные компьютеры имеют более 100 различных команд, легко понять, насколько сложно программирование даже на ассемблере.
Машинно-независимые алгоритмические языки не требуют чрезмерной детализации. Поэтому они относятся к языкам высокого уровня.
Можно использовать общепринятые математические символы и некоторые слова из нашего разговорного языка (это значительно упрощает процесс программирования), собирать сложные программы из простых программных модулей. Такой процесс называют модульным программированием.
Однако при использовании языков высокого уровня приходится идти и на определенные издержки. Они связаны с необходимостью разработки специальных трансляторов для перевода программы с алгоритмического языка на внутренний язык компьютера. После трансляции получается программа, которая, как правило, хуже программы, составленной опытным программистом непосредственно на внутреннем языке. Кроме того, трансляция приводит к непроизводительным затратам машинного времени.
Программы на алгоритмическом языке пишутся гораздо быстрее и легче. Они получаются компактными и содержат меньше ошибок. Тем не менее ошибки возможны. Принято различать семантические и синтаксические ошибки.
Семантические (смысловые) ошибки связаны с нарушением логической взаимосвязи различных частей алгоритма или с некорректным использованием данных (например, не допустимо деление на нуль). Синтаксические ошибки порождаются отступлением от жестких правил написания программы на алгоритмическом языке. Они выявляются транслятором, который в процессе перевода программы с алгоритмического языка на внутренний язык компьютера выдает информацию о характере ошибки и ее месте (адресе) в программе.