Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Теоретическая Информатика

.pdf
Скачиваний:
64
Добавлен:
11.04.2015
Размер:
6.24 Mб
Скачать

§ 2. Римские числа

85

2°. П е р е в о д ы р и м с к и х

ч и с е л

с и с п о л ь з о в а н и е м и х п р и н ц и п о в з а п и с и

1. Принцип сложения римских цифр.

Если римская цифра стоит перед равной или меньшей, то они складываются.

2. Принцип вычитания римских цифр.

Если римская цифра стоит перед большей, то меньшая вы- читается из большей.

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

1. Чтение римских чисел.

А л г о р и т м 2 . 1 0 . П е р е в о д р и м с к и х ч и с е л в д е с я т и ч н ы е .

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

1.Римское число просматривается слева направо по одной цифре. Если текущая цифра больше или равна следующей, то десятичное значение текущей прибавляется к целевому числу.

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

3.Если осталась одна римская цифра, то ее десятичное зна- чение прибавляется к целевому числу.

Например,

MMCMXLVII = 1000 + 1000 + 900 + 40 + 5 + 1 + 1 = 2947.

2. Запись римских чисел.

А л г о р и т м 2 . 1 1 . П е р е в о д д е с я т и ч н ы х ч и с е л

вр и м с к и е .

1.Десятичное число записывается последовательно слева направо максимально возможными римскими цифрами, следя при этом, чтобы римское число не превышало десятичного .

2.Если в шаге 1 получается четыре одинаковых десятичных римских знака подряд, то они сразу заменяются таким же деся- тичным знаком и следующим за ним по величине половинным.

3.Если на шаге 2 десятичный римский знак окажется между двумя половинными, то эти три знака сразу заменяются этим же десятичным и следующим за ним по величине десятичным.

86

Глава 2. Символы

При переводе чисел может потребоваться от 1 до 3 шагов. а. Только первый шаг:

3 = III; 6 = VI; 11 = XI; 22 = XXII.

б. Первый и второй шаги:

4 = IV, а не IIII;

45 = XLV, а не XXXXV;

в. Все три шага:

9 = IX, а не VIIII или VIV;

19 = XIX, а не XVIIII или XVIV.

3°. У п р а ж н е н и я 1. Переведите следующие римские числа в десятичные.

а. MDCLXVI.

б. MMMDCCCLXXXVIII. в. CMXCIX.

г. CDXLIV.

2. Переведите следующие десятичные числа в римские.

а. 39. б. 49. в. 99.

г. 999.

3. Какие из следующих записей являются римскими числа- ми, а какие не является и почему? Переведите римские числа.

а. IIII.

б. IL.

в. XM.

г. DCD.

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

а. 4000. б. 10. в. 3,14. г. 1/2.

§ 3. Кодовые таблицы

87

§ 3. Кодовые таблицы

1. Виды кодовых таблиц

1°. А с к и - к о д ы .

О д н о б а й т о в ы е к о д о в ы е т а б л и ц ы Немногочисленные стандартные международные символы,

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

Кодирование символов обозначение символа числом. Кодовая таблица таблица, в которой собраны закодиро-

ванные символы в порядке их кодов.

Количество цифр в коде определяется количеством байтов, которое используется для кодирования. Например, комбина- ции 8-разрядных двоичных чисел достаточны для кодирова- ния 256 символов. Все стандарты кодирования используют 1, 2, 3 или 4 байта, другими словами, 8, 16, 24 или 32 бита.

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

Аски-коды (ASCII) соответствие между стандартными ме- ждународными символами и 7-битными двоичными числами.

ASCII — American Standard Code for Information Interchange.

Аски-коды кодируются одним байтом, у которого старший, 8-й, разряд всегда равен нулю. Оставшиеся семь битов позво- ляют кодировать не более 128 символов.

Аски-коды эквивалентны официальному междуна- родному стандарту ISO 646.

Этот стандарт действует во всех странах почти на всех ком- пьютерах.

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

фигурации и сценарии).

88

 

 

 

 

 

 

 

Глава 2. Символы

 

 

 

 

 

 

 

Т а б л и ц а 2 . 1 2

 

 

 

Аски-коды

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Символ

 

 

 

 

 

 

 

 

Код

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

@

 

P

`

 

p

 

 

32

48

64

 

80

96

 

112

 

 

!

1

A

 

Q

a

 

q

 

 

33

49

65

 

81

97

 

113

 

 

"

2

B

 

R

b

 

r

 

 

34

50

66

 

82

98

 

114

 

 

#

3

C

 

S

c

 

s

 

 

35

51

67

 

83

99

 

115

 

 

$

4

D

 

T

d

 

t

 

 

36

52

68

 

84

100

 

116

 

 

%

5

E

 

U

e

 

u

 

 

37

53

69

 

85

101

 

117

 

 

&

6

F

 

V

f

 

v

 

 

38

54

70

 

86

102

 

118

 

 

'

7

G

 

W

g

 

w

 

 

39

55

71

 

87

103

 

119

 

 

(

8

H

 

X

h

 

x

 

 

40

56

72

 

88

104

 

120

 

 

)

9

I

 

Y

i

 

y

 

 

41

57

73

 

89

105

 

121

 

 

*

:

J

 

Z

j

 

z

 

 

42

58

74

 

90

106

 

122

 

 

+

;

K

 

[

k

 

{

 

 

43

59

75

 

91

107

 

123

 

 

,

<

L

 

\

l

 

|

 

 

44

60

76

 

92

108

 

124

 

 

-

=

M

 

]

m

 

}

 

 

45

61

77

 

93

109

 

125

 

 

.

>

N

 

^

n

 

~

 

 

46

62

78

 

94

110

 

126

 

 

/

?

O

 

_

o

 

 

 

 

47

63

79

 

95

111

 

 

 

§ 3. Кодовые таблицы

89

Изучим более подробно состав аски-кодов.

Аски-коды имеют 95 символов с кодами 32—126. Символ с кодом 127 не определен стандартом и не используется. Аски- -коды состоят из четырех групп символов.

1.Цифры. 10 десятичных цифр 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 имеют коды соответственно 48—57.

2.Буквы. Компьютерная индустрия была создана в стране, которая использует самый компактный алфавит в мире. По- этому в аски-кодах находятся только буквы английского язы- ка, что и позволяет под аски-коды отводить только 7 бит коди- рования. Но большие и маленькие буквы имеют разные коды!

а. В аски-кодах находятся 26 прописных (больших) букв ла- тинского (или английского) алфавита

A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z

с кодами соответственно 65—90.

б. В аски-кодах находятся 26 строчных (маленьких) букв ла- тинского (или английского) алфавита

a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z

скодами соответственно 97—122.

3.Знаки препинания. 12 самых распространенных междуна- родных знака препинания, в том числе и пробел,

! " ' ( ) , - . : ; ?

скодами соответственно 32—34, 39—41, 44—46, 58—59, 63.

4.Специальные знаки. 21 специальный знак из аски-кодов были приведены выше в табл. 2.5.

Всего получаем 10 + 26 × 2 + 12 + 21 = 95 символов.

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

Наиболее широко используются однобайтовые кодовые таблицы, использующие все 8 разрядов байта. Несмотря на наличие 2-, 3- и 4-байтных кодировок, набор тестов на компь- ютере производится по однобайтовым таблицам, соответст- вующим выбранным языкам.

90

Глава 2. Символы

Однобайтная кодовая таблица соответствие между симво-

лами и 8-битными двоичными числами.

Однобайтовые кодовые таблицы называются также расши-

ренными аски-кодами.

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

Наблюдается абсолютная совместимость аски-кодов и рас- ширенных аски-кодов. Это выражается в том, что коды симво- лов аски-кодов в 7-битной и 8-битной таблицах в двоичной кодировке абсолютно совпадают. Например, код пробела ра- вен 3210 = 0010 00002 как в аски-кодах, так и в любой однобай- товой кодовой таблице.

Кодовую таблицу удобно рисовать в виде таблицы из 16 строк, как табл. 2.12 и 2.13.

Однобайтная кодовая таблица может в принципе содер- жать 256 символов с десятичными кодами 0—255. Этот деся- тичный диапазон 0—25510 кодов символов кодовой таблицы также записывают в виде двоичного диапазона 0000 0000— 1111 11112 и шестнадцатеричного 00—FF16.

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

1.Первые два столбца, т. е. первые 32 кода 0—31 отведены под управляющие символы. Эти коды иногда передаются сим- волами, но обычно в таблицах не рисуются.

2.95 символов с кодами 32—126 являются аски-кодами.

3.Остальные 128 кодов 128—255 суть символы националь- ных алфавитов, соответствующих названию кодовой таблицы,

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

Код 127 обычно не соответствует никакому символу.

§ 3. Кодовые таблицы

 

 

91

 

 

 

 

 

 

 

 

 

 

 

 

 

Т а б л и ц а 2 . 1 3

 

 

 

 

Структура однобайтной кодовой таблицы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Аски-коды

 

 

Символы национальных алфавитов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

@

P

 

`

p

 

 

 

 

 

 

0224

0240

32

48

 

64

80

 

96

112

0128

0144

0160

0176

0192

0208

!

1

 

A

Q

 

a

q

 

 

 

 

 

 

0225

0241

33

49

 

65

81

 

97

113

0129

0145

0161

0177

0193

0209

"

2

 

B

R

 

b

r

 

 

 

 

 

 

0226

0242

34

50

 

66

82

 

98

114

0130

0146

0162

0178

0194

0210

#

3

 

C

S

 

c

s

 

 

 

 

 

 

0227

0243

35

51

 

67

83

 

99

115

0131

0147

0163

0179

0195

0211

$

4

 

D

T

 

d

t

 

 

 

 

 

 

0228

0244

36

52

 

68

84

 

100

116

0132

0148

0164

0180

0196

0212

%

5

 

E

U

 

e

u

 

 

 

 

 

 

0229

0245

37

53

 

69

85

 

101

117

0133

0149

0165

0181

0197

0213

&

6

 

F

V

 

f

v

 

 

 

 

 

 

0230

0246

38

54

 

70

86

 

102

118

0134

0150

0166

0182

0198

0214

'

7

 

G

W

 

g

w

 

 

 

 

 

 

0231

0247

39

55

 

71

87

 

103

119

0135

0151

0167

0183

0199

0215

(

8

 

H

X

 

h

x

 

 

 

 

 

 

0232

0248

40

56

 

72

88

 

104

120

0136

0152

0168

0184

0200

0216

)

9

 

I

Y

 

i

y

 

 

 

 

 

 

0233

0249

41

57

 

73

89

 

105

121

0137

0153

0169

0185

0201

0217

*

:

 

J

Z

 

j

z

 

 

 

 

 

 

0234

0250

42

58

 

74

90

 

106

122

0138

0154

0170

0186

0202

0218

+

;

 

K

[

 

k

{

 

 

 

 

 

 

0235

0251

43

59

 

75

91

 

107

123

0139

0155

0171

0187

0203

0219

,

<

 

L

\

 

l

|

 

 

 

 

 

 

0236

0252

44

60

 

76

92

 

108

124

0140

0156

0172

0188

0204

0220

-

=

 

M

]

 

m

}

 

 

 

 

 

 

0237

0253

45

61

 

77

93

 

109

125

0141

0157

0173

0189

0205

0221

.

>

 

N

^

 

n

~

 

 

 

 

 

 

0238

0254

46

62

 

78

94

 

110

126

0142

0158

0174

0190

0206

0222

/

?

 

O

_

 

o

 

 

 

 

 

 

 

0239

0255

47

63

 

79

95

 

111

127

0143

0159

0175

0191

0207

0223

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

92 Глава 2. Символы

2°. Д в у х б а й т н а я к о д и р о в к а . К о д и р о в к а U T F - 8 В 1991 году был создан консорциум Unicode, опубликовав- ший двухбайтный стандарт Unicode (www.unicode.org). Хотя

набор на компьютере ведется с использованием однобайтных кодовых таблиц, основные символьные данные, такие, как стандартные шрифты Windows и Word или документы в формате Word, хранятся в международной стандартизиро- ванной двухбайтной кодировке.

Двухбайтная кодовая таблица соответствие между симво-

лами и 16-битными двоичными числами.

Октет объекты, кодированные 8 битами (1 байтом). Двухбайтную кодовую таблицу называют также уникодов-

ской таблицей, или уникодом (Unicode).

Уникод кодирует 216 = 65536 символов кодами от 0 до

6553510, или от 0000 0000 0000 0000 до 1111 1111 1111 11112, или от 00 00 до FF FF16.

Двухбайтный диапазон кодирования лучше передавать в 16-ричной системе четырьмя цифрами: от 00 00 до FF FF. Та- кую кодировку представляют как серию из 256 октетов по 256 символов в каждом октете (см. рис. 2.14).

Октет 00

 

Октет 01

 

 

 

 

 

(0100—01FF)

 

 

 

 

(0000—00FF)

 

 

 

 

 

 

 

 

 

 

 

 

 

Latin

 

L

 

L

Basic Latin

 

 

 

 

 

 

Extended

 

 

 

 

и Latin 1

 

 

 

 

 

 

A—B

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Октет 04

 

Октет 05

 

Октет 06

 

 

(0400—04FF)

 

(0500—05FF)

 

(0600—06FF)

 

 

 

 

 

 

 

 

L

Cyrillic

 

Armenian

 

Arabic

 

 

 

 

и Hebrew

 

 

 

 

 

 

 

 

 

 

 

L

 

L

 

L

L

 

Рис. 2.14. Некоторые октеты уникода

 

§ 3. Кодовые таблицы

93

Октеты нумеруются первыми двумя из четырех 16-ричных цифр (от 00xx до FFxx), а символы в каждом октете послед- ними двумя 16-ричными цифрами (от xx00 до xxFF) (рис. 2.14).

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

Уникодовский вариант идеографической системы обозна- чают аббревиатурой КЯК (Китайский, Японский, Корейский).

Для того, чтобы однобайтные и двухбайтные коды были совместимы, первые 128 символов уникода являются символа- ми аски-кодов, а следующие 128 символов символами стан- дарта Latin 1. Таким образом, первые 256 символов уникода

практически совпадают с однобайтной западноевропейской кодировкой (см. прил. 1.8, 1.10—11).

Однако уникод не является полностью совместимым с од- нобайтными кодировками. Отсутствие в нулевом октете уни- кода символов с десятичными кодами 0128—0159 и наличие

символов в этих же столбцах западноевропейской кодовой таблицы здесь ни при чем.

Дело в том, что любой символ в однобайтной кодировке кодируется одним байтом, а в уникоде двумя. Например,

обычный пробел в однобайтной кодировке кодируется одним байтом 0010 00002 = 2016, а в уникоде двумя байтами 0000 0000 0010 00002 = 002016. В этом и состоит принципиальная несовместимость уникода с однобайтными кодировками.

Для преодоления этого ограничения и достижения полной совместимости одно- и двухбайтных кодировок были созданы различные промежуточные кодировки. Рассмотрим самую распространенную их них UTF-8.

UTF-8 промежуточная кодировка для создания совмес- тимости 16-битного уникода с 7-битными аски-кодами.

UTF — аббревиатура от полного названия кодировки Universal character set Transformation Format.

94

Глава 2. Символы

 

Опишем, каким образом кодировка UTF-8 трансформирует

два байта уникода в свои один, два или три байта. При этом первые 128 кодов UTF-8 полностью совпадают с аски-кодами.

1.Первые 128 символов с кодами 0000—007F кодируются 1 байтом с теми же кодами 0ххххххх в двоичной кодировке.

2.Символы с кодами 0080—07FF кодируются уже 2 байтами 110ххххх 10хххххх в двоичной кодировке.

3.Остальные символы с кодами 0800—FFFF кодируются 3 байтами 1110хххх 10хххххх 10хххххх в двоичной кодировке .

В кодировке UTF-8 невозможно перепутать, каким количе- ством байтов закодирован символ. Если при чтении данных встречается байт, начинающийся в двоичной кодировке с:

а) 0, то это код аски-кодов; б) 110, то этот и следующий байты кодируют символ с ко-

дом из диапазона 0080—07FF;

в) 1110, то этот и следующие два байта кодируют символ с кодом из диапазона 0800—FFFF.

Если байт в двоичной кодировке начинается с 10, то это второй или третий байт кодировки символа в UTF-8.

3°. У п р а ж н е н и я 2. Изучите стандартные специальные знаки из аски-кодов.

а. Перепишите все 12 стандартных специальных символов из аски-кодов, имеющих отношение к математике.

б. Перепишите все 16 стандартных специальных символов из аски-кодов, имеющих отношение к коммерции.

1. Выпишите коды русских букв.

а. Выпишите десятичные коды прописных А, Б, В, Г, Д и строчных а, б, в, г, д букв в однобайтной кириллической коди- ровке Windows из прил. 1.9 и переведите их в двоичные.

б. Выпишите десятичные и шестнадцатеричные коды про-

писных А, Б, В, Г, Д и строчных а, б, в, г, д букв в уникоде из октета 04 прил. 1.11 и переведите их в двоичные.

в. Выпишите коды UTF-8 прописных А, Б, В, Г, Д и строч- ных а, б, в, г, д букв, воспользовавшись их двоичными кодами.