19:04 Типы данных(Часть 2) | ||||||||||||||||
Символьные
типы данных Символьные данные могут хранить текст,
например, для вывода на экран или в диалоговое окно. Символьные данные —
это простая цепочка из чи- сел. Каждое число, в свою очередь,
определяет порядковый номер символа в таблице символов. Например, если
представить наш алфавит в виде такой таблицы, то число 0 будет означать букву
А, число 1 будет означать букву Б, и т. д. Это значит, что слово кот в
числовом виде будет выглядеть так: 10 14 18 Здесь 10 — это буква к, 14 — это о, 18 —
это т. Именно в виде таких после- довательностей чисел и выглядят строки в
компьютерной памяти. Самые первые таблицы символов были
7-битными (ASCII). А т. к. в 7 битов можно поместить максимум число 127, то и
количество символов в таблице равнялось 127. Хотя данные хранились в 7
битах, под каждый символ все же отводились 8 бит, т. е. один байт. Это
связано с тем, что память в компью- тере разбита по ячейкам в 8 бит. Поэтому
один бит оставался свободным. Но тут возникает проблема — помимо букв в
таблице должны содержаться еще и цифры от 0 до 9, а также служебные
символы типа знака равно, больше, меньше и т. д. Таким образом,
получилось, что в такой таблице не хватило места для букв из языков
большинства народов. Если посмотреть в ANSI таблице, то можно
увидеть, что вместо английской бук- вы А в памяти будет стоять число 65, а
вместо русской буквы П мы увидим 207. Получается, что слово Привет в памяти
машины будет выглядеть сле- дующим образом: 207 208 200 194 210 Нулевой символ в таблице использовать не
стали и зарезервировали как полный ноль. Чуть ниже вы увидите, как
программисты нашли достойное применение этому символу. Первые символы в
таблице (те, где в поле сим- волов пусто) — это служебные символы,
такие как символы клавиши <Esc>, <Tab>, <Enter> и др. Как вы
понимаете, у этих символов нет графического отображения, но у них должны быть номера,
чтобы реагировать на нажатие клавиш. В Delphi используется 8 -битная
расширенная таблица символов, где задей- ствованы все 8 бит (ANSI-таблица). Эта
таблица берется из самой операци- онной системы Windows. Таким образом,
количество символов и их распо- ложение зависит от ОС. Для того чтобы удовлетворить все
национальности, ввели поддержку UNICODE (16-битная таблица символов). В
ней первые 8 бит совпадают с таблицей ANSI, а остальные являются
специфичными. Начиная с Windows 2000, эта кодировка стала использоваться
все шире и шире. Основные типы строк, которые присутствуют
в Delphi, приведены ниже
Строки в Delphi заключаются в одинарные
кавычки. Например, как показа- но ниже, вы можете объявить переменную str
типа "строка" и присвоить ей значение 'Hello world'. Str:AnsiString; begin Str:='Hello
World'; //Присваиваем Str значение ‘Hello World’ . end; Так как строка — это массив символов,
значит, можно получить доступ к отдельному символу строки. Для этого нужно
после имени переменной ука- зать в квадратных скобках номер символа,
который нужен, только не забы- вайте, что буквы в строках нумеруются,
начиная от 1. Большинство масси- вов в языках программирования нумеруются с
нуля (строки — это те же массивы, только символов). В этом случае
получается исключение, которое надо запомнить. Теперь посмотрим на примере, как можно
работать с отдельными символа- ми в строке. Str:AnsiString; begin Str:='Hello
World'; //Присваиваем Str значение 'Hello World' Str[1]:='T';// Первому символу присвоили
значение 'Т' end; После первого присваивания переменной str
в нее будет записана строка ‘Hello world’ . Второе присвоение заменит
в переменной str первому сим- волу присвоим значение ' т ' . Так как строка — это набор символов, а
символ — число, указывающее на конкретный символ в таблице, мы можем
создавать строки из чисел. На- пример, если мы хотим присвоить переменной
str строку 'Hello world1 плюс символы конца строки и перевода
каретки (обеспечивают переход на новую строку), нужно воспользоваться
числовыми значениями, потому что на клавиатуре нет этих символов, и мы не
можем их набрать. Символ конца строки в таблице символов находится в
позиции #13 (шестнадцатеричное значение — $D), а символ перевода каретки
— в позиции #10 ($А). Обрати- те внимание, на необходимость указания
знака решетки перед числовым значением. Таким образом, наш код будет
выглядеть так, как показано ниже Str:AnsiString ; begin Str:='Hello
World'#13#10; //Присваиваем Str значение 'Hello World'+#13#10. Str:=#100#123#89; //Присваиваю Str строку
из символов //в числовом представлении. end; В дальнейшем очень часто в примерах можно
будет встретить тип char. Этот тип данных определяет только один
символ. Чаще всего будет использоваться тип
string, потому что он очень удобен и практически ничем не отличается от
остальных типов, которые описаны выше. Объявляется этот тип следующим
образом: var s : String; si:String[200]; В этом примере объявляются две строковые
переменные s и si. Первая объ- явлена как простая строка типа string, а у
второй после типа в квадратных скобках стоит число 200. Это число
определяет длину строки в символах. Когда переменная такого типа хранится в
памяти, то ее символы нумеруют- ся с единицы. Если вы хотите прочитать 2-й
символ, нужно обращаться к нему как s [2]. В этом случае тип string
схож с уже описанными. Если нужно узнать длину строки, то для
этого можно воспользоваться функцией Length, а чтобы установить длину,
используйте setLength. Хотя с процедурами и функциями мы будем
знакомиться немного позже, рассмот- рим здесь маленький абстрактный пример. var s:String; l:Integer begin s: ='Привет!!!'; l:=Length(s); SetLength(s, 50); end; . Выше в первой строчке кода строковой
переменной s присваива- ется произвольный текст (его содержимое не
имеет значения). Во второй определяется длина строки. Для этого в
целочисленную переменную l запи- сывается результат выполнения функции
Length ( s ) . В последней строчке кода вызывается функция SetLength, чтобы
установить новую длину стро- ки. Цифра 50 показывает значение новой длины
строки. Булевы
типы С помощью переменных этого типа очень
удобно строить логику. Перемен- ная булева типа может принимать только
одно из двух значений — true или false. Вам это ничего не напоминает?
Совсем недавно рассказывалось про биты, которые имеют два состояния 1 или 0,
включен или выключен. Пере- менные булева типа занимают только один
бит и принимают только два значения (1 или 0). Для удобства в
программировании эти значения заме- няются понятиями true (истина) или false (ложь) соответственно. Лучше и понятнее (на мой взгляд) булевые
переменные называть логически- ми переменными. Для объявления логических
переменных используется слово Boolean. Рассмотрим пример работы с
такими типами переменных. var b:Boolean; // Объявляю логическую
переменную b Str:AnsiString; // Объявляю строковую
переменную Str begin b:=true; if b=true then Str:='Истина' else Str:='Ложь' end; В этом примере объявляются две переменные:
b
(логическая) и str (строковая). Потом происходит присваивание
переменной b
значения true. Дальше требуются пояснения, потому что
идет логическая конструкция if .. then, которая до этого момента не
изучалась. Слово if переводится как "если". Слово then переводится как "то".
В результате получается конструкция "если условие выполнено то". В
программе она выглядит как if условие выполнено then . . . . Частным случаем этой конструкции
является,запись if ... then ... else. Слово else переводится как "иначе".
То есть, если условие выполнено, то выполнится то, что написано после then,
иначе выполнится то, что написа- но после else. Ранее говорилось, что все операторы в
Delphi заканчиваются точкой с запя- той. Это нужно делать, чтобы отделить
команды друг от друга, ведь одна команда может быть записана на две строки
или две команды в одну строку. Так вот, после оператора, идущего перед
else, никогда не ставится точка с запятой. В этом случае в примере, который
представлен выше, не стоит точка с запятой после str:
='Истина', потому что потом идет else. Это правило надо запомнить. В примере проверяется условие, если
переменная b
равна true, то перемен- ной str присваивается значение
"Истина", иначе — значение "Ложь ". В Delphi можно сравнивать логические типы
в упрощенном виде. Напри- мер, предыдущий код можно написать так: var b:Boolean; // Объявляю логическую
переменную Ь Str:AnsiString; // Объявляю строковую
переменную Str begin b:=true; if b then Str:='Истина' else Str:='Ложь' end; В этом примере просто написан оператор if b then. Если не указано, с чем мы сравниваем, то проверка происходит на
правильное значение. Это зна- чит, что переменная будет проверяться на
истину (равна ли она true), a значит, этот код идентичен предыдущему. | ||||||||||||||||
|
Всего комментариев: 0 | |