Характеристика языка программирования Паскаль.
Одним из наиболее популярных языков программирования является язык Паскаль. Первая версия языка программирования Паскаль была разработана на кафедре информатики Стэнфордского университета швейцарским ученым Никлаусом Виртом в 1968 году, и названа в честь французского ученого Блеза Паскаля. Прошло много времени с момента появления Паскаля на рынке программных продуктов, прежде чем он получил всеобщее признание вследствие разработки языка программирования Турбо Паскаль (ТП) – диалекта языка, созданного американской фирмой Борланд. Эта фирма объединила очень быстрый компилятор с редактором текста и добавила к стандартному Паскалю мощное расширение, что способствовало успеху первой версии этого языка. С тех пор Турбо Паскаль значительно расширился. Появились новые графические процедуры, возможность использования при написании программ языка программирования низкого уровня Ассемблер, возможность создавать объектно–ориентированные программы и многое другое. В лингвистической концепции Паскаля пропагандируется системный подход, выражающийся, в частности, в расчленении крупных проблем на меньшие по сложности и размеру задачи, легче поддающиеся решению Набор операторов стандартного Паскаля относительно мал и легко изучаем. Но это порождает проблему расширения языка в приложениях. В Турбо Паскале эта проблема решается за счет поставок большого количества библиотек разнообразных процедур, готовых к употреблению в прикладных программах.
Влияние Паскаля ощущается в настоящее время в разных языках программирования. Так, среди новых диалектов Бейсика есть Паскаль с символикой Бейсика. Даже в язык СИ встраивается все больше элементов, порожденных Паскалем.
С момента создания первой версии языка Паскаль прошло много времени и язык значительно преобразился, но тем не менее стандартный Паскаль является основой более поздних версий Турбо Паскаля. В дальнейшем в описании языка будут встречаться оба эти названия. Будем использовать название Паскаль, если утверждение верно и в стандартном Паскале и в Турбо, а Турбо Паскаль, если в последних версиях имеются отличия. При изучении сложных конструкций языка имеет смысл говорить только о Турбо Паскале.
Алфавит языка Паскаль
Любой естественный язык состоит из нескольких основных элементов: символов, слов, словосочетаний и предложений. В алгоритмическом языке программирования имеются аналогичные структурные элементы: символы, слова, выражения (словосочетания) и операторы (предложения). При этом слово образуется из последовательности символов, выражение представляет собой группу слов, а оператор – определенную комбинацию слов и выражений.
Язык программирования Паскаль, как и любой другой, имеет свой алфавит. Алфавитом языка программирования называют набор символов (разрешенный к использованию и воспринимаемый компилятором), с помощью которого могут быть образованы величины, выражения и операторы данного языка. Алфавит языка Паскаль включает в себя все символы, представленные в кодировочной таблице, которая в настоящий момент загружена в оперативную память или хранится в ПЗУ компьютера. Каждому символу алфавита соответствует индивидуальный числовой код от 0 до 255. Символы с кодами от 0 до 127 представляют собой так называемую основную таблицу кодов ASCII. Их состав и порядок определены американским стандартом на коды обмена информацией (идентичны для всех IBM–совместимых компьютеров).
Символы, используемые для составления идентификаторов:
– латинские строчные и прописные буквы,
– арабские цифры от 0 до 9,
– символ подчеркивания (в Турбо Паскале).
Символы разделители:
– пробел, основное назначение которого разделение ключевых слов и имен,
– управляющие символы (ASCII – коды от 0 до 31). Эти символы могут применяться при описании строчных и символьных констант. Управляющие символы с ASCII – кодом 9 (табуляция), а также 10 и 13 (замыкающее строку) используются в качестве разделителей при написании программ.
Специальные символы, выполняющие определенные функции при построении различных конструкций языка:
+ – * /{ } [ ] ( ) < > / ? ‘ : ; ^ # @ $
Составные символы – группа символов, которые воспринимаются компилятором как единое целое:
<= => := (* *) (. .) ..
“Неиспользуемые” символы, символы так называемой расширенной таблицы ASCII, то есть символы, имеющие коды от 128 до 255 ( в этой области находятся символы алфавита русского языка и символы псевдографики на IBM–совместимых компьютерах), а также некоторые символы из основной таблицы ASCII (например,: &, !, %, “ и другие). Их можно использовать в тексте комментариев и в виде значений констант строк или констант символов.
Зарезервированные слова (BEGIN, END, PROGRAM и другие), несущие определенную смысловую нагрузку в языке программирования. Зарезервированное слово – это слово, которое в языке Паскаль имеет определенное смысловое значение. Еще говорят служебное слово или ключевое слово – это слова синонимы. Имя служит для обозначения каких–либо объектов. В языке Паскаль различают два вида имен: стандартные и даваемые пользователем ЭВМ.
Структура программы на Паскале
Программы, написанные на языке программирования Турбо Паскале, строятся в соответствии с правилами, представляющими собой несколько расширенные и “ослабленные” правила синтаксиса стандартного Паскаля. Приведем пример программы на Турбо Паскале. Надо сразу подчеркнуть, что программа написана для процесса обучения, поскольку в жизненной ситуации она не пригодится.
PROGRAM Addition;
{ ADDITION.PAS – Программа суммирования двух введенных целых чисел}
VAR
Number_1, Number_2, Sum: INTEGER;
BEGIN
Write (‘ Введите первое число:’);
ReadLn (Number_1);
Write (‘Введите второе число:’);
ReadLn (Number_2);
Sum := Number_1 + Number_2;
WriteLn (‘ Сумма введенных чисел равна: ‘,Sum);
END.
Любую программу, написанную на Паскале можно условно разделить на две основные части:
– раздел объявлений и описаний;
– раздел основного блока.
В разделе объявлений и описаний программист сообщает компилятору, какими идентификаторами он обозначает данные (константы и переменные), а также определяет собственные типы данных, которые он в дальнейшем намеревается использовать в данной программе. В Турбо Паскале есть возможность подключать используемые в программе объекты, описанные в другом месте. Такие объекты называются модулями и о них мы будем говорить позже.
“Процедура” и “функция” – термины, применяемые в Паскале для обозначения специальным образом оформленной последовательности команд (подпрограммы). Доступ к такой подпрограмме может быть осуществлен из любого места основного блока программы, а также из любой процедуры или функции, описание которых следует ниже. В разделе описаний содержится описание процедур и функций в виде текста процедур и функций, который строится по правилам аналогичным правилам построения программы.
Основной блок программы состоит из последовательности операторов, причем работа программы начинается именно с первого оператора основного блока программы. Тело основного блока программы ограничено словами BEGIN и END.
Структура рассмотренной программы имеет следующий вид:
PROGRAM Addition;
{ Раздел описаний}
BEGIN
{ Раздел операторов}
END.
Необходимо обратить внимание на наличие точки после служебного слова END. После последнего оператора END всегда ставится точка, тем самым компилятор получает информацию об окончании текста программы.
Слово PROGRAM зарезервировано в Паскале и означает начало программы. Далее записывается имя программы (в приведенном примере – Addition). В Турбо Паскале можно опускать объявление имени оператором PROGRAM без каких–либо последствий для программы.
Строки программы обычно выделяют некоторые смысловые фрагменты текста и могут не связываться с конкретными действиями в программе. Программа записывается в свободной форме, операторы не привязаны к определенной позиции строки в отличие от других языков программирования. Расположение текста программы по строкам – дело вкуса программиста, а не требование синтаксиса языка. В то же время рекомендуется программу записывать в такой внешней форме, чтобы ее можно было легко читать и понимать. Для этого широко используются пробелы, пустые строки и комментарии. Рекомендуется смысловые части выделять одинаковыми отступами от начала строки.
Пробел в Паскале используется как разделитель отдельных конструкций языка, следовательно необходимо внимательно следить за его присутствием в качестве разделителя.
Соответствующие строчные и прописные буквы являются эквивалентными, если только это не связано с текстовыми константами.
Разделитель ; отмечает конец оператора или описания. Использование особого разделителя позволяет располагать несколько операторов на одной строке.
После заголовка программы следует текст, заключенный в фигурные скобки. Это комментарий. Комментарий – выделенная фигурными скобками информация для пояснения, которая не исполняется программой. Кроме фигурных скобок {}, могут использоваться также пары символов (* и *) слева и справа от комментария соответственно.
В нашем примере в разделе описаний объявлены три переменные Number_1, Number_2, Sum как переменные целого типа. Имена переменных записаны через запятую, а перед служебным словом INTEGER стоит двоеточие.
Зарезервированное слово BEGIN в следующей строке сигнализирует компилятору о начале другой части программы – раздела операторов. Write, WriteLn, ReadLn служат для вывода и ввода информации и являются стандартными процедурами. В Турбо Паскале есть возможность использования некоторых стандартных процедур без предваряющего описания этих процедур (общее правило гласит: все процедуры должны быть описаны). По своей сути оператор
Write (‘Введите первое число:’);
является оператором обращения к встроенной процедуре вывода данных. Свое название она получила от write – записать, а writeln – записать строку. Процедура write осуществляет вывод объектов перечисленных в скобках через запятую. В данном случае выводится текстовая константа ‘Введите первое число:’.
ReadLn (Number_1); – стандартная процедура ввода численного значения переменной с именем Number_1. При выполнении программы машина предоставит возможность ввести с клавиатуры численное значение этой переменной. Два следующих оператора аналогичны.
Оператор
Sum := Number_1 + Number_2;
– оператор присваивания, один из основных операторов языков программирования. В его левой части указывается имя переменной, правая часть представляет собой выражение того же типа, что и переменная. Выполняется оператор так: вычисляется численное значение выражения в правой части и результат записывается в переменную слева. Другими словами, оператор присваивания – вычислитель. Переменная Sum принимает значение суммы двух переменных Number_1 и Number_2.
Оператор
WriteLn (‘ Сумма введенных чисел равна: ‘,Sum);
выводит два объекта – текстовую константу и переменную. Оператор write выводит строку на экран и оставляет курсор в конце только что выведенной строки. Оператор writeln после вывода устанавливает курсор в начало следующей строки.
Синтаксические диаграммы
Для описания синтаксиса языка часто используются синтаксические диаграммы. Синтаксическая диаграмма является направленным графом, при прохождении которого автоматически строится синтаксически правильная программа. В диаграмме следует различать два типа символов:
Синтаксические диаграммы отражают лишь небольшую часть синтаксиса. Каждое понятие, заключенное в прямоугольник, требует, в свою очередь, некоторого определения. Структуру программы на Паскале можно представить следующей схемой (рис.31):
На диаграмме видно, что заголовок может быть, а может нет. После заголовка идет собственно программа в виде некоторого блока. Понятие блок требует расшифровки (рис. 32).
Дадим еще диаграмму для описания (рис. 33).
Все определения в дальнейшем будут изучаться.
Из синтаксической диаграммы видно, что не все перечисленные разделы обязательны в каждой программе. В приведенном примере присутствует только описание переменных.
Подробнее см. [1–4, 6, 7].
Данные
Одна из характерных особенностей современных ЭВМ состоит в возможности получать, накапливать и хранить большие объемы информации, содержащие формализованные сведения об окружающем человека мире. Поступившая в ЭВМ информация может быть обработана с целью извлечения из нее требуемых пользователю сведений в зависимости от его интересов и потребностей практики.
Информация, хранящаяся в памяти ЭВМ и доступная для обработки, состоит из данных. Данные в определенной степени являются приближенным отражением действительности, поскольку в них игнорируются некоторые свойства и характеристики реальных объектов, несущественные для решаемой задачи.
Применение ЭВМ для хранения и обработки данных приводит к разделению данных и их смыслового содержания. ЭВМ, как правило, имеют дело с данными как таковыми, а большая часть интерпретирующей информации в явной форме не фиксируется. Ее должен знать пользователь и применять при анализе данных, полученных от ЭВМ.
Рассмотрим, например, программу численного анализа, предназначенную для решения систем обыкновенных дифференциальных уравнений. Эта программа получает в качестве исходных данных некоторые числа и вырабатывает в результате другие числа. Она “ не знает “, описывают ли дифференциальные уравнения механические или электромагнитные явления. Ответственность за интерпретацию результатов в контексте их применения лежит на пользователе программы.
Каждый из параметров для задания свойства должен быть представлен либо отдельным значением, либо совокупностью значений. Значения могут характеризовать как количественную, так и качественную сторону объекта. Так, параметр масса может задаваться количественно (например, 1275), параметр цвет – качественно (например, красный); одни параметры – масса, длина, ширина, высота, стоимость, цвет – могут относиться к объекту в целом, другие – характеризовать разные свойства деталей, из которых состоит изделие (массу, стоимость, материал и т. п.). Параметр может иметь и более сложную структуру, отражая одновременно и название детали, и ее серийный номер, и массу, и объем, и положение в пространстве (координаты). Это уже агрегированные параметры.
В научных и инженерных расчетах наиболее распространенным параметром является отдельное измерение. Такие данные являются скалярами и представляют собой отдельные числа и слова (символьные последовательности).
Известным примером скаляра является константа. Это элемент данных, который имеет фиксированное имя, фиксированный тип и фиксированное значение. Для обозначения константы используется ее явная запись или выбранный идентификатор. Например, обозначение 3.141592 задает константу вещественного типа, значение которой фиксировано как число 3.141592, а имя (внешнее представление для пользователя ЭВМ) изображается ее значением. Такая интерпретация константы общепринята в математике. Разработчик алгоритма может пожелать связать с константой вещественного типа, представленной значением 3.141592, имя P, которое является символической константой.
Скаляром может быть также и строка символов, образованная последовательностью литер. Например, слово “ВЛАДИМИР” задает константу литерного типа, значение которой фиксировано как цепочка литер “ВЛАДИМИР”, а имя представлено ее же значением. При необходимости этой константе можно поставить в соответствие уникальный идентификатор (имя) и использовать его как символьную константу. Итак, константа – некоторая неизменная величина. Константа может задаваться числом или идентификатором.
Наряду с константами широко используются и переменные. Переменной называется объект, имеющий фиксированное имя, фиксированный тип и изменяющееся в зависимости от применяемых действий значение.