Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БИЛЕТЫ по Алгоритмизации_отв.doc
Скачиваний:
1
Добавлен:
30.08.2019
Размер:
329.22 Кб
Скачать

Билет №25

  1. Реализация управляющей конструкции «Развилка».

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

Строковый тип данных определяет множество символьных цепочек произвольной длины (от нуля символов до заданного их числа). Для определения строкового типа используется служебное слово string, вслед за которым в квадратных скобках указывается максимальная длина строки.

Type

Line: string [120]

Var

ML: Line;

В приведенном примере переменная ML в качестве своего значения может иметь любую последовательность символов произвольной длины в пределах от 0 до 120.

Значение строковой переменной может быть присвоено оператором присваивания либо прочитано из файла. Например:

ML := 'Строка символов';

ML :=AnL;

В определении строкового типа максимальная длина строки может быть задана целым числом или константой целого типа. Указание максимальной длины может быть опущено, в этом случае считается, что максимальная длина равна 255, - эта длина является максимально возможной для строкового типа. Таким образом, важнейшие отличие строк от символьных массивов в том, что строки могут изменять свою длину.

Для строк определена операция конкатенации "+":

ML := 'Строка';

ML := ML + 'символов';

В случае присваивания строковой переменной строкового выражения с длиной большей, чем максимально допустимая для данной переменной, происходит обрубание строки до максимальной длины.

В памяти под переменные строкового типа отводится (N + 1) байт, где N - максимальное число символов, которое было задано в описании. Из них N байтов предназначены для хранения символов строки, а один байт - для хранения текущей длины строки. Так как строка имеет произвольную длину, то лишь часть памяти реально занимается символами:

Элементы строки нумеруются целыми числами, начиная с единицы. Из рисунка видно, что байт с текущей длиной, считается как бы нулевым ее элементом.

Доступ к отдельным элементам строк производится аналогично доступу к элементам одномерного символьного массива: после имени переменной в квадратных скобках указывается выражение целого типа, обозначающий номер элемента строки:

ML[i] ML[i+1]

Данная конструкция имеет тип Char и является переменной, то есть может находится в левой части оператора присваивания.

Однако определенную аналогию строковых типов с символьными массивами нельзя понимать как полную их идентичность. Распространенной ошибкой является работа с элементами строки без учета ее текущей длины.

Предполагается, что данная программа должна сформировать строку из 26 символов и содержать последовательность заглавных букв латинского алфавита. Однако этого не произойдет, так как при первоначальном присваивании длина строки была установлена как 1, и дальнейшие присваивания элементам строки некоторых значений на длину строки не влияют, и поэтому процедура writeln выведет только символ 'A'. Чтобы исправить эту ошибку , будем использовать «+»:

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

<, <=, >, >=, = , <>

При их выполнении действуют следующие правила:

1. операция выполняется над строками посимвольно, слева направо с учетом внутренней кодировки символов

2. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значениями CHR(0).

Следующие операции отношения имеют значения TRUE:

'A'>1

'Turbo'<'Turbo Pascal'

'Паскаль'>'Turbo Pascal'

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

1. СONCAT (S1[,S2,…,SN]) - результат функции имеет тип string. Функция выполняет слияние строк - параметров S1, S2,…SN. Каждый параметр является выражением строкового типа. Если длина результирующей строки больше 255 символов, то она усекается до 255.

2. COPY (ST, INDEX, COUNT) - функции типа string. ST - тип string. INDEX, COUNT : integer. Функция возвращает подстроку, выделенную из исходной строки ST, длиной COUNT cимволов, начиная с символа с номером INDEX.

3. DELETE (ST, INDEX, COUNT) - процедура. Удаляет COUNT символов из строки ST, начиная с символа с номером INDEX.

4. INSERT (SUBST, ST, INDEX) - процедура. Вставляет строку SUBST в строку ST, начиная с символа с номером INDEX.

5. LENGTH(ST) - функция типа INTEGER. Возвращает текущую длину строки - параметра.

6. POS (SUBST, ST) - функция типа INTEGER. Отыскивает в строке ST первое вхождение подстроки SUBST и возвращает номер позиции, с которой она начинается, если подстрока не найдена, возвращается ноль.

7. STR(X[:WIDTH[:DECIMALS]],ST) -процедура. Преобразует число X любого вещественного или целого типов в строку символов ST. Параметры WIDTH и DECIMALS, если они присутствуют, задают формат преобразования. WIDTH - определяет общую ширину поля. DECIMALS - количество символов в дробной части (имеет смысл, когда Х вещественного типа).

8. VAL (ST, X, CODE) - процедура. Преобразует строку символов ST во внутреннем представлении целой или вещественной переменной Х, которое определяется типом этой переменной. Параметр CODE содержит 0, если преобразование произошло успешно, и тогда в Х помещается результат преобразования. В противном случае он содержит номер позиции в строке ST, где обнаружен ошибочный символ, и в этом случае содержимое Х не меняется, ведущие пробелы в строке ST должны отсутствовать.