Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi через Прат.doc
Скачиваний:
2
Добавлен:
14.11.2019
Размер:
631.81 Кб
Скачать

Integer is 4 bytes

Maximum value:

ShortInt is 127

SmallInt is 32767

Integer is 2147483647

Minimum value:

ShortInt is -128

SmallInt is -32768

Integer is -2147483648

Типы данных без знака

Преимущество беззнакового типа — в том, что увеличивается максимально возможное значение данных. Например, тип данных SmallInt представляет данные, лежащие в диапазоне от -32768 до +32767, тогда как беззнаковая разновидность этого типа данных может представлять величины в диапазоне от 0 до 65535. Конечно, типы данных без знака можно использовать только для величин, которые никогда не бывают отрицательными (данные по населению, показатели инвентаризационной ведомости и т. п.).

Следующая программа позволяет узнать размерность беззнаковых целых типов.

Программа 2_2

// предельные значения некоторых целочисленных типов данных

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils;

begin

//оператор sizeof возвращает размерность типа данных или переменной

Writeln('Byte is ', SizeOf(Byte), ' bytes');

Writeln('Word is ', SizeOf(Word), ' bytes');

Writeln('Cardinal is ', SizeOf(Cardinal), ' bytes');

Writeln;

//максимальное значение

Writeln('Maximum value:');

Writeln('Byte is ', High(Byte));

Writeln('Word is ', High(Word));

Writeln('Cardinal is ', High(Cardinal));

Writeln;

//минимальное значение

Writeln('Minimum value:');

Writeln('Byte is ', Low(Byte));

Writeln('Word is ', Low(Word));

Writeln('Cardinal is ', Low(Cardinal));

Writeln;

Readln;

end.

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

Программа 2_3

// предельные значения целочисленных типов данных

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils;

const

ZERO = 0;

var

Sam: Smallint; //16-битовое целое

Sue: Word; //16-битовое целое без знака

begin

Sam := High(Smallint);

Sue := Sam;

Writeln('Sam has ', Sam, ' dollars and Sue has ', Sue, ' dollars deposited.');

Writeln('Add $1 to each account.');

Writeln('Now');

Inc(Sam);

Inc(Sue);

Writeln('Sam has ', Sam, ' dollars and Sue has ', Sue, ' dollars deposited.');

Writeln('Poor Sam!');

Writeln;

Sam := ZERO;

Sue := ZERO;

Writeln('Sam has ', Sam, ' dollars and Sue has ', Sue, ' dollars deposited.');

Writeln('Take $1 from each account.');

Writeln('Now');

Dec(Sam);

Dec(Sue);

Writeln('Sam has ', Sam, ' dollars and Sue has ', Sue, ' dollars deposited.');

Writeln('Lucky Sue!');

Readln;

end.

Результат:

Sam has 32767 dollars and Sue has 32767 dollars deposited.

Add $1 to each account.

Now Sam has -32768 dollars and Sue has 32768 dollars deposited.

Poor Sam!

Sam has 0 dollars and Sue has 0 dollars deposited.

Take $1 from each account.

Now Sam has -1 dollars and Sue has 65535 dollars deposited.

Lucky Sue!

В этой программе переменной Sam типа SmallInt и переменной Sue типа Word присваивается самое большое значение для данных типа SmallInt, которое в нашей системе равно 32767. Затем значение каждой переменной увеличивается на единицу. Для переменной Sue это не вызывает никаких проблем, поскольку новое значение намного меньше максимально допустимого для целого числа без знака. Но значение переменной Sam изменяется с 32767 на -32768! Аналогично этому вычитание 1 из 0 не вызывает никаких проблем в отношении переменной Sam, но значение беззнаковой переменной Sue изменяется с 0 на 65535. Как видим, принцип здесь тот же, что и для спидометра автомобиля или счетчика видеомагнитофона: при выходе за границу диапазона одно граничное значение заменяется другим граничным значением. В Delphi определено, что данные без знака ведут себя именно таким образом.

Какой тип выбрать

В языке Delphi имеется такое разнообразие целочисленных типов данных, что может возникнуть вопрос: какой тип данных следует использовать в данном конкретном случае? Обычно для данных типа Intetger выбирается размерность, которая является наиболее "естественной" для компьютера. Понятие естественности означает, что целые числа подобного типа обрабатываются компьютером наиболее эффективно. Если нет серьезных причин предпочесть какой-либо иной тип данных, используйте Integer.

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

Целочисленные типы

Имя типа

Диапазон допустимых значений

Integer

-2 147 483 648..2 147 483 647

Cardinal

0..4 294 967 295

ShortInt

-128..127

SmallInt

-32768..32767

LongInt

-2 147 483 648..2 147 483 647

Int64

-263..263-1

Byte

0..255

Word

0..65535

LongWord

0.. 4 294 967 295

Константы

Целочисленная константа — это константа, записываемая явно, например 212 или 1776. В языке Delphi целочисленные константы могут записываться в двух системах счисления: десятичной (самая популярная система) и шестнадцатеричной (любимая система хакеров, стремящихся получить доступ к данным на аппаратном уровне). Чтобы определить, к какой системе счисления относится числовая константа, анализируются одна или две первые цифры константы. Если первая цифра находится в диапазоне 1—9, то число является десятичным. Таким образом, число 93 —десятичное. Если первый символ — $, то речь идет о шестнадцатеричном числе. Например, число $42 — это шестнадцатеричное число, эквивалентное десятичному числу 66.

Программа 2_4

// демонстрирует использование шестнадцатеричных и восьмеричных чисел

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils;

const

chest = 42; //десятичная целочисленная константа

waist = $42; //шестнадцатеричная целочисленная константа

begin

Writeln('chest = ', chest);

Writeln('waist = ', waist);

Readln;

end.

Результат:

chest = 42

waist = 66

По умолчанию оператор WriteLn отображает на экране целые числа в десятичном виде, независимо от того, как они записаны в программе.

Следует отдавать себе отчет в том, что все перечисленные системы счисления используются лишь для удобства. Например, если сегмент видеопамяти CGA эквивалентен шестнадцатеричному числу В000, то вам перед использованием в своей программе не потребуется преобразовывать его в десятичное число 45056. Можно просто записать $В000. Но независимо от того, в каком виде вы записываете число 10: как 10 или $А, — оно сохраняется в компьютере одним и тем же способом — в виде двоичного числа.

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

const MyFile = 'Имя моего файла ''Mf.txt'''

Объявленная таким образом константа соответствует тексту Имя моего файла "Mf.txt".

Если строковая константа состоит из последовательности нескольких строк (например, строка настолько длинная, что при кодировании ее желательно разбить на несколько строчек), то отдельные строки могут объединяться операцией « + »; Например, оператор:

const C= 'Это начало строки, ' +

'а это ее продолжение';

объявляет константу, содержащую текст «Это начало строки, а это ее продолжение».

В значение строковой константы можно включать как печатаемые, так и непечатаемые символы, указывая после символа «#» десятичное или шестнадцатеричное число от 0 до 255, соответствующее коду ASCII нужного символа. Например, обозначение #13 соответствует символу перевода строки. В записи константы можно чередовать записи в кавычках и записи с символом #. Например, константа

'строка 1'#13'строка 2'

соответствует двум строкам:

строка 1

строка 2

Тип данных char: символы и малые целые числа

Char – 8-битовый символ. Как можно судить по его названию, char предназначен для представления символов, например букв и цифр. Однако если организация хранения чисел не представляет для компьютеров сложности, то с хранением символов ситуация совсем другая. В языках программирования был найден простой выход: для представления символов используется числовой код. Таким образом, тип данных Char — это еще один тип целочисленных данных. Гарантируется, что данные этого типа имеют достаточную размерность для представления всего диапазона основных символов — всех букв, цифр, знаков препинания и т.п. — вычислительной системы, для которой предназначена реализация языка. На практике в большинстве систем основной набор символов содержит менее 256 символов, поэтому для его представления достаточно одного байта.

Наиболее распространенным набором символов в США является ASCII. Символы этого набора представлены числовым кодом (ASCII-кодом). Например, 65 — код символа А. Для удобства в примерах настоящей книги используется ASCII-код.

Тип данных Char также предназначен для хранения одного символа из следующей таблицы

0

·

32

[пробел]

64

@

96

`

128

·

160

[пробел]

192

А

224

а

1

·

33

!

65

A

97

a

129

·

161

Ў

193

Б

225

б

2

·

34

"

66

B

98

b

130

·

162

ў

194

В

226

в

3

·

35

#

67

C

99

c

131

·

163

Ј

195

Г

227

г

4

·

36

$

68

D

100

d

132

·

164

¤

196

Д

228

д

5

·

37

%

69

E

101

e

133

·

165

Ґ

197

Е

229

е

6

·

38

&

70

F

102

f

134

·

166

¦

198

Ж

230

ж

7

·

39

'

71

G

103

g

135

·

167

§

199

З

231

з

8

* *

40

(

72

H

104

h

136

·

168

Ё

200

И

232

и

9

* *

41

)

73

I

105

i

137

·

169

©

201

Й

233

й

10

* *

42

*

74

J

106

j

138

·

170

Є

202

К

234

к

11

·

43

+

75

K

107

k

139

·

171

«

203

Л

235

л

12

·

44

,

76

L

108

l

140

·

172

¬

204

М

236

м

13

* *

45

-

77

M

109

m

141

·

173

­

205

Н

237

н

14

·

46

.

78

N

110

n

142

·

174

®

206

О

238

о

15

·

47

/

79

O

111

o

143

·

175

Ї

207

П

239

п

16

·

48

0

80

P

112

p

144

·

176

°

208

Р

240

р

17

·

49

1

81

Q

113

q

145

177

±

209

С

241

с

18

·

50

2

82

R

114

r

146

178

І

210

Т

242

т

19

·

51

3

83

S

115

s

147

·

179

і

211

У

243

у

20

·

52

4

84

T

116

t

148

·

180

ґ

212

Ф

244

ф

21

·

53

5

85

U

117

u

149

·

181

µ

213

Х

245

х

22

·

54

6

86

V

118

v

150

·

182

214

Ц

246

ц

23

·

55

7

87

W

119

w

151

·

183

·

215

Ч

247

ч

24

·

56

8

88

X

120

x

152

·

184

ё

216

Ш

248

ш

25

·

57

9

89

Y

121

y

153

·

185

217

Щ

249

щ

26

·

58

:

90

Z

122

z

154

·

186

є

218

Ъ

250

ъ

27

·

59

;

91

[

123

{

155

·

187

»

219

Ы

251

ы

28

·

60

<

92

\

124

|

156

·

188

ј

220

Ь

252

ь

29

·

61

=

93

]

125

}

157

·

189

Ѕ

221

Э

253

э

30

·

62

>

94

^

126

~

158

·

190

ѕ

222

Ю

254

ю

31

·

63

?

95

_

127

·

159

·

191

ї

223

Я

255

я

Применение данных типа Char демонстрируется в программе 2_4.

Программа 2_5

// применение данных типа char

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

ch: Char;

begin

Write('Enter a character: ');

Readln(ch);

Writeln('Thank you for the ', ch ,' character.');

Readln;

end.

Результат:

Enter a character:

M

Thank you for the M character.

Отметим, что пользователь вводит символ М, а не соответствующий код символа 77. И программа также выводит символ М, а не код 77. Однако если "заглянуть" в память, то обнаружится, что в переменной ch хранится значение 77. Такое превращение связано не с данными типа Char, а с операторами ReadLn и WriteLn. Эти операторы выполняют преобразование самостоятельно. При вводе с клавиатуры символа М оператор ReadLn преобразует его в значение 77. При выводе данных WriteLn преобразует значение 77 в отображаемый символ М. "Образ действий" операторов ReadLn и WriteLn, определяется типом переменной. Если то же значение 77 присвоить переменной типа Integer, то оператор WriteLn отобразит его как 77 (двумя символами 7). Этот момент иллюстрируется в программе из листинга 2_6.

Программа 2_6

// сопоставление данных типа Char и Integer

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

c: Char;

i: Integer;

begin

c := 'M'; //переменной c присваивается ASCII-код символа M

i := Integer(c); //тот же код сохраняется в переменной типа Integer

Writeln('The ASCII code for ', c, ' is ', i);

Writeln('Add one to the character code:');

Inc(c);

i := Integer(c);

Writeln('The ASCII code for ', c, ' is ', i);

Readln;

end.

Результат:

The ASCII code for M is 77

Add one to the character code:

The ASCII code for N is 78

Запись 'М' представляет числовой код для символа М, поэтому инициализация переменной с типа Char с присвоением значения 'М' означает занесение в нее числа 77. Затем идентичное значение присваивается переменной i типа Integer. Теперь обе переменные — с и i — содержат число 77. Затем оператор WriteLn отображает переменную с как символ М и переменную i как число 77. Как уже упоминалось ранее, тип значения определяет образ действий оператора WriteLn, когда последний решает, каким образом отображать данное значение.

Поскольку переменная с в действительности содержит целое число, над ней можно выполнять операции для целых чисел, например прибавление единицы. В результате переменная с будет иметь значение 78. Затем это новое значение присваивается переменной i (можно было просто добавить 1 к переменной i). Оператор WriteLn снова отображает значение типа Char как символ и значение типа Integer как число.

Непечатаемые символы (управляющие последовательности)

В значение строковой константы можно включать как печатаемые, так и непечатаемые символы, указывая после символа «#» десятичное или шестнадцатеричное число от 0 до 255, соответствующее коду ASCII нужного символа. Например, обозначение #13 соответствует символу перевода строки. В записи константы можно чередовать записи в кавычках и записи с символом #. Например, константа

'строка 1'#13'строка 2'

соответствует двум строкам:

строка 1

строка 2

Коды управляющих последовательностей

Имя символа

Десятичный кодASCII

Новая строка

#10

Горизонтальная табуляция

#9

Возврат на одну позицию

#8

Перевод строки

#13

Сигнал

#7

Программа 2_7

// использование управляющих последовательностей

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

code: Integer;

begin

Writeln(#7, '"Operation is now activated!"');

Write('Enter your agent code:________', #8#8#8#8#8#8#8#8);

Readln(code);

Writeln(#7, 'You entered ', code, '...');

Writeln(#7, 'Code verified! Proceed with Plan Z3!');

Readln;

end.

После запуска программа выводит на экран следующий текст:

"Operation is now activated!"

Enter your agent code:_______

После вывода символов подчеркивания программа с помощью символа возврата перемещает курсор назад на место первого символа подчеркивания. Теперь можно ввести секретный код и продолжить выполнение программы. Ниже приведены окончательные результаты выполнения программы:

"Operation is now activated!"

Enter your agent code:42007007

You entered 42007007...

Code verified! Proceed with Plan Z3!

Тип данных Boolean

Переменная Boolean – это переменная, которая может принимать два значения: true (истина) или false (ложь). Также необходимо учитывать, что ненулевые значения интерпретируются как значения true, а нулевые значения – как значения false.

Тип данных с плавающей точкой

Предусмотрен тип данных с плавающей точкой: real.

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

Оператор

Действие

+

Сложение

-

Вычитание

*

Умножение

/

Деление дробных чисел

DIV

Деление нацело

MOD

Вычисление остатка от деления

Математические функции

function Abs(X);

Возвращает модуль аргумента

r := Abs(-2.3); { 2.3 }

i := Abs(-157); { 157 }

function Ceil(const X: Extended):Integer;

Округление до наименьшего целого, превышающего или равного аргументу (модуль Math).

Ceil(-2.8) = -2

Ceil(2.8) = 3

Ceil(-1.0) = -1

procedure DivMod(Dividend: Integer, Divisor: Word, var Result, Remainder: Word)

Осуществляет целочисленное деление, возвращая результат и остаток (модуль Math).

Процедура DivMod осуществляет целочисленное деление Dividend на Divisor, возвращая результат Result (целую часть) и остаток Remainder (разность между Dividend и Result * Divisor).

Например:

DivMod(11, 4, Result, Remainder);

возвращает Result = 2 и Remainder = 3.

function Floor(const X: Extended): Integer;

Округление до наибольшего целого, меньшего или равного аргументу(модуль Math).

Floor(-2.8) = -3

Floor(2.8) = 2

Floor(-1.0) = -1

function Frac(X: Extended): Extended;

Дробная часть аргумента

R := Frac(123.456); {0.456 }

R := Frac(-123.456); {-0.456 }

function InRange(const AValue, AMin, AMax: Integer): Boolean; overload;

function InRange(const AValue, AMin, AMax: Int64): Boolean; overload;

function InRange(const AValue, AMin, AMax: Double): Boolean; overload;

Определяет, лежит ли AValue в диапазоне AMin-AMax. (модуль Math)

Описание

Перегруженные варианты функции InRange возвращают true, если число AValue лежит в диапазоне AMinAMax, включая границы. Возвращается false, если AValue строго меньше AMin или строго больше АМах.

Например, операторы

L := InRange(5, 1, 10);

L := InRange(1, 1, 10);

L := InRange(10, 1, 10);

зададут булевой переменной L значение true, а операторы

L := InRange(11, 1, 10);

L := InRange(0, 1, 10);

зададут L = false.

function Int(X: Extended): Extended;

Целая часть аргумента

R := Int(123.456); {123.0}

R := Int(-123.456); {-123.0}

function IntPower(const X: Extended; const X: Integer): Extended register;

Возведение Х в целую степень Е: XE (модуль Math)

function Max(A,B: Integer): Integer; overload;

function Max(A,B: Single): Single; overload;

Максимум двух чисел (модуль Math)

function Min(A,B: Integer): Integer; overload;

function Min(A,B: Single): Single; overload;

Минимум двух чисел (модуль Math)

function Round(X: Extended): Int64;

Ближайшее целое аргумента

Sign(X)

Определяет знак аргумента (модуль Math). Они возвращают 0, если X = 0,-1, если X < 0, +1, если X > 0.

function Sqr(X: Extended): Extended;

function Sqr(X: Integer): Integer;

Квадрат аргумента: X * X.

function Sqrt(X: Extended): Extended;

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

ВОПРОСЫ ДЛЯ ПОВТОРЕНИЯ

  1. Определите следующие переменные:

    1. Типа Smallint со значением 80

    2. Типа Cardinal со значением 42110

    3. Целочисленного типа Integer со значением 3000000000

  2. Эквивалентны ли следующие операторы

var

grade: Char;

begin

grade = #65;

grade = 'A';

end.

  1. Как с помощью программы найти, какому символу соответствует код 88?

УПРАЖНЕНИЯ ПО ПРОГРАММИРОВАНИЮ (2)

  1. Напишите программу, которая запрашивает рост в сантиметрах, а затем выражает его в метрах и сантиметрах. Пусть в программе используется символ подчеркивания, чтобы указать место, где вводить ответ.

Результат:

Enter your height in cm: 182

Your height: 1 m 82 cm

  1. Напишите программу, которая запрашивает ваш рост в метрах и ваш вес в килограммах (для хранения этой информации используйте две переменные). Пусть программа вычислит и отобразит на экране ваш ИМТ (индекс массы тела). Чтобы вычислить ИМТ необходимо разделить вес в килограммах на рост в метрах, возведенный в квадрат

Результат:

Enter your height in m: 1.82

Enter your weight in kg: 70

Your IMT = 21.1327

  1. Напишите программу, которая запрашивает длину пути, который вы проехали, в километрах и количество израсходованных литров бензина, а затем отображает на экране значение, показывающее, расход бензина в литрах на 100 километров.

Результат:

Enter km: 250

Enter litre: 20

The charge on 100 km = 8

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]