
- •Методические указания по выполнению домашнего задания на тему «Разработка алгоритмов для структурного программирования и их реализация. Линейные алгоритмы»
- •1. Неструктурные алгоритмы и их реализация в паскале
- •1.1. Оператор безусловной передачи управления GoTo
- •1.2. Процедуры неструктурной передачи управления
- •2. Структурные типы данных
- •2.1. Массив
- •3. Порядок выполнения домашней работы «Структурные типы данных: массивы»
- •4. Символьные массивы и строки
- •Приложение (варианты заданий)
4. Символьные массивы и строки
Символьными называют массивы, элементами которых являются символы. Такие массивы традиционно использовались для представления символьной информации, например, различных текстов. Обработка символьных массивов в Паскале имеет некоторые особенности.
Объявляя символьный массив как константу, значения символов можно указывать поэлементно:
Const d: array [1..10] of char = (‘m’, ’f’, ’a’, ’g’, ’c’, ’v’, ’u’, ’e’, ’y’, ’l’, ’9’);
или целиком, используя строковую константу, длина которой должна строго соответствовать размеру массива:
Const d: array [1..10] of char = (‘mfagcvueyl9’);
Присвоить значение символьному массиву также можно целиком, используя строковую константу, длина которой должна совпадать с длиной массива:
Var S: array[1..10] of char; … S:=’Пример один’;
При вводе элементы символьного массива нельзя разделять пробелами, так как пробел будет восприниматься как символ:
Var S: array[1..10] of char; … For I:=1 to 10 do Read(S[i]); Readln;
Символьный массив можно выводить поэлементно в цикле, как обычный одномерный массив, а можно – целиком, одним оператором Write или Writeln: Writeln(S);
В операторе вывода допускается использование операции слияния символьных массивов, обозначаемой символом «+». Результатом этой операции будет новый символьный массив, число элементов которого равно сумме размеров исходных массивов, а значениями элементов – элементы исходных массивов, последовательно записанные друг за другом:
Writeln(St1+’ ‘+St2);
Работа с одномерными символьными массивами осуществляется поэлементно, как с обычными массивами.
Строки. Для упрощения работы с символьными массивами в Паскале существует специальный тип данных – строковый (рис. 6). Целое без знака это максимальная длина строки, которая не должна превышать 255 байт. Если длина не указана, то по умолчанию принимается максимальное значение – 255 символов, т.е., строка представляет собой одномерный символьный массив, индексы которого изменяются от 0 до максимального значения, указанного при объявлении строкового типа. Следовательно, физическая длина строки на единицу превышает максимальную.
Объявление переменных строкового типа, так же как и массивов, можно выполнить двумя способами:
В операторе объявления переменных, например:
Var S1, S2: string[40]; S: string;
С предварительным объявлением типов, например: Type S40=string[40]; St: string;
Var S1, S2: S40; S: St;
Рис. 6. Синтаксическая диаграмма Объявление строкового типа
Вводить значения строк можно с помощью одного оператора Readln(S), а выводить с помощью оператора Writeln(S).
Обрабатываются строки как символьные массивы, с помощью счетного или другого цикла:
Var S: String[20]; …
Readln(S);
For i:=1 to 20 do If S[i]=’A’ then k:=k+1;
Writeln(S);…
Над строковыми значениями определены операции отношения <, , >, , =, <>, а также операции сложения + (конкатенации). Для этих операций справедливы правила: более короткая строка меньше длинной; при равных длинах строк происходит сопоставление элементов строк с учетом лексикографической упорядоченности значений элементов типа CHAR.
Специальные операции над строками:
Concat(x1,x2,…,xn) – в результате получается строка, полученная сложением строк х1,х2,…,хn;
Copy(x,y,z) – в строке х, начиная с позиции у, выделяется подстрока длиной z;
Length(x) – определяется длина строки х по количеству символов;
Pos(x,s) – определяется номер позиции первого вхождения подстроки х в строку s, если вхождение отсутствует, то в результате получается 0;
Str(f,x) – число f преобразуется в символьную строку х;
Delete(x,y,z) – из строки х удаляется, начиная с позиции у, подстрока z;
Insert(x,s,y) – в строку s, начиная с позиции у, вставляется подстрока х;
Val(x,f,z) – строка х преобразуется в числовое представление f, в z при успешном преобразовании помещается 0.