Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
3 Мб
Скачать
☆

5. Содержание отчета.

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

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

  1. Что такое список ?

  2. Голова и хвост списка. Изображение списка в виде головы и хвоста.

  3. Как обозначается пустой список ?

  4. Можно ли изобразить пустой список в виде головы и хвоста ?

  5. Что означают следующие виды изображения списка: L, [X], [ _ , A], [ _ |T], [H| _ ], [ _ ], [ _ ,B|C] ?

  6. Может ли быть в голове списка более одного элемента ?

  7. Принадлежит ли элемент 5 списку [[1, 2, 3], [4, 5, 6]] ?

  8. Сопоставимы ли два списка: [5, 6, 7] и [H|T] ?

  9. Можно ли в процедурах ввода списка ввод_списка1 и ввод_списка2 поменять местами первое и второе предложения ?

  10. Как нужно изменить процедуру удал_перв_эл, чтобы можно было удалить из списка: a) два первых элемента; б) второй элемент ?

  11. Как нужно изменить процедуру удал_посл_эл, чтобы из списка были удалены: a) два последние элементы; б) предпоследний элемент ?

  12. Как нужно изменить процедуру выдел_перв_эл, чтобы можно было выделить из списка: a) два первых элемента; б) второй элемент ?

  13. Как нужно изменить процедуру выдел_посл_эл, чтобы из списка можно было выделить: a) два последние элементы; б) предпоследний элемент ?

  14. Как нужно изменить процедуру доб_эл_в_начало, чтобы можно было вставить заданный элемент между первым и вторым элементами списка ?

  15. Как нужно изменить процедуру доб_эл_в_конец, чтобы заданный элемент вставился перед последним элементом списка ?

  16. Можно ли в программе со списками обойтись без раздела domains ?

Лабораторная работа 7. Работа со строками.

1. Цель работы: приобретение практических навыков работы со строками в программах на Visual Prolog.

2. Краткие справочные сведения.

Для работы со строками имеется набор стандартных предикатов:

а) Определение длины строки

str_len(Строка,Длина)(string,integer):(i,o),(i,i).

б) Объединение строк

concat(Стр1,Стр2,Стр3)(string,string,string): (i,i,o)(o,i,i)(i,o,i)(i,i,i).

Строки Стр1 и Стр2 объединяются в строку Стр3.

в) Создание подстрок

frontstr(КолСим,ВхСтр,ВыхСтр,Остаток)(integer,string,string,string): (i,i,o,o).

Выходная строка ВыхСтр получается из входной строки ВхСтр отделением начальных символов, количество которых определяется параметром КолСим, остаток строки связывается с переменной Остаток.

г) Разделение строки на две части - первый символ и оставшаяся часть строки

frontchar(Строка,ПервСимв,Остаток)(string,char,string):(i,o,o)(i,i,o) (i,o,i)(i,i,i)(o,i,i).

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

convert(“”,[]).

convert(Str,[H|T]):-frontchar(Str,H,Ost),convert(Ost,T).

д) Проверка, является ли строка именем Visual Prolog

isname(Строка)(string):(i).

Строка, которая является именем, должна удовлетворять следующим требованиям:

- строка может содержать буквы, цифры и символ подчеркивания;

- строка начинается с буквы;

- между символами не должно быть пробелов.

е) Формирование атомов из строк

fronttoken(Строка,Атом,Остаток)(string,string,string):(i,o,o)(i,i,o)(i,o,i)(i,i,i)

(o,i,i).

Атомом могут быть:

- имя Турбо-Пролога, (напр., summa, a_12);

- строчное представление числа, (напр., "1265", "1.25", "1e-6");

- отдельный символ (кроме пробела), ( напр., 'A', 'x', '%').

Предикат fronttoken может быть использован для преобразования строки в список атомов (по аналогии с предикатом frontchar).

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

а) Преобразование прописных букв в строчные или наоборот

upper_lower(Стр1,Стр2)(string,string):(i,i)(i,o)(o,i).

б) Преобразование строки в символ или наоборот

str_char(Строка,Символ)(string,char):(i,o)(o,i)(i,i).

в) Преобразование строки в целое число или наоборот

str_int(Строка,ЦелЧисло)(string,integer):(i,o)(o.i)(i,i).

г) Преобразование строки в действительное число или наоборот

str_real(Строка,ДействЧисло)(string,real):(i,o)(o,i)(i,i).

д) Преобразование символа в число (код ASCII) или наоборот

char_int(Символ,Число)(char,integer):(i,o)(o,i)(i,i).

е) Преобразование терма заданного домена в его строковое представление

term_str(Домен, Терм, Строка)(<домен>,<терм>,string):(i,i,o).

3. Задание по лабораторной работе.

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

4. Задачи по работе со строками.

4.1. Подсчитать, сколько раз во введенной строке встречается заданная буква.

4.2. Проверить, имеются ли в заданной строке два подряд идущие одинаковые символы.

4.3. В заданном предложении подсчитать количество слов.

4.4. В заданной последовательности символов удалить каждый символ * и повторить каждый символ, отличный от *.

4.5. В словах “килограм”, “граматика”, “грамофон” исправить грамматические ошибки (с помощью составленной программы).

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

4.7. Из последовательности слов, разделенных пробелами, выбрать слова, у которых первый и последний символы одинаковые.

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

4.9. Дана строка символов. Если в ней нет символа *, то строку оставить без изменения, иначе заменить символ, стоящий после первой *, на символ +.

4.10. Дана последовательность слов, разделенных пробелами. Вывести на экран слова, внутри которых имеется хотя бы одна буква, с которой слово начинается.

4.11. В строке найти самое длинное слово.

4.12. Определить, есть ли в строке цифровые символы; если есть, то вывести их на экран.

4.13. Вывести на экран строчные латинские буквы, которых в строке нет.

4.14. Удалить из строки гласные буквы.

4.15. Подсчитать в строке количество слов, длина которых меньше заданной.

4.16. Заменить в сроке все цифровые символы нулями.

4.17. Разбить строку на две строки примерно одинаковой длины по границе слов.

4.18. Удалить из строки лишние пробелы (начальные, в середине строки, в конце строки).

4.19. Проверить, есть ли в строке заданное ключевое слово.

4.20. Найти в строке слова с числовыми символами.

5. Содержание отчета.

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

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

  1. Что будет получено в качестве результата при выполнении предиката str_len с поточным шаблоном (i,i) ?

  2. Можно ли использовать предикат concat для получения остатка строки при задании строки и ее подстроки ?

  3. Возможно ли применение предиката frontchar со свободрыми второй и третьей переменными ?

  4. Можно ли с помощью предиката frontchar подсоединить заданный символ к началу строки ?

  5. Сколько имеется вариантов поточного шаблона предиката frontstr ?

  6. Имеется строка, содержащая последовательность имен, разделенных пробелами. Какой предикат можно использовать для преобразования этой строки в список имен ?

  7. Напишите правило преобразования строки в список атомов. Какой получится список, если в качестве входного параметра этому правилу будет передана следующая строка: “abc f17 38de, a5b”?

  8. Назначение предиката isname.

  9. Сколько вариантов поточного шаблона имеют предикаты преобразования типов (за исключением term_str) ? Смысл поточного шаблона (i,i) для этих предикатов.

  10. С помощью какого предиката преобразования типов можно определить десятичный код символа ?

  11. Есть ли стандартный предикат для преобразования целого числа в вещественное и наоборот ?