Численные переменные и типы данных

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

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

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

Типы данных

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

Delphi характеризуется разветвленной структурой типов данных:

Мы рассмотрим с вами пока только простые типы.

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

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

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

Целые типы

Название

Длина,байт

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

Cardinal

4

0. .. 2 147 483 647

Byte

1

0...255

Shortint

1

-128...+127

Smallint

2

-32 768...+32 767

Word

2

0...65 535

Integer

4

-2 147 483 648...+2 147 483 647

Longint

4

-2 147 483 648...+2 147 483 647

Int64

8

-9*1018. ..+9*1018

LongWord

4

0. . .4 294 967 295

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

Стандартные процедуры и функции, применимые к целым типам

Обращение

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

Действие

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

Тоже

Также помимо известных вам арифметических операций для целых чисел существуют еще две: div и mod.

div — деление целых чисел с отбросом дробной части. Например:

 a div b  если а=10 и b=3, то результат равен 3.

mod — остаток от деления целых чисел. Например:

a mod b если а=10 и b=3, то результат равен 1

Представление целых чисел

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

Тип диапазон

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

Type  pir = [1..2006];

Перечисляемый тип

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

Type colors = (red, white, blue);

Символьный тип

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

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

Кодировка символов в соответствии со стандартом ANSI

Код

Символ

Код.

Символ

Код.

Символ

Код

Символ

0

NUL

32

BL

64

@

96

'

1

ЗОН

33

!

65

А

97

а

2

STX

34

66

В

98

b

3

ЕТХ

35

#

67

С

99

с

4

EOT

36

$

68

D

100

d

5

ENQ

37

%

69

Е

101

е

6

ACK

38

&

70

F

102

f

7

BEL

39

'

71

G

103

д

8'

BS

40

(

72

Н

104

h

9

HT

41

)

73

I

105

i

10

LF

42

*

74

J

106

j

11

VT

43

+

75

К

107

k

12

FF

44

f

76

L

108

1

13

CR

45

-

77

М

109

m

14

SO

46

 

 

78

N

110

n

15

SI

47

/

79

0

111

о

16

DEL

48

0

80

Р

112

P

17

DC1

49

1

81

Q

113

q

18

DC2

50

2

82

R

114

r

19

DC3

51

3

83

S

115

s

20

DC 4

52

4

84

Т

116

t

21

NAK

53

5

85

U

117

u

22

SYN

54

6

86

V

118

v

23

ETB

55

7

87

W

119

W

24

CAN

56

8

88

х

120

x

25

EM

57

9

89

Y

121

У

26

SUB

58

:

90

Z

.122

z

27

ESC

59

;

91

t

123

{

28

FS

60

<

92

\

124

1

29

GS

61

=

93

]

125

}

30

RS

62

>

94

Л

126

~

31

US

63

f

95

 

 

127

r

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

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

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

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

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

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

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

Длина, байт

Название

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

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

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 685477,5807

 

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

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

S

е

M

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

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

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

Для работы с вещественными данными могут использоваться встроенные математические функции, представленные в следующей табл. в этой таблице Real означает любой вещественный тип, integer - любой целый тип.

Стандартные математические функции Delphi

Обращение

Тип параметра

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

Примечание

abs (x)

Real, Integer

Тип аргумента Real

Модуль аргумента

Pi

-

<<

П =3.141592653...

ArcTan(x)

 

 

Арктангенс (значение в радианах)

cos (x)

To же <<

To же <<

Косинус, угол в радианах

exp(x)

<<

<<

Экспонента

frac(x)

<<

<<

Дробная часть числа

int(x)

<<

<<

Целая часть числа

ln(x)

<<

<<

Логарифм натуральный

Random

-

<<

Псевдослучайное число, равномерно распределенное в диапазоне 0...[1]

Random.fx)

 

Integer

 

Integer

 

Псевдослучайное целое число, равномерно распределенное в диапазоне 0...(х-1)

Randomize

 

-

 

-

Инициация генератора псевдослучайных чисел

sin (x)

Real

Real

Синус, угол в радианах

sqr(x)

To же

To же

Квадрат аргумента

sqrt(x)

<<

<<

Корень квадратный

На заметку Генератор псевдо случайных чисел представляет собой функцию которая берет некоторое целое число, называемое базовым, изменяет, его разряды По определенному алгоритму и выдает новое число результат. Одновременно с этим новое число становится базовым при следующем обращении к функций; и т. д. (Так как алгоритм процедуры не меняется: в ходе ее работы, числа называются псевдослучайными.) В системном модуле System, который автоматически доступен любой программе, базовое число хранится в переменной с именем RandSeek и всегда имеет начальное значение 0. Это означает, при последовательном обращении к Random в разных, программах (или при нескольких прогонах одной программы) будет всегда выпадать одна и  та же последовательность псевдослучайных чисел.

Представление вещественных чисел

Вещественные числа содержат в своем изображении точку и/или показатель степени (символ Е или е), например:

X = -0.5;

Y = 1.34;

Z = -1E-5;

W = 7.5e+15;

Функции преобразования типов данных

Round(x) — округление вещественного числа до ближайшего целого. Аргумент функции — величина вещественного типа, а результат — округленная до ближайшего целого числа величина типа Longint. Если результат выходит за диапазон значений Longint, то при выполнении программы произойдет ошибка.

Trunc(x) — получение целой части вещественного числа. Тип результата — Longint. Если результат выходит за диапазон значений Longint, то при выполнении программы произойдет ошибка.

Тип дата-время

Тип дата-время определяется стандартным идентификатором TDateTime и предназначен для одновременного хранения и даты, и времени. Во внутреннем представлении он занимает 8 байт и подобно currency представляет собой вещественное число с фиксированной дробной частью: в целой части числа хранится дата, в дробной - время. Дата определяется как количество суток, прошедших с 30 декабря 1899 года, а время - как часть суток, прошедших с 0 часов, так что значение 36444,837 соответствует дате 11.10.1999 и времени 20:05. Количество суток может быть и отрицательным, однако значения меньшие -693594 (соответствует дате 00.00.0000 от Рождества Христова) игнорируются функциями преобразования даты к строковому типу.

Над данными типа TDateTime определены те же операции, что и над вещественными числами, а в выражениях этого типа могут участвовать константы и переменные целого и вещественного типов.

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

Подпрограммы для работы с датой и временем

Function Date: TDateTime;

 

Function DateToStr(D: TDateTime): String;

Function DateTimeToStr(D: TDateTime): String;

 

Function FormatDateTime (Format: String;

 

Value(TDateTime): String;

 

Function Now: TDateTime;

 

Function Time: TDateTime;

 

Function TimeToStrfT(TDateTime): String;

Возвращает текущую дату

 

Преобразует дату в строку символов

Преобразует дату и время в строку символов

 

 

Преобразует дату и время из параметра value в строку символов в соответствии со спецификаторами параметра Format (см. пояснения в п. 7.3.)

 

Возвращает текущую дату и время

 

Возвращает текущее время

 

Преобразует время в строку

На главную.
Используются технологии uCoz