Описание пользовательских типов данных

Var

Раздел описания переменных.

Раздел описания типов данных

Зарезервированные константы.

Типизированные константы

Существуют так называемые типизированные константы, эквивалентные переменным с заранее заданным значением. Название вызвано тем, что при описании указывается тип:

const

ИмяКонстанты: Тип = Значение;

Например:

Const

Ocenka: byte =5;

Predmet: string = ‘Информатика’;

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

Обратите внимание – использование типизированных констант позволяет поменять сразу много значений по всему тексту (столько значений, скольо раз встречаются в тексте данные константы), внеся изменения только в одном месте программы – разделе const.

Без предварительного описания в программе можно использовать значения зарезервированных или предопределенных констант (таб. 5).

Таблица 5. Зарезервированные константы

Идентификатор Тип Значение Описание
True Boolean True Истинна
False Boolean False Ложь
Maxint Integer 32 767 Максимальное целое
maxlogint Integer 2 147 483 647 Максимальное длинное целое

В языке Turbo Pascal говорят, что он строго типизирован – программист должен описать все объекты программы, указывая их типы, и использовать объекты только в соответствии с этими типами. Может показаться, что такой подход не способствует творчеству, ограничивая программиста. На самом деле он предотвращает анархию, помогая создавать надежные и качественные программы. Принуждая программиста к аккуратности при описании объектов программы, Turbo Pascal избавляет его от необходимости искать и исправлять ошибки при выполнении, что гораздо труднее.

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

В языке Turbo Pascal предусмотрено несколько стандартных типов и существует механизм создания новых типов данных. Каждое новое определение типа задает множество значений и связывает с этим множеством некоторое имя.

Раздел описания типов данных – это раздел описания типов определяемых пользователем поэтому в простых программах он часто отсутствует. Раздел начинается с зарезервированного слова type и имеет вид:

type

ИмяТипа1=ОписаниеТипа1;

ИмяТипа2=ОписаниеТипа2;

Например

type

matr=array[1..maxrow, 1..maxcol] of real;

{задан тип matr – таблица с maxrom строк и maxcol столбцов}

Далее идентификаторы типов можно использовать для описания переменных в разделе var.

Все переменные, используемые в программе, должны быть перечислены в разделе описания переменных. Описание должно предшествовать использованию переменной. После того как переменная описана, она может быть опознана компьютером, а в тексте программы к ней можно обратиться по имени. Однако содержимое переменной пока ещё не определено, поэтому переменные часто инициализируются, присваивая им начальное значение (см. разд. 2.2.4).

Инструкция объявления переменной выглядит так:

ИмяПеременной1,, ИмяПеременнойN: ТипПеременной;

Например:

Var

Matrix: matr; { задан массив matrix типа matr, который }

{ Был объявлен ранее в разделе type }

x1,x2: integer; y1: longint; { целочисленные переменные }

sum: real; root: double; { вещественные переменные }

znak: char; { символьная переменная }

flag: Boolean; { логическая переменная }

Следует знать:

1 Если в программе используются переменные разных типов, то зарезервированное слово var (от английского variable, переменная) лучше записать только один раз, а затем привести списки имён переменных каждого типа;

1 В имени переменной можно использовать буквы латинского алфавита и цифры (первым символом должна быть буква);

1 Наиболее часто, особенно в простых программах, связанных с обработкой числовых данных, используются типы real и integer;

1 После объявления переменной в качестве комментария рекомендуется указывать её назначение.

Особенностью языка Turbo Pascal является предоставляемая им возможность создания новых, пользовательских типов данных: перечисляемого и интервального (см. разд. 2.1.3). Их применение значительно улучшает наглядность программы, экономит память и облегчает поиск ошибок, благодаря возможности контроля тех значений, которые получают соответствующие переменные.

Перечисляемый тип. Задаётся непосредственно перечислением всех значений, которые может принимать переменная данного типа. Сами значения указываются через запятую, а весь список заключается в круглые скобки. Первая константа имеет порядковый номер 0, вторая – 1 и т. д. (при необходимости до 65535).

Описание перечисляемого типа данных имеет следующий вид:

Type ИмяТипа = (Значение1, Значение2,…,ЗначениеN);

Var ИмяПеременной: ИмяТипа;

Например:

Type Days=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);

Var day: days; Season: (Winter, Sprint, Summer, Autumn);

В примере приведён явно описанный тип данных пользователя – days.

Определены его значения – обозначения дней недели, которые принимает переменная day. Попытка присвоить любое другое значение вызовет программное прерывание. Другой тип не имеет имени (является анонимным) и задаётся перечислением своих значений в разделе var. Переменной этого типа является Season, она может принимать значения Winter, Sprint, Summer и Autumn. Так может быть задан любой тип. Имена внутри круглых скобок являются константами соответствующего типа перечисления и могут быть использованы в операторе case (см. разд. 3.8.3).

Для значений перечисления одного и того же типа допустимы операции отношения и логические операции. Упорядочение осуществляется по номеру элемента в описании типа.

Например, будет истинно выражение winter<spring, т.к. spring имеет большой номер по порядку в описании типа, чем Winter.

Turbo Pascal не поддерживает ввод/вывод значений перечисляемого типа. При необходимости, программист долен организовать его сам. Так, попытка использовать операторы readln(day); или writeln(day); вызовет сообщение об ошибке: Error 64:Cannot Read or Write variables of this type (ошибка 64: Не могу считывать или записывать переменные этого типа). Переменным перечисляемого типа можно присваивать значения: day:=Monday;. К перечисляемому типу неприменимы арифметические действия: оператор day:=Monday+Tuesday; вызовет сообщение об ошибке: Error 41: Operand types do not match operator (ошибка 41: Тип операндов не соответствует оператору).

Интервальный тип. Он задает две константы, определяющие границы диапазона значений для данной переменной – отрезок типа. Для каждой операции с переменной интервального типа автоматически выполняется проверка: остается ли значение переменной внутри установленного для нее диапазона. Автоматическая проверка объявленных границ позволяет программисту не отвлекаться на организацию собственного контроля, что является существенным достоинством использования интервального типа. В хорошо написанных программах можно скорее увидеть оператор var count: 10..100; чем var count: integer; если по условию задания переменная count должна принимать значения от 10 до 100. значение первой константы должно быть обязательно меньше второй. Обе константы должны принадлежать к одному типу. Тип real недопустим. Оператор type price=1.99..5.99; вызовет сообщение об ошибке: Error 27: Invalid subrange base type (Ошибка 27: Недопустимый исходный тип поддиапазона). В описании интервального типа могут использоваться именованные константы.

type ИмяТипа=Константа1..Константа2;

var ИмяПеременной: ИмяТипа;

Например:

const min=1; max=31;

type days=min..max;

var rab_day, bol_day: days

Здесь переменные rab_day и bol_day имеют тип days, принимают любые значения из диапазона от 1 до31. выход за его границы вызовет программное прерывание.

Ограничения для интервального типа те же, что и для перечисляемого.

Как уже указывалось выше, перечисляемый и интервальные типы данных совместно с целыми, логическим и символьным относятся к порядковым типам. Для работы с данными порядковых типов в языке Turbo Pascal используются функции:

· Ord (s) – функция возвращает порядковый номер значения s в множестве, определенном типом s. Результат – longint. Для целых типов функция возвращает само значение s. Применение ord(s) к логическому, символьному и перечисляемому типам дает положительное целое число в диапазоне от 0 до 1, от 0 до 255 и от 0 до 65 535 соответственно. Применение ord(s) к интервальному типу зависит от его свойств;

· Pred(s) -функция возвращает элемент, предшествующий s в списке значений типа. Тип результата совпадает с типом параметра. Если предшествующего s элемента не существует, возникает программное прерывание;

· Succ(s) –функция возвращает значение, следующее за s в списке значений типа. Тип результата совпадает с типом параметра. Если следующее за s значение отсутствует, возникает программное прерывание.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: