Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль-конспект ИНФОРМАТИКА.doc
Скачиваний:
59
Добавлен:
09.04.2015
Размер:
639.49 Кб
Скачать

8.2.3. Типизированная константа множества.

Она образуется из одной или нескольких спецификаций элементов, разделенных запятыми и заключенных в квадратные скобки.

Спецификацией элемента может быть константа или выражение идентификатора. Оно состоит из двух констант, разделенных двумя точками.

Пример:

TypePropisnoy=Setof‘A’..’Z’;

Strochny = Set of ‘a’..’z’;

Const PropBukw : Propis =[‘A’..’Z’];

StrochnBukw : Stroch =[‘a’, ’e’, ‘l’, ‘c’, ‘u’];

Simvol : Set of char = [‘’..’/’, ‘:’..’?’, ‘[‘..’^’, ‘{‘..’~’];

9. Преобразование типов

Тип переменной позволяет не только установить длину ее внутреннего представления, но и контролировать те действия, которые осуществляются над ней в программе. Контроль за использованием переменных еще на этапе компиляции программы – важное преимущество Турбо Паскаля перед другими языками программирования, в которых допускается автоматическое преобразование типов. Фактически именно та вольность, с какой, например, PL/1 преобразует по умолчанию различные типы данных, послужила объектом наиболее сильной его критики.

9.1. Неявные преобразования типов

В Паскале почти невозможны неявные (автоматические) преобразования типов. Исключение сделано только в отношении констант и переменных типа Integer, которые разрешается использовать в выражениях типаReal.

Пример:

Var X : Integer;

Y : Real;

Y:=X+2 - правильно, хотя справа от знака присваивания стоит целочисленное выражение, а слева – вещественная переменная. Компилятор сделает необходимые преобразования автоматически.

X=2.0 – неверно, так как автоматическое преобразование типаRealв типIntegerв Паскале запрещено.

9.2. Использование стандартных функций для преобразования

Разумеется, запрет на автоматическое преобразование типов еще не означает, что в языке программирования Паскаль нет средства преобразования данных. Эти средства есть, но их нужно использовать явно. Для преобразования данных существуют встроенные функции, которые получают в качестве параметра значения одного типа, а возвращают результат в виде значения другого типа.

В частности, для преобразования RealвIntegerимеются две встроенные функции:

Round округляет Realдо ближайшего целого,

Trung усекает Realпутем отбрасывания дробной части.

X:=Y/X – нельзя,

X:=round(Y/X) – можно.

OrdпреобразуетCharвInteger,

ChrпреобразуетIntegerвChar.

Пример. Программа выводит на экран символ и соответствующий ему внутренний код.

Var simvol : char;

Begin readln (simvol);

Writeln (simvol, ‘=’, ord(simvol));

End.

9.3. Явные преобразования типов

Наличие двух операций деления есть еще одно появление основополагающего принципа языка программирования Паскаль: программист должен явно подтверждать компилятору, что он готов к возможным последствиям преобразования типов. Если, например, в Фортране используется выражение 1/2, то результат этого действия будет зависеть от того, переменной какого типа он будет присвоен:

если X– целое,

Y- действительное,

то фортрановское присваивание дает:

X= 1/20

Y= 1/20.5

В языке программирования Паскаль такой двусмысленности нет: выражение 1/2 всегда имеет значение 0.5 и поэтому оператор X:=1/2 для целого Х просто недопустим. В то же время

VarY:Real;

--------------

Y: = 1div2;

самим фактом использования операции целочисленного деления divпрограммист свидетельствует, что он сознательно отбрасывает дробную часть.

Еще две функции для целого типа:

Dec(X[,N]) – уменьшение значенияXна N; еслиNне задан, то на 1,

Inc (X[,N]) – увеличение.

Пример: А,В, С – типаinteger.

А = В andС < 0 где ошибка?

Надо (А = В) and (С < 0) так как логические операции имеют более высокий приоритет, чем операции отношения:

  1. not

  2. * / div mod and chr chi

  3. + - or xor

  4. = <> < > <= >= in.