Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700269.doc
Скачиваний:
15
Добавлен:
01.05.2022
Размер:
1.78 Mб
Скачать

3.3.2. Действительные типы

Действительные типы данных предназначены для хранения чисел, имеющих дробную часть (табл. 3.4).

Таблица 3.4

Тип

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

Число значащих разрядов

память в байтах

Real48

2.9·10–39 .. 1.7·1038

11–12

6

Real или Double

5.0·10-324 .. 1.7·10308

15–16

8

Single

1.5·10-45 .. 3.4·1038

7–8

4

Extended

3.6·10-4951 .. 1.1·104932

19–20

10

Currency

–922337203685477.5808 .. 922337203685477.5807

19–20

8

Родовым является тип Real, который в настоящий момент эквивалентен типу Double. Наименьшую производительность обеспечивает тип Real48, сохраняемый только для обратной совместимости с более ранними версиями языка. Тип Extended обладает максимальной точностью, но могут возникать проблемы с его переносимостью на другие платформы. Для тип Currency минимизирована ошибка округления и поэтому он используется для представления денежных величин.

3.3.3. Строки

Строки представляют собой последовательность символов и определяются совокупностью четырех типов – ShortString, AnsiString, String, WideString. Различные типы строк можно классифицировать по двум признакам:

  • длинные или короткие строки;

  • строки, использующие или не использующие нулевой символ #0 в конце строки.

Родовым является тип String, который имеет разный смысл в зависимости от директивы компилятора $H. Если включена директива {$H+} (включена по умолчанию), то String интерпретируется компилятором как тип AnsiString – длинная строка (до 2 Гбайт) с нулевым символом ("#0") в конце. Подобное представление строкового типа данных имеет дополнительное имя – ASCIIZ, используются также термины ограниченная нулем строка и строка с завершающим нулем. При директиве {$H-} String интерпретируется как тип ShortString – короткая строка (максимум 255 символов) без завершающего нулевого символа. Тип WideString является длинной строкой с завершающим нулем, используется в серверах COM и интерфейсах, может содержать до 1 Гбайта символов Unicode.

Если в объявлении типа после ключевого слова String следует число символов в квадратных скобках (например, String[4]), то, независимо от директив компилятора, тип трактуется как строка без нулевого символа в конце с указанным числом символов.

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

К строкам применимы операции сравнения. Если сравниваются строки разной длины, то большей считается более длинная строка. При сравнении строк одинаковой длины принимаются в расчет символы в одинаковых позициях – сравниваются коды этих символов.

Сцепление (конкатенация) строк осуществляется операцией "+". Например, выражение S1+S2 даст в результате строку, в которой после символов строки S1 будут расположены символы строки S2. Строки разных типов могут присваиваться друг другу и смешиваться в одном выражении. Компилятор при этом осуществляет автоматическое приведение типов. Но строки, передаваемые как параметры в функции и процедуры, должны иметь указанный в объявлениях тип. В противном случае необходимо использовать операции явного приведения типов или другие приемы программирования.

Со строками можно оперировать как с индексированными массивами символов. Например, S[i] – это символ, расположенный в строке в позиции i (индексы отсчитываются от 1, т.е. индекс 1 соответствует первому символу). Для строк типа ShortString или AnsiString выражение S[i] имеет тип AnsiChar, для строк типа WideString – WideChar.

При работе со строками с завершающим нулем часто используют специальные типы указателей: PChar и PWideChar, которые являются указателями соответственно на массивы с элементами типов Char и WideChar с нулевым символом в конце. Переменные этих типов часто требуется передавать в различные функции и процедуры в качестве параметров. К тому же типы PChar и PWideChar существенно упрощают коды по причине совместимости со строковыми константами. Указатели этих типов могут индексироваться точно так же, как строки и массивы символов. Например, если Р определен как PChar, то P[0] – это первый символ строки.

В выражениях, операторах присваивания и при передаче параметров в функции и процедуры можно смешивать длинные строки (AnsiString) и строки с нулевым символом в конце типа PChar. Но иногда требуется явное приведение типа PChar к типу длинной строки. Например, операция конкатенации строк требует, чтобы хотя бы один ее операнд имел строковый тип. Если же требуется склеить два объекта типа PChar, то это надо сделать с помощью приведения типа:

S := string(P1) + string(P2);