- •Составитель а.М. Сулейманова
- •Содержание
- •Список литературы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 лабораторная работа типы данных языка турбо паскаль
- •1. Цель работы
- •2. Теоретическая часть
- •2.1. Понятие типа данных
- •2.2. Простые типы
- •2.3. Строки
- •2.4. Cтруктурированные типы данных
- •Манипуляции над элементами массива
- •2.5. Совместимость типов
- •2.6. Приведение типов
- •3. Порядок выполнения работы
- •4. Требования к отчету
- •5. Контрольные вопросы
- •6. Варианты заданий
- •Вариант 4
- •Вариант 5
- •Список литературы
2.3. Строки
Строки занимают промежуточное положение между простыми и структурированными типами данных. Почему строки нельзя отнести к простым типам? Здесь все ясно. Строка – это последовательность символов, иными словами – структура, состоящая из элементов простого типа.
Почему строки нельзя отнести к структурированным типам? Это объяснить сложнее. Во-первых, строковый тип в Тurbо Раsсаl относится к стандартным типам данных, а ни один из структурированных типов, с которыми мы познакомимся позже, стандартным не является.
Во-вторых, над строками применимы некоторые действия, допустимые для данных простых типов и неприменимые к структурированным типам. Например, строку можно ввести с клавиатуры или вывести на экран, воспользовавшись операторами Read(х) и Write(х) соответственно, где Х – строковая переменная. Также допустимо сравнивать целые строки. Однако эти действия невозможны с данными структурированных типов – массивами или записями, о которых речь пойдет позже.
Строковый тип данных известен также как тип STRING. (STRING – не идентификатор, а зарезервированное слово). Тип STRING наряду с целочисленными и вещественными типами, а также типами Сhаr и Boolean, о которых речь шла выше, относится к стандартным типам данных. Значение типа STRING представляет собой строку, длиной до 255 символов. Вот примеры таких значений:
‘12345' '@#$&' 'TRUE' 'АБВГД' 'Введите значение А'
Следует понимать, что строка '12345' не имеет ничего общего с числами и над ней нельзя проводить арифметических действий, как и со значениями типа Сhar '1 ' 5' ' 8'. Также строка 'TRUE' вовсе не является значением типа Вооlеаn.
Так может выглядеть раздел описаний переменных, в котором объявлены переменные типа STRING:
vаr
а:string;
b:string[80];
Как уже отмечалось, значение типа STRING представляет собой строку, длиной до 255 символов (с 1 по 255). При этом нулевой байт строки содержит информацию о ее текущей длине.
В случае, если максимальная длина строки не указана явно (как у переменной А в примере выше), по умолчанию она считается равной 255 символов. Однако при объявлении переменной можно задать иную максимальную длину строки. Так, значение переменной В (см. выше) представляет собой строку, длиной до 80 символов.
Текущая длина строки – величина изменяющаяся, определяемая реальными данными, которая, однако, не может превышать максимальную длину, указанную для данной строковой переменной. Как уже упоминалось, информация о текущей длине строки содержится в ее нулевом байте.
Каким будет содержимое оставшихся не использованными байтов строковой переменной, текущее значение которой короче максимальной длины? Дело в том, что длина текущего значения строковой переменной фиксируется постоянно (в нулевом байте). Благодаря этому, к "лишним" байтам просто нет доступа, поэтому их содержимое совершенно не важно.
2.3.1. Применимые действия (операции). В этом разделе речь идет о действиях, позволяющих манипулировать строками. Причем выделяются три категории действий: применимые отдельным символам строки, строкам в целом, а также манипулирование длиной строки.
2.3.1.1. Действия над отдельными символами. Обратиться к отдельному символу строки можно, указав имя строковой переменной, а также порядковый номер символа в строке. Например:
а[5]:='F’;
write(b[33]);
Поскольку отдельные символы строки представляют собой значения типа Сhаr, над элементами строки допустимы те же действия, что и над символьными значениями – прежде всего операции сравнения =, <>, >=, <, <= (см. табл.2). Результатом применения этих операций к элементам строки будет значение типа Вооlеаn (так же, как и при применении этих операций к значениям других типов). Вот примеры использования операций сравнения с элементами строк:
if а[5]>'F' then ...
while b[11]='4' dо ...
2.3.1.2. Действия над строкой. Что касается операций над строкой в целом, то, как указывалось в начале раздела о строках, можно значения типа STRING вводить с клавиатуры и отображать на экране с помощью единственного оператора. Например:
Read(a);
Write(b);
В первом случае значение переменной A (цепочку символов, длина которой не превышает максимальной длины строки) придется ввести с клавиатуры (опустив при этом апострофы). Во втором случае значение строковой переменной В (последовательность символов) окажется выведено на экран.
Также можно всей строке (т.е. строковой переменной) сразу присвоить нужное значение. При этом явно заданное значение типа STRING заключается в апострофы. Например:
а:= 'Это строка'
b:= ‘’
В последнем случае строковой переменной В присвоена в качестве значения так называемая "нулевая строка" (т.е. строка, включающая только нулевой символ с информацией о ее длине, которая равна нулю).
Кроме того, для строк допустима операция объединения (или сцепления, или конкатенации). Вот как это выглядит:
а:= 'Это строка, '+'которая '+'служит примером.'
После выполнения этого оператора значением переменной А станет строка:
'Это строка, которая служит примером.'
При этом, если длина объединенной строки превысит максимальную длину, допустимую для переменной А, "лишние" символы окажутся отброшены.
Операцию объединения можно применять не только к явно заданным значениям, но и к переменным типа STRING:
а:=b+с;
Здесь А, В и С – строковые переменные. В результате выполнения этого оператора текущие значения переменных В и С окажутся слиты и полученное строковое значение будет присвоено переменной А.
Также к строкам применимы операции сравнения. Например, в программе могут встретиться операторы:
'АВС'<'АВс';
a<b;
В первом случае сравниваются строковые значения, заданные явно, во втором – переменные строкового типа.
2.3.1.3. Манипулирование длиной строки. Возможно также воздействие на длину строки. Как уже упоминалось, информация о текущей длине строки содержится в ее нулевом байте, к которому можно обратиться так же, как и к остальным элементам строки, например,
j:=оrd(а[0])
Таким образом, можно выяснить текущую длину строки. (Правда, для этого существует специальная функция Length, о которой мы узнаем дальше.) Таким же образом можно изменить текущую длину строки, например, уменьшить, присвоив иное значение, чтобы "отсечь" ненужное содержимое строковой переменной.
Судя по оператору j:=оrd(а[0]), информация о длине строки хранится в ее нулевом байте не как число, а в виде символа таблицы АSCII, код которого и соответствует длине. Это предположение подтверждает тот факт, что максимальная длина строки составляет 255 символов (не считая нулевого байта), а в таблице АSCII содержится 256 символов (с 0 по 255). Иными словами, если воспользоваться оператором write(а[0]), то на экран окажется выведено не число, а символ.
2.3.2. Применимые стандартные процедуры и функции. Подпрограммы, предназначенные для работы со строками, содержатся в модуле SYSTEМ. Речь идет о таких процедурах и функциях, как Соnсаt, Сору, Delete, Insert, Length, Роs, Str и Val.