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

25.Обработка отношений в Турбо-Прологе. Примеры программирования композиций отношений.

селекция – выбирается полностью запись, удовлетворяющая заданному критерию (выбираются все строки).

проекция – происходит селекция, но выбирается не вся запись, а только некоторая часть атрибутов.

объединение – новое отношение, включающее все различные атрибуты

соединение – новое отношение, включающее все атрибуту

пересечение – новое отношение, содержащее те атрибуты, которые имеются во всех отношениях

разность А и Б – новое отношение, которое состоит из тех атрибутов А, которых нет в Б.

prof(ivanov,petr,1971,moskva,teacher)

prof(petrov,misha,1980,smolensk,teacher)

profhol(x)prof(x,_,_,_,teacher)

tablo1(1,"1234",passagir,12,[tambov,saratov,volgograd]). tablo1(2,"543",passagir,15,[smolensk,moskva,kursk,belgorod]).

tablo2(passagir,12,2).

tablo2(passagir,15,2).

peresechenie:-tablo1(_,_,C,D,_),tablo2(C,D,_),

write(" Тип: ",C),nl,

write(" Кол-во вагонов: ",D),nl,nl,fail.

obedinenie:- tablo1(A,B,C,D,E),tablo2(C,D,F),

write("№",A),nl,

write(" Номер: ",B),nl,

write(" Тип: ",C),nl,

write(" Кол-во вагонов: ",D),nl,

write(" Города: ",E),nl,

write(" Кол-во локомотивов: ",F),nl,fail.

Результат: peresechenie Тип: passagir Кол-во вагонов: 12 Тип: passagir Кол-во вагонов: 15

obedinenie N1 Номер: 1234 Тип: passagir Кол-во вагонов: 12

Города: [tambov,saratov,volgograd] Кол-во локомотивов: 2

26. Организация работы с файлами. Средства Турбо-Пролога для работы с файлами.

Для работы с файлами в Турбо Прологе имеются встроенные стандартные предикаты, реализующие типовые операции открытия файлов для чтения-open-read( ) , для записи в файл – openwrite( ), для добавления в файл – openappend( ), для модификации и изменений файлов – openmodify( ), закрытия файлов close- file( ) и другие.

При работе логической программы c файлами они должны быть описаны в секции domains.

domains file= myfile1; myfile2; …; myfilen

Предикаты openread( ), openwrite( ), openappend( ) openmodify( ) имеют одинаковый формат. В скобках указывается два параметра. Первым параметром является имя файла, указанное в описании domains и которое далее используется в программе, а вторым – строка в кавычках, указывающая путь доступа к файлу на диске. openread(myfile1, “C:\prolog\file.txt”)

Предикат closefile( ) имеет один параметр – имя закрываемого файла closefile(myfile1).

Операции чтения и записи с открытыми файлами выполняются после назначения устройств для чтения или записи с помощью предикатов переадресации writedevice( ) и readdevice( ). В скобках этих предикатов указываются имена файлов либо имена устройств ввода или вывода screen, keyboard, printer и другие. Например, writedevice(myfile1), readdevice(keyboard).

Для работы с данными в файлах могут быть использованы стандартные предикаты чтения и записи: readint( ), readchar( ), readreal( ), readln( ), write( ) и другие.

Для работы с открытыми файлами могут использоваться предикаты:

filemode( )- для задания режима работы с текстовыми или двоичными файлами;

existfile( )-для определения, имеется ли файл на текущем устройстве;

renamefile( )- для переименования файлов;

deletefile( )-для удаления файла с диска;

disk( )-для указания текущего пути;

filepos( )-для позиционирования указателя при операциях чтения или модификации;

flush( )- для сброса буфера.

Ниже приведены образцы программ записи в файл и чтения из файла.

domains file=wrfile; rdfile

predicates write_f read_f write_str read_str wr_f(string) rd_f(string)

clauses

write_f:-write("Bведите имя файла для записи: "),nl,

readln(Fname),

wr_f(Fname).

wr_f(Fname):-openwrite(wrfile, Fname),

write_str.

write_str:-write("Введите строку для записи в файл: "),nl,

readln(St), writedevice(wrfile),

write(St),nl, writedevice(screen),

write("Будете продолжать запись ? (y/n)"),nl,

readln(Ansver), Ansver=y, write_str.

write_str:-closefile(wrfile), write("Работа завершена."),nl,exit.

read_f:-write("Введите имя файла для чтения данных: "),nl,

readln(Fname), rd_f(Fname).

rd_f(Fname):-openread(rdfile, Fname), read_str.

read_str:-readdevice(rdfile),nl,

readln(St), write(St),nl,

write("Пpочитать ещё строку ? (y/n)"),nl,

readdevice(keyboard), readln(Sm), Sm=y, read_str.

read_str:-closefile(rdfile), write("Работа завершена"),nl.