Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Строковые функции и процедуры
Строковые функции и процедуры введены в систему программирования Turbo Pascal для облегчения манипуляции со строками. Имеется восемь строковых функций и процедур. 1. Функция CONCAT (склеивание) Синтаксис: concat (S1, S2, ..., Sn: string): string. Возвращает строку, полученную конкатенацией строк S1,..., Sn. Если длина результата больше 256, то излишние символы отбрасываются. Эта функция фигурирует в правой части «: =» и в строковых выражениях. П р и м е р: NUMBER: = concat ('12', '34', '50'); NUMBER = '123450'. 2. Функция LENGTH (длина) Синтаксис: length (S: string): integer. Возвращает длину строки S. П р и м е р: N: = length ('345'); N = 3. 3. Функция POS (позиция) Синтаксис: pos (S, T: string): integer. Функция POS в качестве аргументов использует две строки и определяет, содержится ли первая строка во второй. Возвращает номер символа, начиная с которого S входит в T. Если вхождения нет, то возвращает 0. П р и м е р: N: = pos ('E', 'HELLO'); N = 2. N: = pos ('A', 'HELLO'); N = 0. 4. Функция COPY (вырезка фрагмента) Синтаксис: copy (S: string; N1, N: integer): string. Возвращает подстроку, полученную из N символов строки S, начиная с позиции N1. Значение переменной S при этом не меняется. П р и м е р: FRAGMENT: = copy ('PROGRAMM', 2, 3); FRAGMENT = 'ROG'. 5. Процедура DELETE (стирание фрагмента) Синтаксис: delete (var S: string; POS, LEN: integer). Убирает из строки S LEN символов, начиная с POS, при этом длина строки уменьшается на LEN позиций. П р и м е р: FRAGMENT: = 'PROGRAMM'; delete (FRAGMENT, 2, 3); FRAGMENT = 'PRAMM'. 6. Процедура INSERT (вставка) Синтаксис: insert (S: string; var D: string; POS: integer). Вставляет строку S в строку D перед символом с номером POS, при этом длина строки D увеличивается на LENGTH (S) позиций. П р и м е р: FRAGMENT: = 'PRAMM'; insert ('ROG', FRAGMENT, 2); FRAGMENT = 'PROGRAMM'. 7. Процедура STR (преобразование в строку) Синтаксис: str (I: integer; var S: string); str (R: real; var S: string). Преобразует I или R из числа в строку и записывает эту строку в S, причем R и I могут записываться форматно, как в процедуре WRITE. П р и м е р: a) R: = 123.654; str (R: 5: 2, S); S = '123.65'; б) I: = 5683; str (I, S); s = '5683'. 8. Процедура VAL (преобразование в число) Синтаксис: val (S: string; var I, J: integer); val (S: string; var I: real; var J: integer). Преобразует строковую переменную S в число типа I. Переменная J получает значение 0, если перевод прошел без ошибок. Если же сделана попытка конвертировать в число строку, где есть нецифровые символы, то переменная J принимает значение позиции первого нецифрового символа. При этом работа процедуры прерывается. П р и м е р: a) S: = '4326'; б) S: = '43p8'; val (S, I, J); val (S, I, J); I = 4326, J = 0; I – не определено, J = 3. Рассмотрим теперь пример на применение указанных функций и процедур обработки строк. П р и м е р. Изменение порядка слов в строке. program REVERSE; var OLD_LINE, NEW_LINE: string [50]; PROBEL: integer; WORD: string [50]; begin NEW_LINE: = ''; readln (OLD_LINE); OLD_LINE: = concat (OLD_LINE, ' '); while OLD_LINE < > '' do begin PROBEL: = pos (' ', OLD_LINE); word: = copy (OLD_LINE, 1, PROBEL); NEW_LINE: = concat (WORD, NEW_LINE); Delete (OLD_LINE, 1, PROBEL); end; writeln (NEW_LINE) end. Пояснение. С клавиатуры вводится строка OLD_LINE, и к ней справа подклеивается пробел. Это делается для того, чтобы строка имела одну и ту же структуру: слово плюс пробел. Затем в цикле, признаком конца которого является пустая константа, выделяется очередное по порядку слово и подклеивается слева в переменную NEW_ LINE. После выборки очередного слова из OLD_LINE оно оттуда выбрасывается, что приводит к постепенному уменьшению самой строки. Здесь переменная PROBEL служит для хранения позиции первого пробела в строке, а WORD – для выбранного из OLD_LINE слова. Например, строка 'Наша Таня громко плачет' преобразуется в строку 'плачет громко Таня Наша'.
Лабораторная работа №6 Цель работы: освоить строковые операции, процедуры и функции; научиться создавать программы обработки текстовых данных, представляющих последовательность символов и строк, состоящих из слов, разделенных одним или несколькими пробелами. Общие сведения Для обработки текстовой информации можно использовать те же методы, что применяют для одномерных массивов, так как структура строкового типа схожа с массивом. Однако для упрощения написания программ по работе с текстами были разработаны стандартные строковые процедуры и функции. Поэтому основной задачей этой лабораторной работы является освоение строковых операций, функций Length, Pos, Copy и процедур Delete, Insert. Перед выполнением работы необходимо ознакомиться с теоретическим материалом по теме «Обработка литерных величин. Данные типа Char и String». Пример 1. Составить программу обработки данной строки, позволяющую выписать все знаки сравнения и все скобки, сохранив их последовательность. Решение. Все знаки сравнения и скобки перечислим в строковой константе srav_sk. В теле программы последовательно рассмотрим все символы введенной строки s, проверяя каждый на вхождение в строку srav_sk, выводя на экран содержащиеся в строковой константе символы строки s. program string_1; const srav_sk='< > =(){}[]'; var s: String; i: Integer; begin Writeln('Введите строку: '); Readln(s); for i: =1 to Length(s) do if Pos(s[i], srav_sk)< > 0 then write(s[i]); Readln end. Пример 2. Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Составить программу обработки данной строки, выводящую через запятую слова четной длины, которые при обмене местами левой и правой половины дают то же слово (например, папа, мама, канкан). Решение. В строке, последовательно перебирая элементы, будем выделять начало ns и конец ks каждого слова, копировать слово в другую строковую переменную, а затем проверять четность длины и равенство частей строки slovo. Слова, для которых выполнено условие задания будем склеивать в переменной otv. После добавления к ответу последнего слова в конце otv будет лишняя запятая, которую перед выводом на экран необходимо удалить. program string_2; var s, slovo, otv: String; ns, ks, i, m: Integer; begin Writeln ('Введите строку: '); Readln(s); i: =1; ns: =1; otv: =''; s: =s+' '; while i< =Length(s) do begin while (i< =Length(s)) and (s[i]< > ' ') do i: =i+1; {ищем очередной пробел} ks: =i; slovo: =Copy(s, ns, ks-ns); {выделяем слово} m: =Length(slovo) div 2; {половина длины слова} if (Length(slovo) mod 2=0) and (Copy(slovo, 1, m)=Copy(slovo, m+1, m)) {если слово имеет четную длину} then otv: = otv+slovo+ ', '; {добавляем слово к ответу} while (i< =Length(s)) and (s[i]=' ') do i: =i+1; {пропускаем пробелы} ns: =i; {начало следующего слова} end; Delete(otv, Length(otv), 1); {удаляем лишнюю запятую в конце} Writeln(otv); Readln end. Варианты заданий Задание 1. Составить программу обработки данной строки, позволяющую: a) выписать все прописные буквы из данной строки в порядке их следования; b) определить, содержатся ли в тексте цифры; c) найти общее количество круглых, квадратных и фигурных скобок в тексте; d) выписать все знаки препинания из данной строки, сохранив их последовательность; Задание 2. Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Составить программу обработки данной строки, выводящую через запятую: a) слова, одинаково читающиеся справа налево и слева направо; b) слова заданной длины, в которые входит данная буква; c) слова, начинающиеся с прописной буквы, в которых все остальные буквы строчные; d) слова, которые начинаются и заканчиваются одной и той же буквой и содержат хотя бы одну введенную с клавиатуры букву. Дополнительные задания Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Составить программу обработки данной строки, позволяющую: a) определить количество слов в строке; b) удалить из строки избыточные пробелы, чтобы между словами осталось только по одному пробелу; c) найти самое короткое слово и его длину; d) найти в тексте слова-перевертыши. Контрольные вопросы 1. Как описываются в языке Паскаль строковые величины? 2. В чем сходство и в чем различие между массивами и строками? 3. Существуют ли ограничения, накладываемые на длину строки? 4. Какие строковые процедуры существуют в языке Паскаль? 5. Для вывода значений каких строковых функций нужны переменные типа string, а для каких – integer? 6. Какие есть возможности извлечения из строки одного символа? 7. Строка для обработки процедурой должна быть ее параметром-аргументом или параметром-результатом? ПРОГРАММИРОВАНИЕ ГРАФИКИ Компьютер может оперировать либо с символами (символьный режим), либо с геометрическими фигурами (графический режим). Для создания на экране геометрических фигур с помощью языка Паскаль используются графические операторы, которые позволяют рисовать различные геометрические фигуры (точки, отрезки, окружности и пр.). Графические объекты могут находиться на экране только в то время, когда работает программа. Для формирования графических изображений в системе TurboPascal предназначен стандартный библиотечный модуль GRAPH. В нем содержится 79 графических процедур, функций, десятки стандартных констант и типов данных. Все они составляют единый комплекс средств, позволяющих разрабатывать профессиональные программные продукты. Подключение модуля GRAPH к пользовательской программе осуществляется стандартным способом - с помощью зарезервированного слова USES: USES GRAPH. С этого момента все графические средства доступны пользователю. Взаимодействие программы и видеосистемы в графических режимах обеспечивают драйверы. Драйверы собраны в файлах, имеющих расширение BGI: CGA. BGI, EGAVGA. BGI, HERC. BGI, IBM 8514.BGI, ATT. BGI, PC3270.BGI и др. Драйвер – это специальная программа, осуществляющая управление тем или иным техническим средством ПК. Графический драйвер управляет графическим адаптером в графическом режиме. Популярное:
|
Последнее изменение этой страницы: 2016-04-09; Просмотров: 786; Нарушение авторского права страницы