Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Строки

.docx
Скачиваний:
4
Добавлен:
29.12.2021
Размер:
412.02 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ

КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ ИМ. И. РАЗЗАКОВА

Лабораторная работа

Бишкек 2021

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

Вариант №7

Найти в тексте все слова перевертыши и вывести их на экран.

Фото результат:

Листинг кода:

DOMAINS

file = input; output

wordlist = mword*

mword = string

charlist = char*

PREDICATES

open_files()

close_files()

convert_file()

nondeterm repfile(FILE)

string_wordlist(string, wordlist)

string_chlist(string, charlist)

palindrom(charlist)

reverse(charlist, charlist, charlist)

nondeterm find_list(wordlist)

nondeterm write_pal(charlist)

write_charlist(charlist)

CLAUSES //Предикат преобразует строку в список из отдельных слов, разделителем является пробел

string_wordlist(S, [H|T])

fronttoken(S, H, S1),

!,

string_wordlist(S1, T).

string_wordlist(_, []).

// Предикат позволяет считать по строчно текстовый файл

repfile(_).

repfile(FILE) :-

not(eof(FILE)),

repfile(FILE).

//Преобразование строки в список символов (уже одно слово)

string_chlist("", []) :- !.

string_chlist(S, [H|T]) :-

frontchar(S, H, S1),

string_chlist(S1, T).

//Проверка на то, является ли список символов палиндромом из трех или больше символов

palindrom(L) :-

L = [_, _, _|_],

reverse(L, [], L).

//Переворачиваем список символов

reverse([A|L], S, Rev) :-

reverse(L, [A|S], Rev).

reverse([], L, L).

//Проверка на палиндром, если он то записываем в файл

write_pal(L) :-

palindrom(L),

!,

write_charlist(L), nl.

write_pal(_).

//Записываем список символов как слова

write_charlist([]) :- !.

write_charlist([H|T]) :-

write(H),

write_charlist(T).

//По элементный перебор списка слов

find_list([]) :- !.

find_list([H|T]) :-

string_chlist(H, ChWord),

write_pal(ChWord),

find_list(T).

//Построчное чтение и поиск палиндромов в строке

convert_file :-

repfile(input),

readln(Ln),

string_wordlist(Ln, List),

find_list(List),

fail.

convert_file.

//Открытие файлов и конвертация палиндромов

open_files() :-

openread(input, "E:\\text.txt"),

readdevice(OldIn),

readdevice(input),

openwrite(output, "E:\\palindroms.txt"),

writedevice(OldOut),

writedevice(output),

convert_file,

writedevice(OldOut),

readdevice(OldIn).

//Закрываем файл

close_files() :-

closefile(input),

closefile(output).

GOAL

open_files, close_files.