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

Работа с файлами

Категория:

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

Дисциплина:

Функциональное и логическое программирование

Город:

Беларусь, Минск

Учебное заведение:

БНТУ, ФИТР

Стоимость работы:

4 руб.

Оценка: 10
Объем страниц: 10
Год сдачи: 2021
Дата публикации: 09.09.2021

Фрагменты для ознакомления

Отчет по лабораторной работе № 9

дисциплина: «Функциональное и логическое программирование»

«РАБОТА С ФАЙЛАМИ»

 Цель работы: приобретение практических навыков в составлении и отладке Пролог-программ, использующих файлы.

Задание общее по лабораторной работе:

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

Код программы:

domains

       file=datafile

       list=string*

predicates

nondeterm readin(string)

nondeterm create_file(string).

nondeterm readout

nondeterm result

clauses

       create_file(Str):-

                   write("Введите имя файла: "),

                  readln(Filename),nl,

                  openwrite(datafile,Filename),

                    writedevice(datafile),

                  readin(Str),

                    closefile(datafile),

                  openread(datafile,Filename),

                  readdevice(datafile),

                    readout,

                  closefile(datafile).

       readin("" ):- !.

       readin(Str):-

                  fronttoken(Str, Slovo, OST),

                  concat("Мужчина(",Slovo, E),

                  concat(E,").\13\10",R),

                  write(R),

                  readin(OST).

 Скриншоты результатов:

Задание индивидуальное:

4.7. Извлечение из текстового файла строк, длина которых больше заданной.

 Код программы:

/* Извлечение из текстового файла строк, длина которых больше заданной. */

domains

       file = filename   %file - стандартный тип домена (файловый), filename - логическое имя файла.

       list = string*

       length = integer

predicates

       nondeterm file_list(list)

       nondeterm result

       nondeterm output(list,integer)

       nondeterm writefile(list, integer)

clauses

       file_list([]):-

                   eof(filename),!. %если конец файла

           file_list([H|T]):-

                   not(eof(filename)),                 % пока не конец файла

                   readln(H),

                   write(H,"<=> "),                    

                   str_len(H,Z),

                   write(Z,"(длина);"),nl,

                   file_list(T).

       output([],_).

       output([H|T], Lgth) :-

                   str_len(H, Length),

                   Length >Lgth,

                   write(H), nl,

                   output(T, Lgth).

 Скриншоты результатов:

Задание индивидуальное:

4.9. Сортировка строк текстового файла в порядке увеличения их длины.

 Код программы:

domains

       file = datafile

       list = string*

predicates

       nondeterm result

       nondeterm sort(list,list)

       nondeterm paste(string,list,list)

       nondeterm read_list(list)

       nondeterm write_list(list)

clauses

       sort([], []).

       sort([H|T], Lots) :- 

                   sort(T, Tots), 

                   paste(H, Tots, Lots).

 Скриншоты результатов:

Задание индивидуальное:

4.18. Извлечение из текстового файла строк, заканчивающихся точкой.

 Код программы:

  /* Извлечение из текстового файла строк, закачивающихся точкой.*/

domains

       file = filename  %file - стандартный тип домена (файловый),  filename - логическое имя файла.

       list = string*

       length = integer

predicates

       nondeterm file_list(list)

       nondeterm result

       nondeterm output(list)

       nondeterm writefile(list)

clauses

       file_list([]):-

                   eof(filename),!. 

       file_list([H|T]):-

                   not(eof(filename)),                 

                   readln(H),

                   write(H), nl,                

                   file_list(T).

 Скриншоты результатов:

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

1. Объявление файловых доменов.

2. Какие из устройств являются стандартными устройствами ввода и вывода по умолчанию.

3. Встроенные логические имена стандартных устройств ввода-вывода.

4. Что такое логическое (символическое) имя файла и где оно объявляется?

5. Может ли быть записано логическое имя файла в программе с прописной буквы?

6. Сохраняется ли содержимое файла, открытого для записи предикатом openwrite?

7. Как можно дополнить содержимое файла новыми данными?

8. Какой предикат открывает файл одновременно на чтение и запись?

9. Что произойдет, если файл, открытый для записи, не закрыть предикатом closefile?

10. Какие предикаты служат для переадресации устройств чтения-записи?

11. Как можно записать содержимое всего текстового файла в строку?

12. Нужно ли открывать и закрывать файл при использовании предиката file_str?

13. Как наиболее просто вывести содержимое всего текстового файла на экран?

14. Что используется в качестве аргументов в предикатах eof и existfile?

15. Какой предикат служит для чтения строки из файла?

16. Можно ли использовать предикат filemode для установления режима работы с файлом (бинарный или текстовый)?

17. Назначение третьего аргумента предиката filepos.

Вывод приобрёл практические навыки в составлении и отладке Пролог-программ, использующих файлы.

18