Введение в систему типов языка Pascal

Страницы работы

Содержание работы

Лекция

Введение в систему типов языка Pascal

Язык программирования Pascal имеет достаточно развитую типизацию.  Это означает,  что все данные, обрабатываемые программой,  должны принадлежать к какому-то заранее  известному  типу.

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

Среди типов, используемых в языке,  есть стандартные (предопределенные) и определяемые программистом.

К стандартным типам,  не требующим предварительного определения,  относятся целый,  вещественный,  логический и символьный типы. Вспомним основные из них:

Integer - целое  число,  лежащее  в  диапазоне  (-32768  ..

32767),  занимает 2 байта.  Операции:  +,  -, *,

div, mod, odd

Real    - вещественное число,  точность 12 знаков после запятой, занимает 6 байт.  Записывается в программе двумя способами:  -1.765 или -1.4Е+8 Операции: +,

-, *, /, sqrt, sin, cos, arctan, ln, exp

Boolean -  логический тип,  значения True,  False Операции:

not, and, or

Char    - символьный тип, занимает 1 байт, символьные константы заключаются в кавычки.  Операции: ord, chr,

pred, succ

В языке Pascal можно создавать и другие (нестандартные) типы  данных.Описание  типов  данных делается в блоке TYPE и имеет вид:

TYPE <имя типа>=<описание типа>

Рассмотрим два новых простых типа данных:  перечислимый тип и ограниченный.

Перечислимый тип

Это такой тип данных, при котором количество всех возможных значений ограничено (можно перечислить).  Стандартные типы Integer,  Char и Boolean относятся к перечислимым, а тмп Real не является перечислимым (т.к.  нельзя перечислить все возможные значения вещественных чисел).

Перечисимый тип данных можно расписать в ряд по значениям:

Boolean=(False,True)

Integer=(-32768,-32767,-32766..32766,32767)

Можно вводить новые перечислимые типы:

Type

Computer=(IBM,Yamaha,Atari);

Name=(Pete,Kate,Nick,Bob);

mark=(1,2,3,4,5);

Color=(Black,White,Red,Yellow,Green);

Week=(Mn,Tu,We,Th,Fr,Sa,Sn);

После того,  как создан такой тип,  можно объявлять в блоке

Var переменные такого типа, а их значениями индексировать массивы и организовывать циклы.

Например:

Var

m:mark;

pupil:Name;

col1,col2:Color;

Следует отметить,  что важно,  в каком поряджке перечислены идентификаторы при определении типа, т.к. первому идентификатору присваивается порядковый номер 0,  второму - 1 и т.д. Один и тот же идентификатор можно использовать в  определении  только  один раз.

При использовании перечислимых типов улучшается  читаемость программ, более четко проводится контроль значений, перечислимые типы имеют очень компактное машинное представление.  Но при этом следует  помнить,  что значения перечислимого типа не могут быть выведены на экран или принтер и не могут  быть  явно  введены  с клавиатуры.

Для работы с переменными перечислимого типам могут быть использованы функции: Ord, Pred, Succ.

Примеры:

. . .

pupil:=Nick;

writeln(ord(pupil)); { будет выведено 2 }

col1:=Red;

col2:=pred(col1); {значение переменной col2 стало White}

col2:=succ(col1); {значение переменной col2 стало Yellow}

. . .

Ограниченный тип данных

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

Примеры:

Type

Century=1..20;        {числа от 1 до 20}

Letter='a'..'z';      {буквы от а до z}

Используя описание перечислимых типов, приведенные в вышеописанных примерах (раздел *.*) можно записать следующее:

Type

Work_day=Mn..Sa;

Fav_color=White..Green;

Для переменных  ограниченного  типа  могут использоваться функции Ord, Pred, Succ.

Множества

Вам, несомненно известно следующее определение:  "Множество

- это многое,  мыслимое как целое". Множества курящих водолазов, лохматых девушек,  рыжих, клавиш и т.п. отличаются одной особенностью: они не упорядочены (вряд ли существует общепринятое правило ранжирования лохматых девушек или курящих водолазов).

В отличие  от других языков в языке Pascal можно работать с множествами. Множества задаются перечислением  своих  элементов, т.е. отвечается на вопрос "Множество чего?". Если элементов нет, считается, что множество ПУСТО.

Множество-константа обозначается в квадратных скобках:

[]     - пустое множество. В нем ничего нет.

[1..10] - в множестве - целые число от 1 до 10.

['B','O','Y'] - множество из трех символов B,O и Y.

['A'..'Z']    - множество символов от A до Z.

[#72..#80] - множество символов, имеющих коды с 72 до 80.

Если есть потребность в переменных типа  множество,  то  их описание возможно как в блоке Var,  так и в блоке Type. Описание множества осуществляется с помощью фразы Set of  <базовый  тип>, где <базовый  тип>  -  любой  из  перечислимых типов языка (либо стандарный: integer,  byte, word, Char, Boolean, либо перечислимый или  ограниченный тип,  организованный на базе стандартных).

Например:

Type month=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);

year=set of month;

Today=set of 1994..2994;

numbers=set of '0'..'9';

...

var

times:numbers;

boys:set of char;

girls: year;

...

Есть одна особенность:  количество элементов в множестве ограничено. Для версии языка Pascal, имеющейся у Вас, это значение не может превышать  256.  Именно  поэтому  приходится  указывать конкретные диапазоны  значений.  Исключением является тип char и байт: они имеют ровно столько значений.

Как показала практика,  cамая главная операция,  которая выполняется для множеств - это проверка включения элемента в  множество:  if ch in [#72..#80] then ...

Операция IN позволяет составить выражение, значение которого равно True,  если элемент принадлежит множеству и False - в ином случае.

Другие возможные операции:

=    проверка на равенство множеств. Порядок элементов значения не имеет;

<>   проверка на неравенство.  Результат  сравнения множеств неравенство равен  True,  если эти множества отличаются хотя бы одним элементом.

<=   Проверка на подмножество. Результат будет True,если все элементы левого множества содержатся в правом множестве.

>=   Проверка на подмножество. Результат будет True,если все элементы правого множества содержатся в левом множестве.

+    объединение множеств:

girls:=[1994..2000]+[1995..2100];

{в girls будет множество [1994..2100], т.е. все элементы, входящие  в  оба  множества.  Повторяющиеся элементы остаются в одном экземпляре}

-    разность множеств:

boys:=['к','р','о','д','и','л'] - ['р','и','д'];

{ в boys будет множество  ['к','о','д'],  т.е.  все элементы, которые входят в первое множество, о не входят во второй }

*    пересечение множеств:

times:=['0'.'5','7','9']*['3'..'6','8','9'];

{ в times будет множество ['3','4','5','9'],  т.е.

те элементы,  которые  содержатся одновременно в первом и втором множестве }

Похожие материалы

Информация о работе