В чем недостаток команд машинного языка? В том, что действия, вызываемые этими командами, очень мелки. Поэтому программа выполнения даже очень простого задания будет состоять из большого числа команд. Это все равно, что строить дом не из кирпичей, а из косточек домино, - построить можно, но слишком долго и утомительно (зато орнамент из кирпичей на этом доме получится плохой, грубый, из косточек домино – гораздо богаче и подробнее).
Поскольку этот недостаток машинного языка был давным-давно понятен всем программистам, то они составили из команд машинного языка процедуры[2] для выполнения наиболее популярных маленьких заданий, таких как:
· Нарисовать кружочек заданного размера в заданном месте экрана
· Нарисовать прямоугольник заданного размера и формы в заданном месте экрана
· Нарисовать отрезок прямой
· Покрасить заданным цветом определенную область экрана
· Воспроизвести мелодию по заданным нотам
· Написать на экране заданное слово, заданный текст
· Запомнить слово или текст, введенные с клавиатуры
· Вычислить математическую формулу
Как видите, действия, вызываемые этими процедурами, гораздо более крупные, чем у команд машинного языка. Поэтому эти процедуры более удобны для написания программ, хотя бы для таких, как программа, рисующая синюю тележку с надписью "Игрушки". Для ее написания достаточно согласиться с тем, что колесо - это кружочек, а корпус - прямоугольник.
Конечно, хотелось бы иметь все подобные процедуры внутри компьютера. Поэтому давным-давно существуют дискеты и компакт-диски, на которых записаны целые "сборники" таких процедур. И каждый желающий может взять дискету, переписать ее содержимое в компьютер и пользоваться им.
Процедуры на такой дискете записаны не разобщенно, а в комплексе, как составные части особой большой программы. Если мы перепишем эту большую программу в компьютер и запустим ее на выполнение, то она позволит человеку, во-первых, писать собственные программы из упомянутых процедур, а во-вторых, сделает этот процесс удобным, то есть будет обнаруживать многие ошибки в ваших программах, позволит быстро запускать их на выполнение, исправлять, переписывать на дискету и т.д.
Называют такую комплексную программу сложно и по-разному, например, "Среда и компилятор языка программирования высокого уровня". Основное для нас в этом названии - понятие "язык программирования" или будем говорить проще - "язык". Но если язык, то какой? У людей есть русский, английский, китайский языки. Что такое любой из этих языков общения людей? Грубо говоря, это набор букв, слов, знаков препинания и правил, по которым все эти элементы нужно выстроить в цепочку, чтобы получить правильное предложение. Язык программирования – примерно то же самое. Важнейшая часть языка программирования – набор правил, по которым различные объекты (в том числе и обращения к упомянутым процедурам) нужно выстроить в цепочку, чтобы получить правильную программу. Строго говоря, процедуры не являются составной частью языка, однако, вы должны знать, что держа в руках дискету или компакт-диск с надписью “Turbo Pascal” или «C++» или какой-либо другой язык, вы держите в руках целый комплекс программ, который содержит и большое количество этих самых процедур и средства для удобной разработки ваших программ с их использованием.
Языков программирования, как и человеческих языков, придумано много. Зачем? Причина - в разнообразии потребностей программистов, в разных уровнях их квалификации и во многом другом. Так, начинающим вряд ли стоит предлагать Ассемблер, а профессионалу не нужен Лого. Часто разные языки ориентированы на разные предметные области. Например, язык Пролог позволяет удобно описывать логические взаимосвязи в окружающем нас мире, Лого позволяет удобно рисовать фигуры и снабжен для этого соответствующим набором процедур, а вот решать сложные математические задачи с его помощью лучше и не пытаться.
Программистам пока еще не удалось создать язык, удовлетворяющий всех, да и неизвестно, возможно ли вообще его создать, и надо ли.
Вот некоторые наиболее популярные языки программирования:
Лого
Logo
язык, рассчитанный на детей, позволяющий просто и занимательно рисовать картинки и программировать простейшие игры
Бэйсик
Basic
язык как для начинающих, так и для профессиональных программистов
Паскаль
Pascal
универсальный язык, позволяющий прекрасно программировать самые разные задачи
Си
C
сложный, мощный язык для профессиональных программистов
Ассемблер
Assembler
сложный, мощный язык, с очень мелкими командами, близкими к командам машинного языка
Лисп, Пролог
LISP, Prolog
языки для создания искусственного интеллекта, роботов
Во всех человеческих языках есть слова «ходить», «есть», «спать», обозначающие понятия, общие для всех языков. Точно так же большинство языков программирования позволяет выполнять общепринятые процедуры, такие, например, как вывод информации на экран, только записываются обращения к этим процедурам по-разному. Прикажем, например, компьютеру к трем прибавить два и результат показать на экране монитора. Вот как эта процедура вызывается на языке Лого:
покажи 3 + 2
А вот как она вызывается на Паскале:
Write (3+2)
В языках программирования приказы, которые отдают на данном языке, называют не только обращениями к процедурам, но и командами (язык Лого и др.), и операторами (языки Бэйсик, Паскаль и др.). Между понятиями «обращение к процедуре» и «оператор» существует значительная разница, о которой вы узнаете позже, однако сейчас вам важно знать только одно – команда Лого, обращение к процедуре и оператор являются приказами. Не нужно их путать с командами машинного языка, так как они гораздо «крупнее». Так команда языка Лого покажи 3 + 2 фактически является обращением к процедуре из нескольких команд машинного языка, которые сначала приказывают компьютеру вычислить сумму, а потом показать ее на экране. Нет команд более мелких, чем команды машинного языка, поэтому любая команда, оператор или процедура на любом другом языке (кроме Ассемблера) сводится в конце концов к выполнению набора команд машинного языка.
Пример настоящей программы для компьютера на языке Лого
Давайте напишем настоящую программу на настоящем языке программирования. Для этого выберем язык Лого. Он предназначен в основном для рисования. Напишем программу для рисования домика, вот такого:
Начнем с того, что у нас в руках находится дискета с языком Лого. Вставим ее в компьютер. После нескольких нажатий на клавиши посредине экрана возникает вот такая маленькая черепашка:
С этого момента компьютер готов принимать нашу программу и выполнять ее. Занимательность и простота работы с Лого заключается в том, что многие его команды являются командами для черепашки нарисовать на экране те или иные разноцветные линии, что-нибудь покрасить и т.п. Передвигается черепашка по экрану маленькими шагами. Размер экрана по горизонтали и вертикали - несколько сотен шагов.
Из всего длинного списка команд Лого нам для рисования домика понадобятся только две. Приведем примеры их записи с пояснением:
ВПЕРЕД 28
По этой команде черепашка продвинется вперед на 28 шагов, оставляя за собой тонкий след, то есть фактически она нарисует отрезок прямой длиной в 28 шагов.
НАЛЕВО 60
По этой команде черепашка повернется на месте налево на 60 градусов.
А теперь напишем программу:
Программа
Пояснения
ВПЕРЕД 40
Черепашка идет вверх и рисует правую стенку дома
НАЛЕВО 90
Собираемся рисовать не крышу, а потолок
ВПЕРЕД 50
Черепашка рисует потолок
НАЛЕВО 90
Собираемся рисовать левую стенку дома
ВПЕРЕД 40
Черепашка рисует левую стенку дома
НАЛЕВО 90
Собираемся рисовать пол
ВПЕРЕД 50
Черепашка рисует пол
НАЛЕВО 90
Готовимся добраться до крыши по правой стене
ВПЕРЕД 40
Черепашка забирается на крышу по правой стене
НАЛЕВО 45
Собираемся рисовать правый скат крыши
ВПЕРЕД 36
Черепашка рисует правый скат крыши
НАЛЕВО 90
Собираемся рисовать левый скат крыши
ВПЕРЕД 36
Черепашка рисует левый скат крыши
Как и программа для нашего воображаемого робота, любая программа для компьютера требует абсолютной точности записи. Нельзя допускать орфографических ошибок - НАЛЕВА, нельзя записывать команды по-другому - ВЛЕВО. Компьютер в этом случае просто откажется выполнять программу. Но если мы, соблюдая эти формальные правила, все же по невнимательности допустим ошибку в программе, компьютер программу выполнять не откажется и, выполнив ее, получит неправильный результат. Например, если в программе пятую сверху команду (для рисования левой стены) мы запишем так - ВПЕРЕД 60 (а не ВПЕРЕД 40), то домик будет выглядеть так:
Так же, как и в случае с роботом, если мы в процессе выполнения программы увидим, что черепашка рисует что-то не то, у нас не будет возможности на ходу исправить программу. Нам или придется ждать, когда она дорисует все до конца или нажатием на клавиши все стереть с экрана и привести черепашку в исходное состояние. После этого программу можно исправлять.
Это я говорил о программном режиме. Лого допускает и командный режим, когда черепашка выполняет команду сразу же, как получит ее с клавиатуры.
Может ли черепашка поумнеть? Да. Объясните черепашке, что составленная программа есть процедура с именем ДОМИК – и отныне вам достаточно будет отдать команду ДОМИК – и черепашка его нарисует.