Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo Pascal / Stud_1_1 / LecRus / MainPart.doc
Скачиваний:
117
Добавлен:
03.03.2016
Размер:
5.03 Mб
Скачать

X a8 alpha Massiv z52d9 eps Res_52_a ___75

Прописные и строчные буквы в идентификаторах считаются эквивалентными. Поэтому PASCAL, Pascal, pascal - это один и тот же идентификатор.

Длина идентификатора в Турбо Паскале не ограничивается, но значимыми считаются лишь первые 63 символа.

6. Метка.

Метка в Паскале представляет собой целое без знака и используется для маркировки операторов программы. Метка может принимать значения от 0 до 9999. В Турбо Паскале в качестве метки можно применять также идентификатор. Внешним признаком метки в программе является двоеточие, которое записывается перед маркируемым оператором.

П Р О С Т Ы Е Т И П Ы Д А Н Н Ы Х

Данные - это общее понятие для всего того, с чем оперирует ЭВМ.

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

Для примера рассмотрим в ПЭВМ два поля памяти А1 и А2 длиной 4 байта:

A1 A2

Содержимое полей A1 и A2 - это последовательность двоичных цифр 0 и 1, которая ничего не означает, если не применить к ней конкретную машинную операцию.

Четырехбайтное поле в ПЭВМ может интерпретироваться как целое число длиной 4 байта (тип longint, условно формат L), как число с плавающей запятой длиной 4 байта (тип single, условно формат S), как строка символов, как битовая последовательность и др. Если для полей A1 и A2 мы применим операцию сложения для формата L “( + ) L A1 A2” , то тогда содержимое полей A1 и A2 будет рассматриваться как целые двоичные числа типа longint.

Для операции “( + ) S A1 A2” содержимое полей A1 и A2 интерпретируется как числа с плавающей запятой типа single.

При использовании логической операции “( \/ ) A1 A2” содержимое этих же полей памяти интерпретируется как битовые последовательности длиной 32 бита.

Пусть содержимое A1 в шестнадцатеричной записи имеет вид 50 6A 37 B1. Рассмотрим его интерпретацию при обработке различными машинными операциями.

  1. Тип longint.

5 + 0 + 6 + 10 + 3 + 7 + 11 + 1 = 1 349 088 353.

б) Тип single (в предположении, что подобно типу real первые три байта поля A1 - мантисса, а четвертый байт - характеристика вещественного числа).

= B1; = - 80 = B1 - 80 = 31 = 490,101 0000 0110 1010 0011 0111  = 0,1101 0000 0110 1010 0011 0111  =

= 0,D06A37  = D06A37  = 13 658 679  33 554 432 = 458 309 215 275 328

в) Битовая последовательность: 0101 0000 0110 1010 0011 0111 1011 0001

г) Строка символов (по таблице ASCII): 'Pj7Б' .

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

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

Тип данных определяет:

- множество значений, которые имеет право принимать переменная заданного типа;

- множество операций, которые допустимы при обработке этой переменной;

- формат внутреннего представления данных в памяти ЭВМ, в том числе объем памяти, выделяемой для размещения переменной.

С каждой переменной в программе может быть сопоставлен только один тип.

Классификация типов данных в Турбо Паскале представлена на приведенной ниже схеме.

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

Т и п

д а н н ы х

Классы

Процедурные типы

Строки

Адресные

типы

Составные

типы

Простые

типы

Классификация простых типов данных представлена на следующей схеме. Здесь термин "ординальный" означает "порядковый" (ordinal - порядковое числительное).

Простые типы данных

Вещественные

типы

Ординальные

типы

Диапазонные

типы

Предописанные

ординальные

типы

Перечисляемые

типы

Символьный

тип

Целые

типы

Логический

тип

Ординальный тип описывает конечное и упорядоченное множество значений, для каждого элемента которого однозначно определяется предыдущий и следующий за ним элементы. В частности, последовательность целых чисел является ординальным типом данных. Например, для элемента 5 существует единственное следующее значение (6) и единственное предыдущее значение (4). Символы алфавита также представляют собой ординальный тип данных. Например, в латинском алфавите для символа "M" следующим является символ "N", а предыдущим - "L". В то же время вещественные числа нельзя отнести к ординальному типу. Так, для числа 15.8 существует бесконечное множество следующих и предыдущих значений (15.81, 15.801, 15.8001 и т.д.).

Каждый ординальный тип имеет минимальное и максимальное значения. Для всех значений, кроме минимального, существует предшествующее значение; для всех значений, кроме максимального, существует последующее значение.

Предописанные функции succ, pred и ord воспринимают аргументы любого из ординальных типов.

Функция succ() (succeed - следующий) дает следующее после ординальное значение; функция pred() (predecessed - предшествующий) - предшествующее значение; функция ord() дает ординальный (порядковый) номер для значения .

Значения переменных ординального типа однозначно отображаются на последовательность порядковых номеров 0, 1, 2,... Исключение сделано только для целых чисел, которые отображаются сами на себя.

Пример 1.

succ(8) = 9 ; succ('d') = 'e' ;

pred(8) = 7 ; pred('d') = 'c' ;

ord(' ') = 32; ord('Ю') = 158 ;

ord(8) = 8 ; ord(-8) = -8 .

Для всех ординальных типов существуют операции отношения "=", "<>", "<", "<=", ">", ">=". При этом предполагается, что оба операнда в операции отношения имеют одинаковый тип. Отношение определяется с помощью порядковых номеров, присущих операндам. Например, проверка истинности отношения 'A' > 'Z' заменяется проверкой отношения ord('A') > ord('Z').

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

1. Логический тип (тип boolean).

Логическое значение - это одно из двух значений истинности, которые обозначают предописанными именами false и true (false эквивалентно значению 0, true - значению 1 в алгебре логики; использование имен false и true вызвано стремлением отличать в программе логические значения от числовых значений 0 и 1).

Логический тип определен так, что false < true, что соответствует машинному представлению логических констант false и true.

Операции отношения всегда дают логический результат. Например, отношение x+1<y при x = 0, y = 0 дает false; при x = 0, y = 10 - значение true.

Для переменных логического типа в Турбо Паскале определены четыре логические операции:

1) отрицание not;

2) логическое умножение and;

3) логическое сложение or;

4) исключающее ИЛИ (отрицание равнозначности, сложение по модулю 2) xor.

Исключающее ИЛИ определяется следующей таблицей операций:

0  0 = 0

0  1 = 1

1  0 = 1

1  1 = 0

Как было ранее указано в разделе «Представление информации в ПЭВМ», в алгебре логики основными операциями являются отрицание not, логическое умножение and и логическое сложение or. Все остальные операции могут быть выражены через эти базовые операции. Например, a xor b эквивалентно

(a or b) and (not a or not b).

Обозначения в символах алгебры логики:

.

Справедливо также выражение

.

Примечание.

Если переменные a, b, c имеют тип boolean, то оператор

c:=a xor b

эквивалентен оператору

c:=a<>b.

В самом деле, из таблицы операций видно, что если переменные a и b имеют одинаковые значения, то переменная с получает значение 0, в протвном случае – значение 1.

Пример логического выражения:

((x + 1 < y) and not (x > 5)) or ((y > 0) and true) .

Вычислим значение этого выражения при x = 5, y = 5 :

((6 < 1) and not (5 > 5)) or ((5 > 0) and true)  ( false and not false ) or

( true and true )  ( false and true ) or ( true and true )  false or truetrue .

В символике алгебры логики:

.

Для переменной типа boolean отводится один байт памяти. Машинное представление значения true имеет вид 00000001, значения false - 00000000, т.е. ord(false) = 0, ord(true) =1.

Существуют несколько предописанных логических функций, т.е. функций, которые дают логический результат. В частности, при обработке целочисленных переменных применяется функция odd(x), которая дает значение true, если целое x - нечетное, и значение false, если x - четное. Другие логические функции будут рассмотрены позже.

Соседние файлы в папке LecRus