Главная страница
Навигация по странице:

  • 2.3.3. Символьные типы данных

  • 2.3.4. Булевские типы данных

  • 2.3.5. Определение новых типов данных

  • 2.3.7. Интервальные типы данных

  • Project Options

  • 2.3.8. Временной тип данных

  • 2.3.9. Типы данных со словом type

  • 2.4. Операции 2.4.1. Выражения

  • 2.4.2. Арифметические операции

  • Учебное пособие для студентов Авторы А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько Содержание Содержание 1


    Скачать 2.61 Mb.
    НазваниеУчебное пособие для студентов Авторы А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько Содержание Содержание 1
    Дата15.01.2023
    Размер2.61 Mb.
    Формат файлаdoc
    Имя файлаlab_OOTP.doc
    ТипУчебное пособие
    #886736
    страница4 из 33
    1   2   3   4   5   6   7   8   9   ...   33
    2.3.2. Вещественные типы данных

    Вещественные типы данных применяются для описания вещественных данных с плавающей или с фиксированной точкой (таблица 2.2).

    Тип данных

    Диапазон значений

    Мантисса

    Объем памяти (байт)

    Real

    5.0*10–324..1.7*10308

    15–16

    8*

    Real48

    2.9*10–39..1.7*1038

    11–12

    6

    Single

    1.5*10–45..3.4*1038

    7–8

    4

    Double

    5.0*10–324..1.7*10308

    15–16

    8

    Extended

    3.4*10–4932..1.1*104932

    19–20

    10

    Comp

    –9223372036854775808 .. 9223372036854775807

    19–20

    8

    Currency

    –922337203685477.5808 .. 922337203685477.5807

    19–20

    8

    Таблица 2.2. Вещественные типы данных

    * Примечание: количество байт памяти, требуемых для хранения переменных обобщенных типов данных, приведено для 32-разрядных процессоров семейства x86.

    Пример описания вещественных данных:

    var

    X, Y: Double;

    Z: Extended;

    Необходимо отметить, что тип Real является обобщенным типом данных и по отношению к нему справедливо все то, что было сказано о типах Integer и Cardinal.

    2.3.3. Символьные типы данных

    Символьные типы применяются для описания данных, значением которых является буква, цифра, знак препинания и другие символы. Существуют два фундаментальных символьных типа данных: AnsiChar и WideChar (таблица 2.3). Они соответствуют двум различным системам кодировки символов. Данные типа AnsiChar занимают один байт памяти и кодируют один из 256 возможных символов расширенной кодовой таблицы ANSI, в то время как данные типа WideChar занимают два байта памяти и кодируют один из 65536 символов кодовой таблицы Unicode. Кодовая таблица Unicode — это стандарт двухбайтовой кодировки символов. Первые 256 символов таблицы Unicode соответствуют таблице ANSI, поэтому тип данных AnsiChar можно рассматривать как подмножество WideChar.

    Тип данных

    Диапазон значений

    Объем памяти (байт)

    Фундаментальные типы данных

    AnsiChar

    Extended ANSI character set

    1

    WideChar

    Unicode character set

    2

    Обобщенный тип данных

    Char

    Same as AnsiChar's range

    1*

    Таблица 2.3. Символьные типы данных

    * Примечание: Тип данных Char является обобщенным и соответствует типу AnsiChar. Однако следует помнить, что в будущем тип данных Char может стать эквивалентным типу данных WideChar, поэтому не следует полагаться на то, что символ занимает в памяти один байт.

    Пример описания переменной символьного типа:

    var

    Symbol: Char;

    В программе значения переменных и констант символьных типов заключаются в апострофы (не путать с кавычками!), например:

    Symbol := 'A'; // Переменной Symbol присваивается буква A

    2.3.4. Булевские типы данных

    Булевские типы данных названы так в честь Георга Буля (George Boole), одного из авторов формальной логики. Диапазон значений данных булевских типов представлен двумя предопределенными константами: True — истина и False — ложь (таблица 2.4).

    Тип данных

    Диапазон значений

    Объем памяти (байт)

    Boolean

    False (0), True (1)

    1

    ByteBool

    False (0), True (не равно 0)

    1

    WordBool

    False (0), True (не равно 0)

    2

    LongBool

    False (0), True (не равно 0)

    4

    Таблица 2.4. Булевские типы данных

    Пример описания булевских данных:

    var

    Flag: Boolean;

    WordFlag: WordBool;

    LongFlag: LongBool;

    Булевские типы данных широко применяются в логических выражениях и в выражениях отношения. Переменные типа Boolean используются для хранения результатов логических выражений и могут принимать только два значения: False и True (стандартные идентификаторы). Булевские типы данных ByteBool, WordBool и LongBool введены в язык Delphi специально для совместимости с другими языками, в частности с языками C и C++. Все булевские типы данных совместимы друг с другом и могут одновременно использоваться в одном выражении.

    2.3.5. Определение новых типов данных

    Кроме стандартных типов данных язык Delphi поддерживает типы, определенные программистом. Новый тип данных определяется с помощью зарезервированного слова type, за которым следует идентификатор типа, знак равенства и описание. Описание завершается точкой с запятой. Например, можно определить тип, тождественный существующему типу:

    type

    TUnicode = WideChar; // TUnicode тождественен типу WideChar

    TFloat = Double; // TFloat тождественен типу Double

    Нетрудно заметить, что идентификаторы новых типов в примере начинаются заглавной буквой T (первая буква слова type). Такое соглашение о типах программиста принято разработчиками среды Delphi, но оно не является строгим. Тем не менее, мы рекомендуем его придерживаться, так как оно способствует более легкому восприятию исходного текста программы.

    Синтаксическая конструкция type позволяет создавать новые порядковые типы: перечисляемые типы и интервальные типы.

    2.3.6. Перечисляемые типы данных

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

    type

    TDirection = (North, South, East, West);

    На базе типа TDirection можно объявить переменную Direction и присвоить ей значение:

    var

    Direction: TDirection;

    begin

    Direction := North;

    end.

    На самом деле за идентификаторами значений перечисляемого типа стоят целочисленные константы. По умолчанию, первая константа равна 0, вторая — 1 и т.д. Существует возможность явно назначить значения идентификаторам:

    type

    TSizeUnit = (Byte = 1, Kilobyte = 1024 * Byte, Megabyte = Kilobyte * 1024,

    Gigabyte = Megabyte * 1024);

    2.3.7. Интервальные типы данных

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

    type

    TDigit = 0..9;

    var

    Digit: TDigit;

    begin

    Digit := 5;

    Digit := 10; // Ошибка! Выход за границы диапазона

    end.

    В операциях с переменными интервального типа данных компилятор генерирует код проверки на принадлежность диапазону, поэтому последний оператор вызовет ошибку. Это очень удобно при отладке, но иногда отрицательно сказывается на скорости работы программы. Для отключения контроля диапазона откройте окно Project Options, выберите страницу Compiler и снимите пометку пункта Range Checking.

    Данные перечисляемых и интервальных типов занимают в памяти 1, 2 или 4 байта в зависимости от диапазона значений типа. Например, если диапазон значений не превышает 256, то элемент данных занимает один байт памяти.

    2.3.8. Временной тип данных

    Для представления значений даты и времени в среде Delphi существует тип TDateTime. Он объявлен тождественным типу Double. Целая часть элемента данных типа TDateTime соответствует количеству дней, прошедших с полночи 30 декабря 1899 года. Дробная часть элемента данных типа TDateTime соответствует времени дня. Следующие примеры поясняют сказанное:

    Значение

    Дата

    Время

    0

    30.12.1899

    00:00:00

    0.5

    30.12.1899

    12:00:00

    1.5

    31.12.1899

    12:00:00

    –1.25

    29.12.1899

    06:00:00

    35431.0

    1.1.1997

    00:00:00

    2.3.9. Типы данных со словом type

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

    type

    TFileName = string;

    В приведенном выше примере тип данных TFileName является псевдонимом для стандартного типа данных string.

    Для того чтобы создать действительно новый тип данных, обладающий свойствами уже существующего типа данных, но не тождественный ему, необходимо использовать зарезервированное слово type:

    type

    TFileName = type string;

    Различие между таким способом создания типа и обычным (без слова type) проявится при изучении массивов, записей и классов. Чтобы подготовленный читатель уже сейчас понял, в чем оно состоит, забежим вперед и приведем поясняющий пример (новичкам советуем пропустить пример и вернуться к нему позже после изучения массивов):

    type

    TType1 = array [1..10] of Integer;

    TType2 = type TType1;

    var

    A: TType1;

    B: TType2;

    begin

    B := A; // Ошибка!

    end.

    В примере переменные A и B оказываются несовместимы друг с другом из-за слова type в описании типа TType2. Если же переменные A и B принадлежат простым типам данных, то оператор присваивания будет работать:

    type

    TType1 = Integer;

    TType2 = type TType1;

    var

    A: TType1;

    B: TType2;

    begin

    B := A; // Работает

    end.

    2.4. Операции

    2.4.1. Выражения

    Переменные и константы всех типов могут использоваться в выражениях. Выражение задает порядок выполнения действий над данными и состоит из операндов, круглых скобок и знаков операций. Операнды представляют собой константы, переменные и вызовы функций. Операции — это действия, выполняемые над операндами. Например, в выражении

    (X + Y) / 2;

    X, Y, 2 — операнды; '+', '/' — знаки операций; скобки говорят о том, что сначала выполняется операция сложения, потом — деления.

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

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

    2.4.2. Арифметические операции

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

    Операция

    Действие

    Тип операндов

    Тип результата

    +

    Сложение

    Целый, вещественный

    Целый, вещественный



    Вычитание

    Целый, вещественный

    Целый, вещественный

    *

    Умножение

    Целый, вещественный

    Целый, вещественный

    /

    Деление

    Целый, вещественный

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

    Div

    Целочисленное деление

    Целый

    Целый

    Mod

    Остаток от деления

    Целый

    Целый

    Таблица 2.5. Арифметические операции

    Операции сложения, вычитания и умножения соответствуют аналогичным операциям в математике. В отличие от них операция деления имеет три формы: обычное деление (/), целочисленное деление (div), остаток от деления (mod). Назначение каждой из операций станет понятным после изучения следующих примеров:

    Выражение

    Результат

    6.8 – 2

    4.8

    7.3 * 17

    124.1

    –(5 + 9)

    –14

    –13.5 / 5

    –2.7

    –10 div 4

    –2

    27 div 5

    5

    5 div 10

    0

    5 mod 2

    1

    11 mod 4

    3

    –20 mod 7

    –6

    1   2   3   4   5   6   7   8   9   ...   33


    написать администратору сайта