Строковый тип STRING представляет собой последовательность символов. Максимальная длина строковой переменной равна 255 символов. Описать строковую переменную можно следующим образом:
VAR
S1 : STRING;
S2 : STRING[5];
Переменная S2 имеет максимальную длину в 5 символов, а S1 – в 255 символов. При этом в памяти под переменную отводится на 1 байт больше. Дело в том, что после того, как строковая переменная получила какое-то значение, нулевой байт содержит фактическую длину строки. Имеется возможность доступа к любому элементу строки, указав его номер. Например, если
S1:= ‘abcdef’
то S1[1]=’a’
S1[2]=’b’
S1[0]=#6
Наиболее частая операция над строками их объединение:
S1:=S1+S2 , где S1 и S2 – переменные типа STRING, или:
S1:=S1+’cde’
Объединение строк можно выполнить и с помощью функции CONCAT(S1,S2,…SN).
Функция LENGHT(S) определяет длину строковой переменной S и имеет тип INEGER.
Процедура DELETE(S,IND,N) удаляет N символов из строковой переменной S начиная с символа с номером IND.
Процедура INSERT(SUBS,S,IND) вставляет подстроку SUBS в строку S начиная с символа с номером IND.
Функция COPY(S,IND,N) копирует N символов из строки S, начиная с символа с номером IND.
Функция POS(SUBS,S) типа INTEGER отыскивает в строке S первое вхождение подстроки SUBS и выдаёт номер этой позиции в строке S. Если подстрока SUBS не найдена в строке S, то функция возвращает ноль.
Строковые переменные можно сравнивать с помощью операций отношений. Сравниваются при этом коды символов, начиная с первых символов строк. Если первые символы одинаковы, сравниваются вторые и так далее.
‘ALEXEY’ < ‘SERGEY’
‘BOY’ < ‘GIRL’
Для примера рассмотрим работу программу STRING_T.PAS.
В разных классификациях типов в Турбо Паскале присутствуют также скалярные типы, к которым относят перечисляемый тип и тип–диапазон.
Перечисляемый тип задается перечислением тех значений, которые он может получать, Каждое значение именуется некоторым идентификатором и располагается в списке, заключенном в круглые скобки.
COL = (BLACK, RED, BLUE, WHITE). Порядок значений в таком наборе определен последовательностью, в которой перечисляются идентификаторы. Первая константа BLACK имеет порядковый номер 0, вторая – RED – номер 1 и т.д.
При применении функции ORD(X) к значению перечисляемого типа она возвращает целое число, являющееся номером этого значения в списке, например ORD(BLUE)=2.
Можно использовать также функцию PRED(X), которая возвращает предыдущее порядковое значение: PRED(BLUE) = RED, и функцию SUCC, которая возвращает следующее порядковое значение: SUCC(BLUE) = WHITE.
Если описать переменную A1 типом COL, то эквивалентны следующие операторы:
A1 : = BLACK;
A1 : = PRED(RED);
A1 : =COL(0).
К перечисляемому типу справедливы операции отношения, например, BLACK < RED. Переменные любого перечисляемого типа можно объявить в разделе описаний переменных.
Тип-диапазон задается границами своих значений внутри базового типа, например:
DIGIT = ‘0’..’9’
DATE = 1..31
При определении типа-диапазона нужно руководствоваться следующими правилами:
- два символа .. рассматриваются как один символ и между ними недопустимы пробелы;
- левая граница диапазона не должна превышать его правую границу.
Тип-диапазон наследует все свойства своего базового типа, но с ограничениями, связанными с меньшим диапазоном его значений.
Совместимость и преобразование типов
Во многих выражениях в ТУРБО-ПАСКАЛЕ допускается использовать только совместимые типы. Два типа являются совместимыми если выполняется одно из следующих условий:
· оба типа являются одинаковыми;
· оба типа являются вещественными типами;
· оба типа являются целочисленными типами;
· оба типа являются отрезками одного и того же базового типа;
· один тип является поддиапазоном другого;
· оба типа являются множественными типами с совместными базовыми типами.
В случае нарушения совместимости типов компилятор выдает на экран сообщение “Type mismatch”.
Исключение сделано лишь для переменных и констант типа INTEGER (целые), которые разрешается использовать в выражениях типа REAL “вещественные”:
VAR
X : INTEGER;
Y : REAL;
begin
Y:=X+2;
В этом случае в правой части выражения стоит целочисленное выражение, которое автоматически преобразуется в вещественное. Однако оператор X:=2.0 будет неверным, так как нельзя автоматически преобразовать вещественное выражение к целому типу. Для этого необходимо использовать функции ROUND(X), которая округляет вещественное число X до ближайшего целого или функцию TRUNC(X), которая усекает вещественное число X путём отбрасывания дробной части.
Для преобразования символьных данных типа CHAR в целое число используется функция ORD(X). Обратное преобразование целого числа X типа INTEGER в символьный тип CHAR осуществляется функцией CHR(X).
Для преобразования числа X вещественного или целого типа в строку символов S используется процедура STR(X,S).
Обратное преобразование строки S во внутреннее представление целой или вещественной переменной X используется процедура VAL(S,X,CODE). Параметр CODE содержит 0, если преобразование выполнено успешно.
При вычислении выражения любого типа приоритет вычислений определяется расставленными скобками, а при их отсутствии в соответствии с табл.3.
Таблица 3
Приоритет
Операции
NOT
* , / , DIV, MOD , AND
+ , - , OR , XOR
= ,<> , < , > , <= , >=
Логические операции в ТУРБО-ПАСКАЛЕ имеют более высокий приоритет чем операции отношения. Поэтому в сложных логических выражениях обычно необходимо расставлять скобки. Если A, B, C: INTEGER , то выражение A=B AND A<C будет ошибочным. Правильно (A=B) AND (A<C).