взять число, находящееся в счетчике, в качестве ответа
В силу своих особенностей псевдокоды, как и другие, описанные ранее, средства записи алгоритмов, ориентированны на человека.
Языки программирования. При записи алгоритмов в словесной форме, в виде схемы или на псевдокоде допускается определенный произвол при изображении команд. Вместе с тем такая запись настолько точна, что позволяет человеку понять суть задачи и исполнить алгоритм.
Однако на практике в качестве исполнителей алгоритмов используются специальные автоматы – ЭВМ. Поэтому алгоритм, предназначенный для исполнения на ЭВМ, должен быть записан на языке, "понятном" ЭВМ. И здесь на первый план выдвигается необходимость точной записи команд, не оставляющей места для произвольного толкования исполнителем. Следовательно, язык для записи алгоритма должен быть формализован. Такой язык принято называть языком программирования, а запись алгоритма на этом языке – программой для ЭВМ.
В настоящее время насчитывается несколько сотен языков программирования, рассчитанных на разные сферы применения ЭВМ, т.е. на разные классы решаемых с помощью ЭВМ задач. Эти языки классифицируются по разным уровням, учитывая степень зависимости языка от конкретной ЭВМ.
На самом нижнем уровне классификации находится машинный язык, т.е. внутренний язык ЭВМ, на котором в конечном итоге представляется и исполняется программа. Однако непосредственная запись алгоритма на машинном языке требует от разработчика чрезмерной детализации алгоритма, в результате чего запись получается не наглядной и трудной для понимания. Поэтому разработчики алгоритмов используют, как правило, языки программирования более высокого уровня, в которых принята символическая форма записи, близкая к общепринятой математической.
Однако создание языков программирования высокого уровня само по себе не обеспечивало полностью возможность решения задачи на ЭВМ. Для этого необходим перевод (трансляция) программы с языка высокого уровня на язык машины.
В силу того, что язык программирования высокого уровня и машинный язык формализованы, то трансляция программы может быть автоматизирована и выполнена с помощью той же ЭВМ. При этом человек воспринимает это так, будто ЭВМ непосредственно понимает язык высокого уровня и выполняет алгоритм, записанный на этом языке. Трансляция осуществляется с помощью специальных программ – трансляторов. Для каждого языка программирования предназначен свой транслятор. Исходными данными для транслятора является текст программы на языке высокого уровня, а результатом – текст программы на машинном языке. При этом исходная и результирующая программы эквивалентны в том смысле, что реализуют один и тот же алгоритм.
Таким образом, транслятор ставит в соответствие виртуальной машине физическую. На самом деле все обстоит несколько сложнее. Полученная в результате трансляции программа исполняется на ЭВМ под управлением операционной системы, которая фактически и выделяет этой программе физические ресурсы ЭВМ. Поэтому на самом деле транслятор ставит в соответствие виртуальной машине другую виртуальную машину, а отображение последней на реальную физическую машину осуществляет операционная система.
Транслятор выполняет следующие основные функции:
1. производит синтаксический анализ исходного текста программы, т.е. выделяет все основные компоненты, из которых состоит программа. В процессе этого анализа выявляются всевозможные ошибки в исходном тексте. Такие ошибки называются синтаксическими (связанными с неправильной записью программы на исходном языке программирования, например, с использованием недопустимых операторов или недопустимых последовательностей символов, отсутствием необходимых описаний объектов языка и т.д.);
2. производит генерацию машинной команды – непосредственную трансляцию исходной программы на машинный язык.
К трансляторам предъявляются различные требования. Например, если транслятор применяется для трансляции небольших программ, то к нему предъявляется требование выдачи наиболее полных и подробных сообщений об обнаруженных ошибках. Кроме того, транслятор должен работать достаточно быстро, а к качеству полученных машинных программ не предъявляется повышенных требований.
Если же транслятор используется для трансляции больших и сложных программ, предназначенных для многократного использования, то здесь, наоборот, не столь важна скорость трансляции, зато к качеству полученных машинных программ предъявляются повышенные требования. Поэтому такие трансляторы содержат специальные блоки оптимизации, предназначенные для получения эффективных машинных программ.
В связи с этим в операционной системе может быть несколько трансляторов для одного и того же языка программирования.
Алгоритмы, предназначенные для решения широкого круга практических задач, связаны с преобразованием информации. При этом под информацией понимают вполне конкретные величины - числовые, текстовые, графические и т.д.
Алгоритмы можно представлять как некоторые жесткие структуры, состоящие из отдельных базовых элементов. Естественно, что при таком подходе к алгоритмам изучение основных принципов их конструирования должно начинаться с изучения базовых элементов алгоритмов. Для их описания будем использовать язык блок-схем.
1. Простые команды. Элементарной структурной единицей любого алгоритма является простая команда, обозначающая один элементарный шаг обработки или отображения информации.
При исполнении алгоритма обработка информации состоит в изменении значений некоторых величин, с которыми работает алгоритм. Величины могут быть постоянными и переменными. Значения постоянных величин остаются неизменными в процессе исполнения алгоритма, а значения переменных могут изменяться.
С величиной помимо значения связано также имя, используемое для обозначения. В качестве имени используется идентификатор, т.е. последовательность букв и цифр, начинающаяся с буквы, например, x, x1 Alfa,...
Значение переменной величины может быть изменено с помощью команды присваивания, имеющей общий вид
< идентификатор>:= <выражение>
В угловых скобках записываются основные понятия, которые в реальных командах заменяются на конкретные имена и конкретные выражения. Знак присваивания (:=) обозначает указание исполнителю выполнить действие, состоящее в том, чтобы
вычислить значение выражения, стоящего в правой части команды присваивания;
присвоить это значение переменной, имя которой стоит в левой части команды. Например, команда x:=1 означает, что переменной х присваивается значение 1, а команда y:=y+1 - что переменной y присваивается значение, которое на 1 больше прежнего ее значения.
Переменной величине может быть присвоено значение и с помощью команды ввода, которая передает исполнителю значение переменной из некоторого внешнего источника. Например, команда
ввод (x, y)
означает, что исполнитель получает из внешнего источника два значения, которые должны быть присвоены переменным x, y. Аналогичная команда вывода
вывод (x, y)
означает, что исполнитель должен выдать для отображения значения величин x, y.
Простая команда на языке блок-схем изображается в виде функционального блока, имеющего один вход и один выход:
Присваивание ввод-вывод
2. Составные команды. Из простых команд и проверки условий образуются составные команды, имеющие более сложную структуру. Рассмотрим основные типы составных команд алгоритма.
Команда следования. Эта команда образуется из последовательности команд, следующих одна за другой. При записи на псевдокоде команды отделяются друг от друга с помощью точки с запятой. При исполнении алгоритма команды выполняются в том порядке, как они записаны. Для обозначения начала и конца команды следования используются служебные слова началои конец.
В общем виде команда следования может быть представлена так: