ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Строковые функции и процедуры

Строковые функции и процедуры введены в систему программирования 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. Вывод.

Контрольные вопросы

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 и др. Драйвер – это специальная программа, осуществляющая управление тем или иным техническим средством ПК. Графический драйвер управляет графическим адаптером в графическом режиме.

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти