Описание пользовательских типов данных.
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 значение отсутствует, возникает программное прерывание.