- •3. Система программитрования турбо паскаль
- •3.1 Окно среды разработчика
- •3.2. Элементы диалоговой среды
- •3.3. Команды редактора
- •3.4. Модули
- •4. Общие сведения о языке паскаль
- •4.1 Алфавит языка
- •4.2. Типы данных в TurboPascal 7.0
- •4.3. Операции и выражения в языке Паскаль
- •4.4 Стандартные функции в языке Паскаль
- •5. Линейные алгоритмы
- •5.1. Структура программы на языке Паскаль
- •5.2. Конструкция «следование»
- •6. Разветвляющиеся алгоритмы
- •And, * (умножение), / (деление), div, mod;
- •6.1. Операторы условных переходов
- •Var a, b, c : Real; lv : Boolean;
- •Var a, b, c : Real; lv : Boolean;
- •Var X, y : Real;
- •6.2. Оператор безусловного перехода
- •Var n, p, X : Real;
- •20: WriteLn('Факториал числа ' , n:4:2,' равен ' ,p:4:2);
- •7. Циклические алгоритмы
- •7.1. Цикл с предусловием While
- •X, xn, xk, dx, y, s, p: real;
- •7.2. Цикл с постусловием repeat
- •X1, x0, X, eps: real;
- •7.3. Цикл с параметром for
- •I: integer; c: char;
- •7.4. Принудительное завершение цикла
- •X, xn, xk, dx: real;
- •8. Символьный тип
- •8.1. Особенности символьного типа
- •8.2. Объявление символьной переменной
- •8.3. Операции с символами
- •Строковые переменные
- •9.1. Определение и типы строк
- •9.2. Упакованный строковый тип
- •9.3. Строковый тип
- •9.5. Примеры работы со строками
- •9.6. Индивидуальные задания по работе со строками и символами
- •10. Массивы
- •10.1. Организация данных в массиве
- •10.2. Объявление массивов
- •10.3. Ввод и вывод значений элементов массива
- •10.4. Подсчет количества элементов по заданному условию
- •10.5. Поиск минимального элемента массива
- •10.6. Вычисление произведения ненулевых элементов массива
- •10.7. Сортировка элементов массива
- •10.8. Заполнение массива случайными числами
- •10. 9. Индивидуальные задания по работе с массивам
- •11. Процедуры и функции
- •11.1. Понятие подпрограммы
- •11.2. Описание процедуры
- •11.3. Описание функции
- •11.4. Области действия имен
- •11.5. Индивидуальные задания по разработке процедур и функций
- •Var k,l; real;
9.3. Строковый тип
Строковый тип данных (STRING - строка) специально предназначен для обработки строк (цепочек символов, т.е. элементов типа CHAR). Помимо символов в строке хранится ее длина. Внутреннее представление строки показано на рисунке.
Каждый символ строки занимает 1 байт, для хранения длины также требуется 1 байт. Поэтому для хранения строки выделяется память на единицу большая, чем максимальное количество возможных символов в строке (на рис.2 символов может быть максимум 5, поэтому отводится всего 6 байт). Символы строки нумеруются, начиная с 1 (ST[1]) до максимального значения фактической длины строки (в примере это 4). Остальные незанятые символами, но выделенные байты строки заполняются транслятором по умолчанию символом с кодом #0. Байт длины с номером ST[0] также заполняется символом, но с кодом, равным фактической длине строки #4. Таким образом, все 6 байт строки по типу являются символами.
Важнейшее отличие данных строкового типа от обычных символьных массивов заключается в том, что строки могут динамически изменять свою длину. Память под переменные строкового типа отводится по максимуму, но используется лишь часть этой памяти, реально занятая символами строки.
Для объявления строкового типа используется служебное слово STRING, вслед за которым в квадратных скобках указывается максимальная длина строки, например: STRING[15], STRING[27].
В отличие от переменных упакованного строкового типа, переменные типа STRING [N] имеют переменную длину в интервале от 0 до N. Длину строки [N] можно не указывать, в этом случае максимальная длина строки равна 255.
Объявление строковых переменных:
VAR
DAN1 : STRING;
DAN2 : STRING [39];
DAN3 : STRING [265];
В первом случае длина строки по умолчанию равна 255, во втором случае – 39, а в третьем случае компилятор выдает сообщение об ошибке.
Для определения значений констант строкового типа можно использовать непоименованные упакованные строковые константы, например:
CONST
ULICA : STRING = ‘УЛ. НОВАЯ’;
AUTO : STRING [10] = ‘ВОЛГА 3139’;
Поскольку строка трактуется как цепочка символов, то к любому символу константы или переменной строкового типа можно обратиться как к элементу массива ARRAY [0 .. N] OF CHAR, например:
VAR
ST : STRIING;
. . . . . . . . . . . .
IF ST [7] = ‘K’ THEN . . . .
Значение переменной строкового типа задается с помощью оператора присваивания, например:
LN : = ’ ‘;
LN : = ‘VOLGOGRAD’;
В первом случае задается пустая строка. Во втором – строке присваивается значение константы упакованного строкового типа.
Если переменной строкового типа присваивается значение, превышающее допустимую длину, то "лишние" символы отбрасываются справа, например:
D: STRING [11];…. D: = ‘МАРШРУТ4285’;
D примет значение ‘МАРШРУТ 428’
В правой части оператора присваивания допускаются константы и переменные символьного и строкового типов.
Строке может быть присвоено значение переменной упакованного строкового типа, обратное присваивание недопустимо, например:
VAR
S: = STRING [N];
M: = ARRAY [0. .K] OFCHAR;
. . . . . . . . . . . . . . . . . . . . . . . . . . .
S: = M; {ПРИСВАИВАНИЕ ДОПУСТИМО}
M: = S; {ПРИСВАИВАНИЕ НЕДОПУСТИМО}
Переменной символьного типа может быть присвоено значение одного символа, указанного путем индексирования, например:
VAR
A: CHAR;
B: STRING;
. . . . . . . . . . . . .
A: = B[3];
. . . . . . . . . . . . .
В правой части оператора присваивания может быть предусмотрено выполнение операции конкатенации, обозначенной знаком «+», например:
TYPE
LINE1 = STRING;
VAR
LINE2 : LINE1;
. . . . . . . . . . . . . .
LINE2: = ‘КОРОТКАЯ СТРОКА’; {ДЛИНА СТРОКИ 15 СИМВОЛОВ}
LINE2: = LINE2 + ‘СТАЛА ДЛИННЕЕ’; {ДЛ. СТРОКИ 28 СИМВОЛОВ}
Данный пример показывает, как можно сцеплять две и более строки.
Операции сравнения выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка короче другой, то недостающие символы короткой строки заменяются значением #0. Если при посимвольном сравнении окажется, что один символ больше другого (его код больше), то строка, его содержащая, тоже считается большей. Остатки строк и их длины не играют роли. Любой символ всегда больше "пустого места":
‘klmn’ > ‘klMn’ {так как ‘m ‘ > ‘M’}
‘klmn’ > ‘klm’ {так как ‘n’ > ‘ ‘}
Можно использовать нестрогие отношения: >= и <=.
9.4. Стандартные подпрограммы для работы со строками
Синтаксис и формат функции |
Назначение подпрограммы, примеры |
Аналог в Basic |
LENGTH(S)
LENGTH(S: STRING): INTEGER |
Функция возвращает значение фактической длины строки S (не длину, зарезервированную при объявлении), например:
S := ‘РОСТОВ-НА-ДОНУ’ N:= LENGTH(S) Результат: N= 14 |
LEN(X) |
COPY(S,P,N)
COPY(S: STRING, P: INTEGER, N: INTEGER): STRING |
Функция выделяет из строки S подстроку длиной N символов, начиная с позиции P, например: S:=‘ABCDEF’ S2:= COPY(S,2,4) Результат: S2 = ‘BCDE’ |
MID$(F$,M,N) LTFT$(S$,N) RIGHT$(S$,N) |
POS(S1,S2)
POS(S1: STRING, S2: STRING): BYTE
|
Функция определяет начальную позицию подстроки S1 в строке S2, с которой начинается ее первое вхождение. Если вхождений нет, то возвращается НОЛЬ. Например:
S2:='СТРОКА' S1:='РО' N:=POS(S1,S2) или N:=POS('PO',S2) или N:=POS('PO','СТРОКА') Результат: N=3 |
INSTR(K,S1,S2)
|
INSERT(S1,S2,P)
INSERT(S1: STRING, VAR S2: STRING; P: INTEGER) |
Процедура обеспечивает вставку строки S1 в строку S2, начиная с позиции P, например: VAR S1, S2, S3 : STRING[20]; . . . . . . . . . . . . . . . . . . . . S1: = ‘1 ’; S2: = ‘СПОРТСМЕН РАЗРЯДА’; S3: = INSERT(S1,S2,11); В результате выполнения операции значение строки S3 будет равным‘СПОРТСМЕН 1 РАЗРЯДА’. |
|
CONCAT(S1,S2,…,SN)
CONCAT(S1,S2,…,SN: STRING): STRING
|
Функция осуществляет конкатенацию (сцепление) строк в порядке их записи, например: S3:=CONCAT(‘TOР’, ‘ПЕ’, ‘ДO’); Результат: S3 = ‘ТОРПЕДО’ |
|
STR(N,S2)
STR(N: числовой, VAR S2: STRING) |
Процедураслужит для преобразования числовых значений в строковые. Переменной строкового типа S2 присваивается строковое значение, представляющее собой символьное изображение значения переменной числового типа N. Например: VAR S: String; . . . STR(2008,S); В результате обращения к процедуре целочисленное значение 2008 будет преобразовано в строковое "2008" |
|
VAL(S,N,ERRCODE)
VAL(S:STRING, N:числовое, ERRCODE:INTEGER) |
Процедура преобразует строку числовых символов S в числовую переменную N. Параметр ERRCODE равен нулю, если преобразование выполнено успешно. Если S содержит символы недопустимые при записи числа, то параметр равен номеру позиции с ошибочно заданным символом. Например: VAR S: String; N: Integer; . . . S:='2008'; VAL(S,N,ERRCODE); IF ERRCODE <>0 THEN WRITELN('ОШИБКАВпоз. ',ERRCODE) ELSE WRITELN('ЗНАЧЕНИЕ = ',N); |
|
DELETE(S,P,N)
DELETE(VAR: S: STRING; P: INTEGER; N: INTEGER) |
Процедура осуществляет удаление N символов из строк S, начиная с позиции P, например: S:= ‘ГРУППА5211’; DELETE(S,8,2); Результат процедуры S = ’ГРУППА 11’
|
|