- •Билет №1
- •Основные средства языка Паскаль.
- •Назначение и описание констант и типизированных констант в Паскале.
- •Типизированные константы
- •Билет №2
- •Билет №3
- •Раздел описания типов в Паскале.
- •Одномерные массивы.
- •Билет №4
- •Билет №5
- •Оператор цикла с постусловием.
- •Действия со строками в Паскале
- •Билет №7
- •Двумерные массивы.
- •Билет №8
- •Билет №11
- •К лассификация языков программирования.
- •Билет №12
- •Процедуры в Паскале.
- •Пример №41. Демонстрация процедур.
- •Билет №13
- •Билет №14
- •Билет №15
- •2.Организация ввода – вывода в Паскале.
- •Билет №16
- •Билет №17
- •Способы представления алгоритмов.
- •Выражения в Паскале.
- •Билет №18
- •Билет №21
- •Билет №24
- •Билет №25
Билет №25
Реализация управляющей конструкции «Развилка».
Строковый и символьный типы данных.
Строковый тип данных определяет множество символьных цепочек произвольной длины (от нуля символов до заданного их числа). Для определения строкового типа используется служебное слово 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 должны отсутствовать.