Преобразованя типов и действия над ними
Конечно же, в Турбо Паскале есть все четыре арифметические операции над переменными REAL и INTEGER:
- + – сложение;
- - – вычитание;
- * – умножение;
- / – деление вещественное;
- div – деление целочисленное.
Наличие двух операций деления есть еще одно проявление основополагающего принципа Турбо Паскаля: программист должен явно подтверждать компилятору, что он готов к возможным последствиям преобразования типов. Если, например, в языке Фортран используется выражение 1/2, то результат этого выражения будет зависеть от того, переменной какого типа он будет присвоен: если N есть переменная целого типа, а Х – вещественного, то в программе на Фортране присваивания:
N = 1/2 X = 1/2
Дадут значения 0 для N и 0.5 для X. В Турбо Паскале такой двусмысленности нет: выражение 1/2 всегда имеет значение 0.5 и поэтому оператор:
var N:Integer; begin N: = 1/2;
Просто недопустим. В то же время допустимый в Турбо Паскале оператор:
var X: Real; begin X: = 1 div 2;
Самим фактом использования операции целочисленного деления DIV свидетельствует о том, что программист сознательно отбрасывает дробную часть результата. (Надеюсь, что читатель извинит явную искусственность этих примеров, которая вызвана лишь стремлением проиллюстрировать обсуждаемые особенности языка).
Для данных типа INTEGER в Турбо Паскале есть еще одна операция MOD – получение остатка от целочисленного деления. Например:
5 mod 2 = 1 31 mod 16 = 15 18 mod 3 = 0
В Турбо Паскале отсутствует операция возведения в степень, что, очевидно, будет вызывать определенные неудобства при реализации вычислительных алгоритмов. Некоторым утешением может служить наличие встроенной функции SQR, возвращающей квадрат от значения параметра, причем тип результата определяется типом параметра.
И еще об одном существенном недостатке Турбо Паскаля: в нем отсутствуют комплексный тип и соответствующие операции над ним. Вообще, в отношении реализации разнообразных вычислительных процедур Турбо Паскаль значительно уступает некоторым другим языкам программирования, в частности, тому же Фортрану. В частности, в нем намного беднее набор встроенных математических функций (см. гл. 4).
При работе с целыми числами могут оказаться полезными две процедуры (здесь и далее в квадратных скобках указываются необязательные параметры):
- DEC (X [, N]) – уменьшает содержимое переменной X на значение выражения N (если N не задано, то на 1); тип переменной X и выражения N – INTEGER (точнее, любой целый, см. гл. 4);
- INC (X [, N]) – увеличивает значение X на N (если N не задано, то на 1).
Над символами и строками символов определена единственная операция – сцепление двух строк. Операция обозначается символом "+". Например, программа:
var st: String; begin st: = 'Турбо'+'-'+'Паскаль'; WriteLn(st); end.
Напечатает строку:
Турбо-Паскаль
Все остальные действия над строками и символами реализуются с помощью встроенных процедур и функций (см. гл.4).