В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова - Введение в язык Паскаль (1107618), страница 10
Текст из файла (страница 10)
Это недоумение может возникнуть в силу нашей привычки иметьдело с весьма ограниченным набором типов значений — в основном с числами (целыми, вещественными, комплексными), для которых были выработаны специальные обозначения: цифры, знаки "+", "—" и т.д.Обратим, однако, внимание на то, что запись "5", например, на самомделе является вовсе не числом в математическом понимании этого термина (поскольку число - это некоторая математическая абстракция), аизображением этого числа, если угодно — его "именем", и лишь ради краткости и наглядности записи эти имена образуются не из букв алфавитаестественного языка, а из специально введенных для этой цели литер, каковыми являются цифры.
Заметим к тому же, что цифрами для обозначениячисел мы пользуемся только в текстах — в устной речи для обозначенияупомянутого числа мы используем слово "пять", которое и есть не чтоиное, как имя числа, равного количеству пальцев на одной руке. Впрочем,имена чисел нередко используются и в текстах. Так, в ряде денежныхдокументов в поле "сумма прописью" мы пишем, например, "сто сорокдва" — а ведь это по сути дела и есть имя некоторого числового значения.И как всякое обозначение, оно весьма условно — все зависит от принятыхсоглашений (по другим соглашениям, принятым в римской системе счисления, то же самое число "пять" обозначается, т.е. именуется, иначелитерой V).То же самое можно сказать и о буквах алфавита - ведь каждая букваесть не что иное, как условное изображение значения такого типа, как" з в у к " , т.е.
имя того или иного значения этого типа.В жизни нам приходится иметь дело со значениями самых разных типов.Например, можно говорить о таких значениях, как цвета радуги, дни недели и т.п. А поскольку из-за разнообразия типов значений и большого числасамих значений практически невозможно (да и нецелесообразно) для каждого из них придумывать специальные обозначения, то для ссылки на тоили иное значение обычно используется его имя. Например, значения типа"цвета радуги" обозначаются именами "красный", "оранжевый", "желтый"и т.д., а значения типа "дни недели" — именами "понедельник", "вторник"и т.д. При этом совершенно неважно, какими именами будут обозначатьсяте или иные значения данного типа - это определяется принятыми соглаше-ниями.
Обычно важна лишь их упорядоченность — скажем, для значенийтипа "дни недели" для нас важно то, что "воскресенье" непосредственноследует за "суббота", а "понедельник" и "вторник" предшествуют всемостальным дням недели.Как уже отмечалось, в вычислительной системе любые данные представляются в цифровой форме, в виде последовательностей цифр 0 и 1. В такойформе достаточно естественно и удобно представляются числа (правда,приходится прибегать к использованию двоичной системы счисления).Данные же других типов (например литеры) для их представления в машине приходится как-то кодировать в цифровой форме. Для этого множествозначений соответствующего типа обычно отображается (взаимно однозначно) на множество целых чисел, элементы которого и будут представлятьв машине значения отображаемого типа, т.е.
являются их к о д а м и . Следовательно, и действия над значениями такого типа сводятся к действиямнад их кодами, т.е. над целыми числами.Множество значений некоторого типа часто бывает целесообразным считать упорядоченным. Отображение такого множества значений на множество целых чисел, естественно, должно сохранять эту упорядоченность.
Длядостижения этой цели проще всего выбрать такой способ отображения,чтобы из справедливости Ах < Ау (где через Ах обозначен образ, т.е. к о дэлемента х) следует, что JC предшествует у для любых двух элементов х и уотображаемого множества. Так, если имеется упорядоченное множество М,состоящее из пяти литер М = { + А ! = 5 } , элементы которого упорядоченыпо их перечислению, то с сохранением указанной упорядоченности элементы множества М можно отобразить, например, на последовательность чисел—2, 3, 4, 7, 9. В этом случае из того, например, что 4 < 9, следует, что литера"!" предшествует литере "5". При подобного рода отображении упорядоченного множества на целые числа имеет смысл сравнивать между собойего элементы с помощью операций меньше, больше, равно и т.д.
— имея ввиду, что какой-либо элемент х "больше" любого из предшествующих и"меньше" любого из последующих элементов. Так, если sym есть некотораялитерная переменная, значением которой является одна из литер указанного выше множества М, то из справедливости отношения sym < ' А' следует,что значением переменной sym является литера ' + 'В том частном случае, когда последовательные элементы упорядоченного множества отображаются на последовательные целые числа (начиная с некоторого произвольного целого числа), это множество принятосчитать перенумерованным множеством.
Таковым будет указанное вышемножество М, если его последовательные элементы отобразить напримерна последовательные целые числа —1, 0, 1, 2, 3.В данной главе, чтобы не отвлекать внимание читателя на более трудныемоменты, будут рассмотрены только стандартные типы значений паскаля.Этих сведений будет достаточно для изложения большинства понятий языка и для составления простейших программ на паскале с доведением их довыполнения на машине. Усвоение этих типов и получение навыков по ихиспользованию при составлении программ существенно облегчит понимание более сложных типов значений и связанных с ними понятий языка.В паскале имеются четыре стандартных типа: целый, вещественный, литерный и логический.2.2. Целый тип (integer)Термин целый (или целочисленный) употребляется в обычном смысле иобозначается стандартным именем integer. Значениями целого типа являются элементы подмножества целых чисел, зависящего от реализации языка.
Поскольку в аппаратуре ЭВМ для изображения чисел отводится фиксированное количество разрядов, то для каждой конкретной ЭВМ существует константа с именем maxint такая, что любое представимое в машинецелое число N должно удовлетворять условию—maxint < N < maxint.Попытка вычислить на машине выражение, целочисленное значение которого не принадлежит указанному диапазону, приводит либо к неверномурезультату этого вычисления, либо к прекращению выполнения программы, в зависимости от особенностей данной ЭВМ.
Это число maxint и определяет упомянутое выше подмножество целых чисел.В некоторых ЭВМ диапазон представимых в машине целых чисел несимметричен относительно нуля, так что он определяется двумя константамиminint и maxint:minint < N < maxintпричем minint Ф —maxint (обычно minint = —(maxint—1)).Поскольку целые числа в программах чаще всего используются в качестве значений различного рода счетчиков (например числа повторений циклов) и значений индексов, то ограниченный диапазон допустимых целыхчисел обычно не приводит к трудностям при программировании.
Считается,что целые числа (в отличие от вещественных) в любой вычислительнойсистеме должны представляться точно, и все определенные над ними операции также должны выполняться точно. Множество значений типа integerявляется перенумерованным, причем порядковым номером каждого значения целого типа является само это значение.Над целочисленными значениями в паскале определены пять основныхопераций, результатом которых также является целое число (табл. 2.1).Все эти операции являются двухместными, т.е. применяются к двумаргументам.
Для более наглядного задания такого действия, как изменениезнака значения, операция вычитания (и сложения) может использоватьсяи к а к одноместная, например допустима запись - х .Первые три операции в пояснениях не нуждаются. Операция div есть целочисленное деление: в качестве результата принимается целочисленное частное,Таблица2.1Операции над целыми числамиЗнак операции+divmod36Содержание операциисложениевычитаниеумножениеделение и "отсечение" (отбрасывание дробной части)взятие остатка при деленииа получающийся при делении остаток игнорируется.
Знак результата определяется по обычным алгебраическим правилам, так что, например,7 div 2 = 3, 3div5 = О,(—7)div2 = —3,(—7)div(—2) = 3.Значение т mod п определено только для п > 0. Если т > 0, тот mod п = т — ( ( т div п) * п ) ,а при т < 0 принимаетсят. mod п = т — ( ( т div и) * п) + п(так что значение ттоАп всегда неотрицательно). Например:7 m o d 2 = 1, 3mod5 = 3, (—14)mod3 = 1, ( - l O ) m o d 5 = 0.Указанные выше операции используются в арифметических выражениях,при вычислении которых сначала выполняются операции типа умножения(*, div, m o d ) , имеющие одинаковый ранг (старшинство), а затем операциитипа сложения (+ и —), также имеющие одинаковый, но более низкий ранг.Целый результат дают и следующие четыре стандартные функции:abs(x): х — целое; результат — абсолютная величина х;sqr(x): х — целое; результат — квадрат значениях;t r u n c ( x ) : х — вещественное; результат - целая часть значения х (дробная часть отбрасывается и результат не округляется, так что, например,trune(5.2) = 5, t r u n c ( - 5 .
8 ) = - 5 ) ;round(x) : x - вещественное; результат — округленное целое: round(х) == trunc(x + 0.5) п р к х > 0, round(х) = trunc(x — 0.5) п р и х < 0.Поскольку целый тип является упорядоченным, то к значени IM этоготипа применимы упоминавшиеся ранее функции succ и pred: если i — переменная целого типа, тоsucc(/) дает непосредственно следующее за i целое число,pred(z') дает непосредственно предшествующее г целое число.Впрочем, для значений целого типа тот же результат можно получить спомощью более простых и ясных выражений / + 1 и г — 1.Целые константы, т.е. постоянные целочисленные значения, известныепри составлении программы и не изменяющиеся при ее выполнении, задаются в программе в десятичной системе счисления, чаще всего с помощьюцелого без знака:< целое без знака> :: = <цифра> {(цифра)}Примеры целых без знака:70259800В некоторых синтаксических конструкциях языка используется болееобщее понятие < целое):<целое): :=<целое без знака) | +<целое без знака) |— < целое без знака)2.3.