В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова - Введение в язык Паскаль (1107618), страница 9
Текст из файла (страница 9)
Например,такое данное, к а к цифра "5", может означать целое число (каких-либопредметов), качество ответа на экзамене (причем в зависимости от принятого соглашения эта цифра может означать либо отличный, либо плохойответ), месяц года, например в записи 2.5.1986 г и т.д. Но поскольку конечной целью обработки данных является получение какой-то новой инфор( мации по сравнению с той, которая содержалась в исходных данных, можноговорить и об "обработке информации", однако следует иметь в виду, чтообработка информации ведется опосредованно, с помощью обработкиданных.В программах обрабатываемые данные фигурируют в качестве значенийтех или иных программных объектов. Данные, которые зафиксированы втексте и не изменяются в процессе ее выполнения, являются значениямитаких программных объектов, к а к константы, остальные данные являются значениями объектов, называемых переменными, поскольку значенияэтих объектов возникают и могут изменяться в процессе выполнения программы.В аппаратуре практически всех современных ЭВМ, из-за специфики ихэлементной базы, любые данные представляются в виде последовательностей двоичных цифр 0 и 1, изображаемых тем или иным способом.
В такомже виде представляются данные и при программировании на языке машины.Одно из преимуществ алгоритмических языков как раз и состоит в том,что они позволяют абстрагироваться от деталей, от конкретного способапредставления данных в ЭВМ, за счет концепции типа значений. Каждыйтакой тип, предусмотренный в языке, определяет как множество значений этого типа, так и набор операций над ними. Способ же изображенияэтих значений в той или иной вычислительной системе (или даже в отдельных ее устройствах) не играет никакой роли при формулировании алгоритма на этом языке и потому может вообще не учитываться.31Для упрощения разработки и формулирования алгоритмов, а также дляповышения наглядности их записи, обрабатываемые данные могут объединяться в некоторые с т р у к т у р ы , огранизованные тем или иным способом (заметим, что отдельное данное, например число, можно рассматривать как частный, тривиальный случай структуры данных).
Структуруданных можно рассматривать и как нечто целое, как значение некоторог опрограммного объекта, что позволяет достаточно просто и удобно оперировать как со структурой в целом, так и с отдельными ее элементами.В некоторых алгоритмических языках набор допустимых структурданных весьма ограничен. В алголе-60, например, предусмотрены толькотакие структуры, как отдельное данное и прямоугольные массивы данных(векторы, матрицы и т.д.), причем в массив могут объединяться толькоданные одного и того же типа.
Паскаль в этом отношении является весьмаразвитым языком. В нем предусмотрен достаточно богатый набор классовдопустимых структур данных, причем в рамках этих классов программиступредоставляется возможность вводить в употребление любые удобныедля него структуры данных. Именно это обстоятельство — богатство воз- ,можностей в отношении создания структур данных - й представляет основную трудность в изучении этого языка, а особенно — в овладении этим язык о м , поскольку умение выбирать наиболее подходящие для решения тойили иной задачи структуры данных и умение работать с ними можно получить только в процессе систематического использования языка при решенииразличных конкретных задач. Поэтому на начальном этапе изучения языкаважно понять лишь принципиальные возможности, предоставляемые язык о м в этом отношении, и научиться работать с наиболее употребительнымиструктурами данных.
Умение же пользоваться всеми возможностямипрвдет в процессе практической работы, если при этом паскаль окажется )наиболее подходящим инструментом.Следует обратить внимание на следующие три особенности паскаля.Во-первых, как уже отмечалось ранее, любое данное, используемое впрограмме, считается входящим в ту или иную структуру данных, причемотдельное, самостоятельное данное рассматривается как простейшая (тривиальная) структура данных.Во-вторых, элементом (компонентой) структуры может быть не толькоотдельное данное, но и нетривиальная структура данных (например компо- Iнентами вектора также могут быть векторы), так что в общем случаеструктура данных имеет иерархический характер.В-третьих, в некоторые классы структур могут объединяться данныеразных типов.В связи с этими особенностями, в паскале термин "значение" употребляется в более,-широком смысле, чем это обычно принято: посколькуструктура данных рассматривается как нечто единое целое, и каждоеотдельное данное считается входящим в ту или иную структуру, то и подтермином "значение" понимается вся совокупность данных, объединенных в ту или иную структуру, а не обязательно отдельное данное.
А в связи с этим в более широком смысле понимается и термин "тип значения ':в общем случае под этим термином понимается и число отдельных данных,входящих в структуру, и тип каждого из них, и способ их объединения вструктуру.32Каждый тип определяет множество различных значений и их свойства(например, упорядоченность), а также операции, которые могут выполняться над этими значениями.Все имеющиеся в паскале типы значений (в дальнейшем будем говорить и просто "типы") можно разбить на две группы: о с н о в н ы е (илипростые) и производные.Основные типы являются элементарными типами значений в том смысле, что каждое значение любого из этих типов состоит из единственного данного (т.е.
является тривиальной структурой данных).Из основных типов в паскале выделен ссылочный тип, который играетвесьма специфическую роль; все остальные основные типы принято называть скалярными. Скалярные типы либо относятся к стандартным типам,которые зафиксированы в языке, либо определяются программистом (врамках допустимых в языке классов) с помощью соответствующих заданийтипов. Поскольку для каждого определяемого типа в программе должносодержаться явное его задание (описание), то такие типы иначе называютописанными скалярными типами. Стандартные же типы в программе описываться не должны.Как уже отмечалось, любой тип определяет множество различных значений, которые могут принимать программные объекты соответствующеготипа. Что касается скалярных типов, то — за исключением вещественноготипа — все они (как стандартные, так и описанные) обладают тем свойством, что среди элементов соответствующего множества допустимых значений установлен линейный порядок, т.е.
относительно любых двух различных его элементов определено, какой из них предшествует другому. В связи с этой особенностью скалярных типов, в паскале предусмотрены двестандартные (определенные в самом языке) функции succ и pred. Значением succ(x) является непосредственно следующее, а значением р red (х) —непосредственно предшествующее значение по отношению к значению аргумента х функции (разумеется, значения аргумента и функции имеют одини тот же тип).Производные типы образуются из других типов, которые могут бытьк а к основными, так и производными.
В общем случае значение производного типа является уже нетривиальной структурой данных. В этом случаеможно говорить о числе компонент, их типах и способе объединения компонент в единую структуру данных, которая и является значением соответствующего производного типа. Заметим, что в конечном счете (учитывая иерархичность структуры значения производного типа) любое такое значениепредставляет собой совокупность значений основных типов. В паскале любой производный тип, используемый в программе, должен быть определенв ней. А поскольку определение типа обычно производится с помощью описания типа, то все производные типы принято относить к описанным типам.Следует подчеркнуть, что любой описанный тип (т.е.
тип, взодимый вупотребление программистом по своему усмотрению) определяет лишьмножество значений этого типа; набор же допустимых операций над ними,а также правила упорядочения (если оно имеет место в определяемом типе)зафиксированы в языке и не могут быть изменены по желанию программистаКаждый тип должен быть каким-то образом специфицирован для его выделения среди всех возможных типов. В ряде языков для этой цели исполь3. В.Г. Абрамов33зуются спецификаторы из числа служебных слов (являющихся основнымисимволами языка). В паскале же в качестве спецификаторов типов используются не служебные слова, а обычные имена (идентификаторы).
Это связано с тем обстоятельством, что набор допустимых типов в паскале жестконе фиксируется, так ито в языке просто невозможно зафиксировать соответствующий набор служебных слов. Поэтому при введении в употребление нового типа значений с помощью соответствующего описания, этомутипу дается некоторое имя, выбираемое по усмотрению программиста,которое и выполняет роль спецификатора типа.Для достижения единообразия в этом отношении и для большего удобства, за стандартными типами (не требующими их явного описания в программе) закреплены стандартные имена.При знакомстве с Паскалем (особенно у лиц, привыкшим к языкуалгол-60 и подобным ему языкам) нередко вызывает недоумение то обстоятельство, что некоторые значения в паскале являются идентификаторами.