
Лабораторные работа на Turbo Prolog / lab_2
.docЛабораторная работа №2
«Работа с файлами, строками и списками»
Цель работы: приобретение навыков работы со строками, файлами, списками на языке Turbo Prolog.
Задание к работе: задан список списков. Из него следует сформировать новый список, элементами которого будут слова исходного списка, в которых согласных больше гласных. Элементами результирующего списка не могут быть другие списки. Результат сохранить в файле.
Выполнение работы:
Описание предикатов:
analiz_string(Str,Glas,Sogl) – определяет в строке Str количество гласных Glas и согласных Sogl букв.
glasn_bukva(char) – описывает факт того, что char является гласной буквой.
videlenie_stroki(L1,L2) – выделяет из списка L1 строку, и если в ней согласных больше гласных, то добавляет эту строку в список L2.
videlenie_spiska(L1,L2,L3) – выделяет из списка списков L1 список строк для дальнейшего анализа предикатом videlenie_stroki. Текущий результат накапливается с списке L2, а через список L3 возвращается из предиката.
append(L1,L2,L3) – добавляет в конец списка L1 список L2 и результат возвращает через список L3.
save_file(L) – сохраняет список строк L в файле.
start – организует начало работы программы.
Листинг программы:
domains
file = f1
object = string*
list = object*
predicates
analiz_string(string,integer,integer)
glasn_bukva(char)
videlenie_stroki(object,object)
videlenie_spiska(list,object,object)
append(object,object,object)
save_file(object)
start
clauses
glasn_bukva('а').
glasn_bukva('у').
glasn_bukva('е').
glasn_bukva('ы').
glasn_bukva('о').
glasn_bukva('э').
glasn_bukva('я').
glasn_bukva('и').
glasn_bukva('ю').
analiz_string("",0,0).
analiz_string(S,Glas,Sogl) if
frontchar(S,X,Y),
glasn_bukva(X),
analiz_string(Y,Glasn,Sogl),
Glas=Glasn+1.
analiz_string(S,Glas,Sogl) if
frontchar(S,X,Y),
not(glasn_bukva(X)),
analiz_string(Y,Glas,Sogln),
Sogl = Sogln+1.
videlenie_stroki([],[]).
videlenie_stroki([X|L],L2) if
analiz_string(X,G,S),
S > G,
write(X," - ",G," гласных, ",S," согласных - подходит\n"),
videlenie_stroki(L,L1),
L2 = [X|L1].
videlenie_stroki([X|L],L1) if
analiz_string(X,G,S),
S <= G,
write(X," - ",G," гласных, ",S," согласных - не подходит\n"),
videlenie_stroki(L,L1).
append([],L,L).
append([X|L1],L2,[X|Lr]) if
append(L1,L2,Lr).
videlenie_spiska([],L,L).
videlenie_spiska([X|L],L1,Rez) if
videlenie_stroki(X,Spis),
append(L1,Spis,L2),
videlenie_spiska(L,L2,Rez).
save_file(Rez) if
openwrite(f1,"rezult.txt"),
writedevice(f1),
write("Список слов, в которых согласных больше гласных\n"),
write(Rez),
closefile(f1).
start if
write("Задан список списков. Из него следует сформировать новый список,\n"),
write("элементами которого будут слова исходного списка, в которых согласных\n"),
write("больше гласных. Результат сохранить в файле.\n\n"),
write("Список списков строкового типа:\n"),
readchar(_),
List = [["пролог","особо","хороший","язык"],["лисп","особо","лучше"],["следующие","компоненты"]],
write(List,"\n\n"),
readchar(_),
videlenie_spiska(List,[],Rez),
write("\nСписок из слов, в которых согласных больше гласных:\n"),
write(Rez,"\n\n"),
save_file(Rez),
write("Результат сохранен в файле rezult.txt\n"),
readchar(_).
goal
start.
Работа программы:
Для начала работы программы необходимо запустить исполняемый файл:
При нажатии кнопки Enter произойдет обработка исходного списка:
Содержимое файла rezult.txt выглядит так:
Вывод: в данной лабораторной работе состоялось знакомство с файлами, строками и списками языка Turbo Prolog. В ходе выполнения работы были получены навыки по обработке списков, строк и работе с файлами для вывода результата работы программы.