Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Работа с символами и строками





Над строками обычно выполняются следующие операции:

1) объединение двух строк в новую строку (+) – конкатенация,

2) расщепление строки для создания двух новых строк, каждая из которых содержит некоторые из исходных символов,

3) поиск символа или подстроки внутри данной строки.

В компьютере символы могут быть представлены двумя способами.

1. Кодами в виде одиночного символа ‘\N’, где N – число-код соответствующего символа в 10-ричном или 16-ричном представлениях:

S=”\65”

S=”\41”

2. Как строка символов “\N\M\O\”:

S=”abc”- строка

S=”\65\66\67”

S=”\16”

Коды могут быть использованы для получения на экране псевдографических символов/

Строки могут быть присвоены переменным и выведены на печать:

Printstring: – S1=«это пример», S2=«печать».

write(S1), write(S2), nl – печать строки

Пример в виде программы.

domains S1, S2=string predicates datastring(S1, S2) printstring Goal printstring clauses datastring(S1, S2):- S1=”это пример”, S2=”печать”. printstring:- datastring(S1, S2), write(S1), nl, write(S2).  

Фиксированные строковые константы S1, S2 объявляются в разделе доменов. Можно размещать строки в одном правиле, а вызывать и обрабатывать их в других правилах. Правило datastring содержит строки. Для того чтобы передать строки из него в правило printstring первое должно быть включено во второе с явным указанием символов s1, s2 в списке объектов вызываемого правила. Необходимость такого включения определяется отсутствием понятия локальной переменной в Прологе для удержания промежуточных результатов и их применения в процессе вычисления.

Областью определения переменных является правило. В другом правиле эти переменные не видны и недопустимы. Поэтому мы соединяем в одно правило. Для работы со строковыми объектами в Турбо Прологе введены предписанные предикаты.

1. Определение длины строки (количество символов строки): strlen (значение строки, длина строки). Способ действия данного предиката зависит от того, что означено в аргументах. Если длина строки не означена, то она вычисляется, иначе производится сравнение.

Strlen (“abba”, X)

X – неизвестная, результат работы Х=4

Х=3, strlen(“abba”, X), результат неуспех, ложь

2. Конкатенация (сложение строк).

Встроенный предикат concat (X, Y, Z) – объединяет (помещает) X, Y в Z, входные и выходные строки могут быть представлены переменными.

Х = “паро”

Y = “ход”

Тогда Z=”пароход”

3. Получение подстрок.

Подстрокой называется строка, являющаяся копией некоторой части исходной строки.

Встроенный предикат Frontstr(N, исходная строка, строка1, строка2) копирует N первых символов из исходной строки в строку 1, остальные символы в строку 2.

4. Преобразование данных к разным типам.

Для преобразования имеются следующие предикаты:

· преобразование строки в символ str_char,

· преобразование строки в число str_int,

· преобразование строки в действительное число str_real,

· преобразование символа в код символа char_int,

· большие буквы переделывает в маленькие Upper_lower.

Эти операторы применяют, когда тип объектов встроенного предиката отличается от типа объектов предиката, определенного пользователем.

Пример. writef – печать форматная.

writef («текущее устройство есть %», drive_str). Этот оператор вызовет отказ системы, если символьная переменная drive_str будет означена символом «а». Чтобы система не выдала ошибки, нужно писать: str_char (drive_str, drive), writef(«текущее устройство есть %», drive).

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

Например, при преобразовании upper_lower(S1, S2) при S1= ”STAR” переменной S2 присваивается значение “star” только в том случае, если она на данный момент не означена (не имеет значение).

Если S2 = ”star”, а S1 не означена, то совершается переход в прописные (большие) буквы.

Пользователь может сам разработать предикаты преобразований:

Real_int, int_ real – удобны для математических расчетов R – real, N – int,

conv_ real _ int (R,N): – R=N,

conv_ int_ real (R,N): – N = R – обратное преобразование,

conv _strsymbol(S, Sb): – S = Sb, где S – строка, Sb – символ.

Это преобразование удобно для обработки данных и записи в памяти.

5. Создание символьных предикатов означает присоединение символа к началу строки. Для совершения этой операции введен предикат

frontchar (строка, символ, остаток строки).

Объекту строка присваивается значение конкатенации символа и остатка строки.

Пример: frontchar (“spring”, C, “pring”) – результат: С=’s’.

6. Преобразование строки в список символов, т.е. из строки можно получить список. Для преобразования строки используется frontchar. Метод преобразования заключается в циклическом использовании frontchar для вырезания первого символа и размещении его в список. Правило преобразования записывается в виде:

convert (“”, [ ]) – граничное условие,

convert (str, [H|T]): – frontchar(str,H, str1),

convert(str1, T).

Пример программы.

domains

char_lis=char*

str=string

predicates

convert(str,char_list)

print_list(char_list)

do_convert_and_print

goal

do_convert_and_print.

clauses

convert(“”, [ ]).

convert(Str, [H|T]): – frontchar(Str, H, Str1),convert(Str1, T).

print_list([]).

print_list([H|T]):– write(H, ” “),print_list(T).

do_convert_and_list:- nl, nl, write(“STARS AND”), nl, nl, convert(“Stars AM”, List),

print_list(List), nl, nl, write(“All done”), nl.

 







Дата добавления: 2015-10-19; просмотров: 505. Нарушение авторских прав; Мы поможем в написании вашей работы!




Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Условия, необходимые для появления жизни История жизни и история Земли неотделимы друг от друга, так как именно в процессах развития нашей планеты как космического тела закладывались определенные физические и химические условия, необходимые для появления и развития жизни...

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

Примеры задач для самостоятельного решения. 1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P   1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P...

Правила наложения мягкой бинтовой повязки 1. Во время наложения повязки больному (раненому) следует придать удобное положение: он должен удобно сидеть или лежать...

ТЕХНИКА ПОСЕВА, МЕТОДЫ ВЫДЕЛЕНИЯ ЧИСТЫХ КУЛЬТУР И КУЛЬТУРАЛЬНЫЕ СВОЙСТВА МИКРООРГАНИЗМОВ. ОПРЕДЕЛЕНИЕ КОЛИЧЕСТВА БАКТЕРИЙ Цель занятия. Освоить технику посева микроорганизмов на плотные и жидкие питательные среды и методы выделения чис­тых бактериальных культур. Ознакомить студентов с основными культуральными характеристиками микроорганизмов и методами определения...

САНИТАРНО-МИКРОБИОЛОГИЧЕСКОЕ ИССЛЕДОВАНИЕ ВОДЫ, ВОЗДУХА И ПОЧВЫ Цель занятия.Ознакомить студентов с основными методами и показателями...

Studopedia.info - Студопедия - 2014-2025 год . (0.011 сек.) русская версия | украинская версия