Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
osnovy_programmirovanija_v_srede_lazarus.pdf
Скачиваний:
182
Добавлен:
18.03.2015
Размер:
6.53 Mб
Скачать

Глава 3 Более сложные элементы языка

____________________________________________________________________

var имя переменной: ^тип;

Например:

var px: ^integer; // указатель на данные целого типа py: ^real; // указатель на данные вещественного типа pname: ^string; // указатель на данные типа строка

pphone: ^string[7];

Компилятор строго следит за правильностью использования указателя и типом данных, на которые ссылается этот указатель.

Для нетипизированных указателей тип данных не указывается. В этом слу-

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

Пример описания нетипизированного указателя:

var p: pointer;

Более подробно мы будем изучать указатели в главе 4.

В дальнейшем мы рассмотрим еще типы данных, в частности, в следую-

щем разделе познакомимся с типами данных, позволяющих обрабатывать сим-

вольную информацию.

3.3. Обработка символьной информации в Паскале

3.3.1 Символьные и строковые типы данных.

Первые применения ЭВМ были в основном для решения так называемых вычислительных задач, т.е. задач возникающих в математике, в научно – тех-

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

дач составляет всего 20 – 25% по сравнению с их применением в других облас-

тях. К таким задачам относятся задачи, возникающие в лингвистике, логике,

165

3.3Обработка символьной информации в Паскале

____________________________________________________________________

психологии, теории игр и т.д.

Компьютеры широко применяются для набора различных текстов и доку-

ментов, перевода текстов. Компьютеры сочиняют музыку, пишут стихи, играют

вшахматы. Конечно, при решении таких задач вычисления производятся, но не

втаком объеме, как при решении вычислительных задач. В основном в нечи-

словых задачах компьютер оперирует с символьной информацией.

Необходимо понимать, что вся информация, хранящаяся в памяти компью-

тера, представлена в виде двоичных чисел. Все дело в том, что под этими дво-

ичными числами понимается, действительно ли это какие-то числа или что-

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

рабатываются эти числа совершенно по-другому. Программист знает, когда он работает с числами, когда с символами и поэтому предусматривает для каждого случая соответствующие способы работы с этими числами. А в памяти компь-

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

Примечательно, что возможность применения компьютеров для решения нечисловых задач понимали еще тогда, когда и компьютеров-то вообще не бы-

ло! Вот что писала знаменитая Ада Лавлейс еще в 1843 году: "Многие не све-

дущие в математике люди думают, что поскольку назначение аналитической машины Бэббиджа – выдавать результаты в численном виде, то природа проис-

ходящих в ней процессов должна быть арифметической и численной, а не ал-

гебраической и аналитической. Но они ошибаются. Машина может упорядочи-

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

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

В 1963 г. американская организация по стандартизации American Standards Association (ASA) предложила для представления символов, т.е. цифр, букв и других знаков специальный семибитный код, который стал называться кодовой

166

Глава 3 Более сложные элементы языка

____________________________________________________________________

таблицей ASCII (American Standard Code for Information Interchange). Номер,

который символ имеет в таблице ASCII, называется кодом этого символа. Сим-

вол можно представить, указав его в кавычках, а можно использовать значок #,

за которым следует код символа. Например, буква 'А', в таблице ASCII

имеет номер 65, т е. его код равен 65, тогда можно указать # 65 и это будет оз-

начать букву 'А'.

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

ASCII, в которой первые 128 символов оставались те же, что и в 7-битной таб-

лице, а символы с 128 по 255 отводились для не английских символов. Позднее

Microsoft расширила таблицу ASCII и она была переименована и стала назы-

ваться ANSI (American National Standards Institute). В таблице 3.4. приведена первая половина (с кодами 0…127) этого стандарта.

Как мы видим, первая половина таблицы содержит все буквы латинского алфавита, цифры от 0 до 9, а также все наиболее употребимые знаки, такие как знак +, -, /, *, скобки и т.д.

Вторая половина символов с кодами 128…255 меняется для различных на-

циональных алфавитов. С появлением национальных локализаций для второй половины таблицы ASCII было введено понятие «кодовая страница» (code page, CP). Для кодирования русских букв в MS DOS стали применять кодировку

CP866, ранее известную как альтернативная кодировка ВЦ Академии Наук

СССР.

В Windows для представления кириллицы используется кодовая страница

CP-1251. Стандартные Windows-шрифты Arial Cyr, Courier New Cyr и Times New Roman Cyr для представления символов кириллицы (без букв 'ѐ' и 'Ё')

используют последние 64 кода (от 192 до 256): 'А''Я' кодируются значе-

ниями 192…223, 'а''я' – 224…255.

А в консоли Windows используется кодировка CP866. Этим и объясняются проблемы при выводе русских букв на экран в консольных приложениях.

167

3.3Обработка символьной информации в Паскале

____________________________________________________________________

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

 

 

 

 

 

 

 

Таблица 3.4

Код

Символ

Код

Символ

Код

Символ

Код

 

Символ

0

NUL

32

BL

64

@

96

 

`

1

SOH

33

!

65

A

97

 

a

2

STX

34

66

B

98

 

b

3

ETX

35

#

67

C

99

 

c

4

EOT

36

$

68

D

100

 

d

5

ENQ

37

%

69

E

101

 

e

6

ACK

38

&

70

F

102

 

f

7

BEL

39

'

71

G

103

 

g

8

BS

40

(

72

H

104

 

h

9

HT

41

)

73

I

105

 

i

10

LF

42

*

74

J

106

 

j

11

VT

43

+

75

K

107

 

k

12

FF

44

,

76

L

108

 

l

13

CR

45

-

77

M

109

 

m

14

SO

46

.

78

N

110

 

n

15

SI

47

/

79

O

111

 

o

16

DEL

48

0

80

P

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

DC4

52

4

84

T

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

X

120

 

x

25

EM

57

9

89

Y

121

 

y

25

SUB

58

:

90

Z

122

 

z

27

ESC

59

;

91

[

123

 

{

28

FS

60

<

92

\

124

 

|

28

GS

61

=

93

]

125

 

}

30

RS

62

>

94

^

126

 

~

31

US

63

?

95

_

127

 

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

ский и др. 8-ми разрядов не хватает. Поэтому разработан специальный стандарт

Unicode.

168

Глава 3 Более сложные элементы языка

____________________________________________________________________

Юникод, или Уникод (Unicode) — стандарт кодирования символов, позво-

ляющий представить знаки практически всех письменных языков.

Стандарт предложен в 1991 году некоммерческой организацией «Консор-

циум Юникода» (Unicode Consortium, Unicode Inc.). Применение этого стандар-

та позволяет закодировать очень большое число символов из разных письмен-

ностей: в документах Unicode могут соседствовать китайские иероглифы, ма-

тематические символы, буквы греческого алфавита, латиницы и кириллицы,

при этом становятся ненужными кодовые страницы.

Стандарт состоит из двух основных разделов: универсальный набор сим-

волов (UCS, Universal Character Set) и семейство кодировок (UTF, Unicode

Transformation Format).

Универсальный набор символов задаѐт однозначное соответствие симво-

лов кодам — элементам кодового пространства, представляющим неотрица-

тельные целые числа.

Семейство кодировок определяет машинное представление последова-

тельности кодов UCS.

Коды в стандарте Юникод разделены на несколько областей. Область с ко-

дами от U+0000 до U+007F содержит символы набора ASCII с соответствую-

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

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

В Lazarus по умолчанию используется кодировка UTF-8. В UTF-8 все сим-

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

сти соответствуют первым 128 символам 7-битной таблицы ASCII, следующие

1920 символов – кодируются двумя байтами. Последующие символы кодиру-

ются тремя и четырьмя байтами.

Для нас важным является тот факт, что символы кириллицы кодируются в

UTF-8 в точности двумя байтами.

169

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