Помощь в написании студенческих работ
Антистрессовый сервис

Простые типы. 
Структурированные типы данных

РефератПомощь в написанииУзнать стоимостьмоей работы

Использование перечисляемых типов повышает надежность программ благодаря возможности контроля тех значений, которые получают соответствующие переменные. В Object Pascal допускается обратное преобразование: любое выражение типа Word можно преобразовать в значение перечисляемого типа, если только значение целочисленного выражения не превышает мощности этого типа. Такое преобразование достигается… Читать ещё >

Простые типы. Структурированные типы данных (реферат, курсовая, диплом, контрольная)

К простым типам относятся порядковые, вещественные типы и тип дата-время.

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

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

Тип дата-время предназначен для хранения даты и времени. Фактически для этих целей он использует вещественный формат.

Порядковые типы

К порядковым типам относятся (см. рис. 1.1) целые, логические, символьный, перечисляемый и тип-диапазон. К любому из них применима функция Ord (x), которая возвращает порядковый номер значения выражения X.

Для целых типов функция ord (x) возвращает само значение х, т. е. Ord (X) = х для х, принадлежащего любому целому типу. Применение Ord (x) к логическому, символьному и перечисляемому типам дает положительное целое число в диапазоне от 0 до 1 (логический тип), от 0 до 255 (символьный), от 0 до 65 535 (перечисляемый). Тип-диапазон сохраняет все свойства базового порядкового типа, поэтому результат применения к нему функции ord (х) зависит от свойств этого типа.

К порядковым типам можно также применять функции:

pred (x) — возвращает предыдущее значение порядкового типа (значение, которое соответствует порядковому номеру ord (х) -1, т. е. оrd (рred (х)) = оrd (х) — 1;

succ (х) — возвращает следующее значение порядкового типа, которое соответствует порядковому номеру ord (х) +1, т. е. оrd (Succ (х)) = оrd (х) + 1.

Например, если в программе определена переменная.

var.

с: Char;

begin.

с := '5';

end;

то функция PRED© вернет символ '4', а функция SUCC (с) — символ '6'.

Если представить себе любой порядковый тип как упорядоченное множество значений, возрастающих слева направо и занимающих на числовой оси некоторый отрезок, то функция pred (x) не определена для левого, a succ (х) — для правого конца этого отрезка.

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

Таблица 1.1 — Целые типы.

Название.

Длина, байт.

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

Cardinal.

0.. 2 147 483 647.

Byte.

0…255.

Shortint.

— 128…+127.

Smallint.

— 32 768…+32 767.

Word.

0…65 535.

Integer.

— 2 147 483 648…+2 147 483 647.

Longint.

— 2 147 483 648…+2 147 483 647.

Int64.

— 9*1018…+9*1018.

LongWord.

0.. .4 294 967 295.

Типы LongWord и Int64 впервые введены в версии 4, а типы Smallint и Cardinal отсутствуют в Delphi 1. Тип integer для этой версии занимает 2 байта и имеет диапазон значений от -32 768 до +32 767, т. е. совпадает с Smallint.

При использовании процедур и функций с целочисленными параметрами следует руководствоваться «вложенностью» типов, т. е. везде, где может использоваться word, допускается использование Byte (но не наоборот), в Longint «входит» Smallint, который, в свою очередь, включает в себя Shortint.

Перечень процедур и функций, применимых к целочисленным типам, приведен в табл. 1.2. Буквами b, s, w, i, l обозначены выражения соответственно типа Byte, Shortint, Word, Integer и Longint,.

х — выражение любого из этих типов; буквы vb, vs, vw, vi, vl, vx обозначают переменные соответствующих типов. В квадратных скобках указывается необязательный параметр.

Таблица 1.2 — Стандартные процедуры и функции, применимые к целым типам.

Обращение.

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

Действие.

abs (x).

x.

Возвращает модуль x.

chr (b).

Char.

Возвращает символ по его коду.

dec (vx [, i]).

;

Уменьшает значение vx на i, а при отсутствии i — на 1.

inc (vx[, i]).

;

Увеличивает значение vx на i, а при отсутствии iна 1.

Hi (w).

Byte.

Возвращает старший бант аргумента.

Hi (I).

То же.

Возвращает третий по счету байт.

Lo (i).

".

Возвращает младший байт аргумента.

Lo (w).

".

То же.

odd (l).

Boolean.

Возвращает True, если аргумент-нечетное число.

Random (w).

Как у параметра.

Возвращает псевдослучайное число, равномерно распределенное в диапазоне 0…(w-l).

sqr (x).

X.

Возвращает квадрат аргумента.

swap (i).

Integer.

Меняет местами байты в слове.

swap (w).

Word.

Тоже.

При действиях с целыми числами тип результата будет соответствовать типу операндов, а если операнды относятся к различным целым типам — общему типу, который включает в себя оба операнда. Например, при действиях с shortint и word общим будет тип integer. В стандартной настройке компилятор Delphi не вырабатывает код, осуществляющий контроль за возможной проверкой выхода значения из допустимого диапазона, что может привести к недоразумениям.

Логические типы. К логическим относятся типы Boolean, ByteBool, Bool, wordBool и LongBool. В стандартном Паскале определен только тип Boolean, остальные логические типы введены в Object Pascal для совместимости с Windows: типы Boolean и ByteBool занимают по одному байту каждый, Bool и WordBool — по 2 байта, LongBool — 4 байта. Значениями логического типа может быть одна из предварительно объявленных констант False (ложь) или True (истина).

Поскольку логический тип относится к порядковым типам, его можно использовать в операторе цикла счетного типа. В Delphi 32 для Boolean значение.

Ord (True) = +1, в то время как для других типов (Bool, WordBool и т. д.).

Ord (True) = -1, поэтому такого рода операторы следует использовать с осторожностью! Например, для версии Delphi 6 исполняемый оператор showMessage (' —- ') в следующем цикле for не будет выполнен ни разу:

var.

L: Bool;

k: Integer;

begin.

for L:= False to True do.

ShowMessage ('—);

end;

Если заменить тип параметра цикла L в предыдущем примере на Boolean, цикл будет работать и сообщение дважды появится на экране. [Для Delphi версии 1 и 2 ord (True) =+1 для любого логического типа.].

Символьный тип. Значениями символьного типа является множество всех символов ПК. Каждому символу приписывается целое число в диапазоне 0…255. Это число служит кодом внутреннего представления символа, его возвращает функция ord.

Для кодировки в Windows используется код ANSI (назван по имени American National Standard Institute — американского института стандартизации, предложившего этот код). Первая половина символов ПК с кодами 0… 127 соответствует таблице 1.3. Вторая половина символов с кодами 128…255 меняется для различных шрифтов. Стандартные Windows-шрифты Arial Cyr, Courier New Cyr и Times New Roman для представления символов кириллицы (без букв «ё» и «Ё») используют последние 64 кода (от 192 до 256): «А»… «Я» кодируются значениями 192.223, «а»… «я» — 224…255. Символы «Ё» и «ё» имеют соответственно коды 168 и 184.

Таблица 1.3 — Кодировка символов в соответствии со стандартом ANSI.

Код.

Символ.

Код.

Символ.

Код.

Символ.

Код.

Символ.

NUL.

BL.

'.

ЗОН.

!

А.

а.

STX.

".

В.

b.

ЕТХ.

#.

С.

с.

EOT.

$.

D.

d.

ENQ.

%.

Е.

е.

ACK.

&.

F.

f.

BEL.

'.

G.

д.

8'.

BS.

(.

Н.

h.

HT.

).

I.

i.

LF.

*.

J.

j.

VT.

К.

k.

FF.

F.

L.

CR.

;

М.

m.

SO.

N.

n.

SI.

о.

DEL.

Р.

P.

DC1.

Q.

q.

DC2.

R.

r.

DC3.

S.

s.

DC 4.

Т.

t.

NAK.

U.

u.

SYN.

V.

v.

ETB.

W.

W.

CAN.

х.

x.

EM.

Y.

У.

SUB.

:

Z.

.122.

z.

ESC.

;

t.

{.

FS.

<

GS.

=.

].

}.

RS.

>

Л.

~.

US.

F.

r.

Символы с кодами 0…31 относятся к служебным кодам. Если эти коды используются в символьном тексте программы, они считаются пробелами.

К типу char применимы операции отношения, а также встроенные функции:

Сhаr (в) — функция типа char; преобразует выражение в типа Byte в символ и возвращает его своим значением;

UpCase (CH) — функция типа char; возвращает прописную букву, если сн — строчная латинская буква, в противном случае возвращает сам символ сн (для кириллицы возвращает исходный символ).

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

type.

colors = (red, white, blue);

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

Соответствие между значениями перечисляемого типа и порядковыми номерами этих значений устанавливается порядком перечисления: первое значение в списке получает порядковый номер 0, второе — 1 и т. д. Максимальная мощность перечисляемого типа составляет 65 536 значений, поэтому фактически перечисляемый тип задает некоторое подмножество целого типа word и может рассматриваться как компактное объявление сразу группы целочисленных констант со значениями 0, 1 и т. д.

Использование перечисляемых типов повышает надежность программ благодаря возможности контроля тех значений, которые получают соответствующие переменные. В Object Pascal допускается обратное преобразование: любое выражение типа Word можно преобразовать в значение перечисляемого типа, если только значение целочисленного выражения не превышает мощности этого типа. Такое преобразование достигается применением автоматически объявляемой функции с именем перечисляемого типа.

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

Тип-диапазон задается границами своих значений внутри базового типа:

.

Здесь — минимальное значение типа-диапазона; - максимальное его значение.

Тип-диапазон не обязательно описывать в разделе type, а можно указывать непосредственно при объявлении переменной.

При определении типа-диапазона нужно руководствоваться следующими правилами:

два символа «.» рассматриваются как один символ, поэтому между ними недопустимы пробелы; левая граница диапазона не должна превышать его правую границу.

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

В стандартную библиотеку Object Pascal включены две функции, поддерживающие работу с типами-диапазонами:

High (х) — возвращает максимальное значение типа-диапазона, к которому принадлежит переменная х;

Low (х) — возвращает минимальное значение типа-диапазона.

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

Таблица 1.4 — Вещественные типы.

Длина, байт.

Название.

Количество значащих цифр

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

  • 8
  • 4
  • 8
  • 10
  • 8
  • 8

Real.

Single.

Double.

Extended.

Comp.

Currency.

  • 15…16
  • 7…8
  • 15…16
  • 19…20
  • 19…20
  • 19…20
  • 5.0 *10e-324…1.7*10e308
  • 1.5 *10e-45…3.4*10e38
  • 5.0 *10e324…1.7*10e308
  • 3.4 *10−4951…1.1*10e4932
  • -2e63…+2e63−1

+/-922 337 203 685 477,5807.

В предыдущих версиях Delphi 1…3 тип Real занимал 6 байт и имел диапазон значений от 2,9*10−39 до 1,7*1038. В версиях 4 и 5 этот тип эквивалентен типу Double. Если требуется (в целях совместимости) использовать 6-байтных Real, нужно указать директиву компилятора {SREALCOMPATIBILITY ON}.

Как видно из табл. 1.4, вещественное число в Object Pascal занимает от 4 до 10 смежных байт и имеет следующую структуру в памяти ПК.

Здесь s — знаковый разряд числа; е — экспоненциальная часть; содержит двоичный порядок; m — мантисса числа.

Мантисса m имеет длину от 23 (для single) до 63 (для Extended) двоичных разрядов, что и обеспечивает точность 7…8 для single и 19…20 для Extended десятичных цифр. Десятичная точка (запятая) подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом ее положение сдвигается влево или вправо в соответствии с двоичным порядком числа, хранящимся в экспоненциальной части, поэтому действия над вещественными числами называют арифметикой с плавающей точкой (запятой).

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

Особое положение в Object Pascal занимают типы comp и Currency, которые трактуются как вещественные числа с дробными частями фиксированной длины: в comp дробная часть имеет длину 0 разрядов, т. е. просто отсутствует, в currency длина дробной части -4 десятичных разряда. Фактически оба типа определяют большое целое число со знаком, сохраняющее 19…20 значащих десятичных цифр (во внутреннем представлении они занимают 8 смежных байт). В то же время в выражениях comp и currency полностью совместимы с любыми другими вещественными типами: над ними определены все вещественные операции, они могут использоваться как аргументы математических функций и т. д. Наиболее подходящей областью применения этих типов являются бухгалтерские расчеты.

Показать весь текст
Заполнить форму текущей работой