Формат: (file,string) - (i,i)
Идентификатор- константа, имеющая тип file (описывается в разделе DOMAINS),
ДосИмя - строковая константа (Имя файла ДОС, заключенное в кавычки), (i,i) говорит о том, что переменные в качестве аргументов недопустимы.
Пример: openread(dd,"777.dat").
ореп\л/гКе(Идентификатор,ДосИмя) - открытие файла как выходного потока Формат: (file,string) - (i,i)
Пример: openwrite(d,"77.dat").
геас!с1еу1се(Идентификатор) - определить/получить файл входного потока Формат: (file) - (i) (о)
Кроме константы может использоваться переменная, значением которой будет являться имя текущего входного потока.
Пример: readdevice(dd), readdevice(D).
у/пЧэйеУ1се(Идентификатор) - определить/получить файл выходного потока Формат: (file) - (i) (о)
Кроме константы может использоваться переменная, значением которой будет являться имя текущего выходного потока.
Пример: writedevice(dd), writedevice(D).
closefile(KqeffTVKtDHKaTop) - закрыть текущий входной/выходной поток
Формат: (file) - (i)
Пример: closefile(dd)
ео^Идентификатор) - этот предикат истинен, если очередной считываемый из текущего входного потока символ- символ конца файла Формат: (file) - (i)
Пример: eof(dd)
5.5. Задачииупражнения
1. Написать программу, которая считывает из файла натураль ные числа, переводит их из десятичной системы в двоичную и за писывает полученный результат в другой файл.
2. Разработать программу, которая считывает строки из файла, затем сортирует их в алфавитном порядке изаписывает в другой файл.
РЕШЕНИЕ.
1.Программа может быть такой:
% -перевод чисел из 10 в 2 с/с:
/*Для работы необходимо создать два файла по правилам */ /*ДОС. При вводе чисел во входной файл после каждого числа*/
/* нажимать <Бвод> */
/«А************»*****************************************/
domains
file=readfile;writefile 4Hcno=integer список=число* вх_файл,вых_файл=51ппд
predicates
переводЮ_2(вх_файл,вых_файл)
получить(число)
преобразовать(число,список)
записать(список)
конкат(список,список,список)
перевод открыть(вх_файл,вых_файл)
закрыть(вх_файл,вых_файл)
показ(вх_файл,вых_файл)
clauses переводЮ_2(ИмФВх,ИмФВых)>
открыть(ИмФВх,ИмФВых), перевод, закрыть(ИмФВх,ИмФВых), показ(ИмФВх,ИмФВых).
открыть(ИмФВх.ИмФВых):-openreacl(readfile)ИмФBx),readdevice(readfile), openwrite(writefile,Mf^Bbix),writedevice(writefile).
закрыть(ВхФайл,ВыхФайл):closefile(readfile), closefile(writefile).
перевод:- %если не конец файла,
not( eof(readfile)), %то получить из вх_файла получить(ЧислоЮ), %дес. число, преобразовать(Число10,Число2), %перевести в двоичное, записать(Число2), %записать в вых_файл;
перевод. %иначе выход.
перевод.
получить(ЧислоЮ):-readint(Чиcлo),Чиcлo10=Чиcлo.
преобразовать(0,[0]):-!. преобразовать(Число10,Число2):X1=4ncno10div2,
Х2=Число10 mod 2, преобразовать(Х1 ,Хдв1), конкат(Хдв1 ,[Х2],Число2).
конкат([],1_,1_).
конкат([Х|!_1],1_2,[Х|1_3]):-KOHKaT(L1,L2,L3).
/* Вывод двочного представления числа */
/Л*******************************************************/
записать([]):-п1,!. записать([Х|Ц):-\л/п{е(Х),зэписать(1_).
Г------- Конец - Перевод чисел из 10 в 2 с/с------- */
2.Программа может быть такой:
/* Сортировка строк файла */
I* Для работы необходимо создать два файла по правилам */ /* ДОС Входной файл (ИмФВх) сортируется по строкам. */ /* Результат записывается в выходной файл (ИмФВых). */
domains
CTpoK?,=string
спис_строк=строка*
predicates
сорт_файла(вх_файл,вых_файл)
сорт(спис_строк,спис_строк)
формировать_список(спис_строк)
внести(строка,спис_строк,спис_строк)
сортировка зап(спис_строк)
%псказ(вх_файл,вых_файл)
clauses сорт_файла(ИмФВх,ИмФВых)>
от-крыть(ИмФВх,ИмФВых),сортировка,закрыть(ИмФВх,ИмФВых), показ(ИмФВх.ИмФВых).
сортировка:-
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.