Автором
языка программирования PASCAL
(1970) является профессор
Никлаус Вирт, директор
института информатики Швейцарской
высшей политехнической школы.
Кроме PASCAL, он
разработал также целый ряд языков программирования, например, MODULA-2;
но PASCAL занимает особое место. При его проектировании преследовались две
основных цели: - создать язык, удобный
для обучения программированию как систематической дисциплине, основанный на
ряде фундаментальных понятий структурного и процедурного программирования; -
осуществить надежную и
эффективную реализацию языка
ЭВМ. Как произведение одного автора,
PASCAL отличается завершенностью и концептуальной однородностью. В нем
присутствуют как все
основные алгоритмические конструкции классического структурного программирования, так
и все
структурные типы данных,
предложенные К. Хоаром: простые
переменные, массивы, последовательные файлы, множества, записи и указатели, а
также средства построения новых типов данных. Разработаны даже
программы аналитического доказательства правильности программ на языке
PASCAL. В настоящее время на самой массовой ЭВМ - IBM PC - соревнуются
по популярности два языка: PASCAL
и C. Наиболее
популярны системы
программирования на этих языках,
созданные крупнейшей фирмой
-производителем программного продукта Borland International, inc. Судя по всему, фирма
не отдает окончательного предпочтения какому-либо из этих языков. Более того,
одни и те же новшества в
этих продуктах появляются почти одновременно (в
PASCAL'е несколько раньше).Исторически профессиональные программисты
предпочитают C и C++, хотя PASCAL практически позволяет сделать то
же самое, но он более строг и надежен,
что немаловажно при разработке больших программных проектов. Следует
заметить, что Turbo
Pascal фирмы Borland International сильно отличается
от разработки Н. Вирта
и от позже
утвержденного стандарта языка. Практически во всем этот продукт
превосходит стандарт по возможностям,
типам данных и удобству для программиста. Он, в
отличие от стандарта, имеет большой
набор арифметических типов данных различной точности, что делает
его удобным для
научно-технических расчетов; имеется
ряд нестандартных операторов, упрощающих программирование сложных алгоритмических конструкций, а
также использование
ассемблера внутри программы
для повышения ее эффективности; имеется большая библиотека
системных и графических процедур; наконец,
начиная с версии Turbo Pascal 5.5, поддерживается современная технология
объектно-ориентированного программирования. Далее будет описываться в основном
стандарт языка, с добавлениями и примечаниями для "короткого" PASCAL/RT-11
на СМ-1420 и Turbo Pascal на IBM PC.
Знакомство с любым языком
программирования начинают с его
возможностей по представлению данных. К
простым типам данных в языке PASCAL
относятся:
-
целые (integer), имеющие диапазон от -32768 до +32767;
-
вещественные (real) в диапазоне ё1.5e-45 ..
ё3.4e38 для СМ-4
(4
байта, 7-8 значащих
цифр) и в диапазоне ё2.9e-39 ..
ё1.7e38 для Turbo Pascal на IBM PC (6 байт, 11-12 значащих цифр);
-
символьные (char) размером 1 байт;
-
логические (boolean), принимающие два
значения - истина (true)
или
ложь (false);
-
производные от целого типа:
тип-диапазон, например, [-5..24],
и перечислимый тип, например,
Day=(пн,вт,ср,чт,пт,сб,вс), где пн,вт,... есть константы;
-
множество (set of
{char,byte,boolean}) из элементов символьного, байтового или
перечислимого типа).
В
Turbo Pascal'е существуют также типы:
- shortint: -128..+127 (1 байт);
- longint:
-2147483648..2147483647 (4 байта);
- byte: 0..255 (1 байт);
- word: 0..65535 (2 байта);
- single: ё1.5e-45..ё3.4e38 (4 байта);
- double: ё5.0e-324..ё1.7e308 (8 байт, 15-16 значащих цифр);
- extended: ё3.4e-4932..ё1.1e4932 (10 байт, 19-20 значащих цифр).
Самый
простой и необходимый
оператор любого языка
- оператор присваивания: <переменная>:=<выражение>
. В
выражении в качестве операндов могут использоваться
константы, переменные, функции. Для арифметических типов данных определены операции:
"+", "-", "*". А
вот деление приводит
к различным результатам
для целых и вещественных чисел,
поэтому язык даже
предусматривает разные
обозначения: "/" для вещественных и "div" для целых. Результат целого деления - тоже целый,
дробная часть отбрасывается. Предусмотрена также операция остатка от
деления (для целых)
"mod". При описании стандартных функций используем
обозначения "r" для вещественных, "i" для целых, "c" для
символьных и "b" для логических:
с:=chr(i) - преобразование кода в символ;
i:=ord(c) - преобразование символа (или
перечислимого типа) в код;
i:=pred(i) - предыдущее по порядку значение (для целых
= i-1);
i:=succ(i) - последующее по порядку (для целых = i+1);
b:=odd(i) - проверяет нечетность;
i:=round(r) - округление;
i:=trunc(r) - выделение целой части числа
(trunc(-3.14)=-3!);
i:=r - при простом присваивании
отбрасывается дробная часть (при r=-3.14 i=-4);
r:=int(r) - выделение целой части;
i:=Abs(i) r:=Abs(r) - модуль;
r:=cos(r)
r:=sin(r)
r:=arctan(r)
r:=exp(r)
r:=Ln(r)
r:=sqrt(r)
Порядок
выполнения операций (приоритет) в выражении такой же, как и в других языках
программирования:
-
вычисление скобок и функций;
-
умножение и деление;
-
сложение и вычитание.
Типы
операндов и операций над ними
должны соответствовать друг другу. Нельзя, например,
написать "3.14 div 2".
Тип результата (и всего выражения) должен соответствовать типу
переменной, которому он присваивается.
Операция
деления (особенно вещественного) наиболее сложна и
долго выполняется, поэтому ее следует избегать:
-
лучше записать a/(b*c), чем a/b/c;
-
лучше записать x*0.5, чем x/2.
Для
множеств определены операции
"+" - добавить
элемент к множеству (объединение
множеств), "-" - удалить
элемент из множества, "*" -
пересечение множеств, а также логическая
операция проверки вхождения элемента в множество: <элемент> in
<множество>.
Язык
PASCAL весьма строгий. Он требует, чтобы все объекты - будь то константы,
метки, переменные, процедуры
- были описаны
до того момента, как использованы в тексте программы.
Программистов, развращенных все дозволяющим BASIC'ом, это нервирует. Но
потом даже они привыкают и находят такую строгость полезной. Я,
например, доведись сейчас
работать на FORTRAN'е, буду все время
бояться случайно сделать опечатку в
имени переменной и три дня потом вылавливать эту ошибку.
PASCAL такого не позволит, за что ему
спасибо. Итак, описания
всех переменных располагаются в начале программы, например (данный пример не образец для программирования, а
просто демонстрация возможностей):
type
TDay=(mon,tue,wed,thu,fri,sat,sun); {перечислимый тип}
var Day:TDay; {переменная
типа TDay}
WorkDays: set of TDay; {множество элементов типа TDay}
begin {начало программы}
WorkDays:=[mon..fri]; {заполнение множества значениями от mon до fri}
for Day:=mon to sun do {цикл по дням недели}
if Day in WorkDays {входит ли Day в множество WorkDays}
then writeln(ord(Day)+1,'-рабочий день')
else writeln(ord(Day)+1,'-выходной');
end. {конец программы}
Здесь
показано, как можно
создавать новые типы
данных и пользоваться ими наравне
со стандартными; как описывать
переменные; как работать с
множествами. Обратите
внимание, что одновременно с
перечислимым типом TDay
описывается и ряд
констант, принимающих
значение: mon=0; tue=1
и т.д. Этой особенностью мы пользуемся при выводе
номера дня недели, где функция ord
возвращает порядковый номер
константы
в перечислимом типе. |