Материал: Методическое пособие по Turbo Prolog (старое)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

9) Быки и коровы. Игрок A выбирает секретный код, представляющий последовательность из N различных десятичных цифр (N=4). Игрок пытается угадать задуманный код и спрашивает игрока А о числе быков” (“быки” - количество совпадающих цифр в одинаковых позициях предполагаемого и задуманного кодов; число коров”- количество совпадающих цифр, входящих в предполагаемый и задуманный код, но находящиеся на разных позициях).

Рекомендуемая литература

1.Ин Ц., Соломон Д. Использование Турбо-Пролога: Пер. с англ.-

М.:Мир, 1993.-608 с.,ил.

2.Информатика:Учеб.пособие для студ.пед.вузов/А.В.Могилев, Н.И.Пак, Е.К.Хеннер;Под ред. Е.К.Хеннера.-3-е изд., перераб. и доп.-М.:Издательский центр “Академия”, 2004.-848 с.

51

renamefile(old_DOS_filename, new_DOS_filename)

Лабораторная работа №7. Обработка файлов. Предикаты для работы с файлами

deletefile(DOS_filename)-удаление файла save(DOS_filename) –сохранение файла

-переименовыфвание файла existfile(DOS_filename)-проверка на наличие файла с таким именем flush(file_domain)-сброс данных из внутреннего буфера, отведенного для данного устройства записи

disk(Path) –выбор дисковода и пути доступа

dir(Path, File_spec, File_name) –Переменой Path должен быть присвоен корректный путь доступа, переменная File_spec задает расширение представляющей интерес группы файлов. Данный предикат выдает каталог имен файлов с заданным расширением; вы можете выбрать среди них нужный и нажать Enter. Имя файла будет присвоено переменой File_name.

При описании файловых доменов тип домена записывается по левую сторону от знака равенства, а имя доомена по правую.

Пример:

file=datafile

file=datafile1;datafile2

openwrite(datafile,filename) - открытие файла для записи или создание, где datafileвведеннный пользователем файловый домен, filename-имя файла в DOS, теперь ссылки на datafile будут означать обращение к filename.

writedevice(datafile) -назначение файла в качестве устройства записи

openread(datafile,filename) - открытие файла для чтения.

readdevice(datafile) -назначение файла устройством чтения openmodify(datafile,filename) - открытие файла для редактирования,

указатель помещается в начало файла, сместить указатель можно при помощи предиката filepos.

openappend(datafile,filename) - открытие файла для добавления данных в конец файла.

closefile(datafile) -закрытие файла

52

Рассмотрим примеры работы с файлами.

Пример 1. Вывести информацию на экран дисплея и в файл на диске.

Domains

Программа 27. Запись данных в файл

str = string file = datafile

Predicates data(str) write_lines

Goal openwrite(datafle,"file1.dat"), write_lines, closefile(datafile).

Clauses

data("Старому году оставьте печали,!"). data("Забудьте обиду, беду.").

data("Только успехов, здоровья и счастья,"). data("Мы Вам желаем в Новом году!"). write_lines:-

data(Line), write(" ",Line),nl,

writedevice(datafile), write(" ",Line),nl,

writedevice(screen), /*для вывода данных на экран*/ fail, write_lines.

Пример 2. Вывести данные файла на экран.

Domains

Программа 28. Чтение данныхиз файла

str = string file = datafile

Predicates

read_write_lines

Goal openread(datafile,"file1.dat"), read_write_lines, closefile(datafile).

Clauses

read_write_lines :-

readdevice(datafile),

not(eof(datafile)),

readln(Line),

writedevice(screen), write(" ",Line),nl, read_write_lines.

Пример 3. Записать в файл данные, вводимые с клавиатуры

Domains

Программа 29. Запись в файл данных, вводимых с клавиатуры

file = datafile

dstring, cstring = string Predicates

readin(dstring,cstring) create_a_file

Goal

create_a_file.

Clauses

create_a_file :-

53

nl,nl,

write("Пожалуйста, введите полное имя файла."), nl,nl,

readln(Filename), openwrite(datafile,Filename), writedevice(datafile),

readln(Dstr),

concat(Dstr,"\13\10",Cstr),

readin(Dstr,Cstr), closefile(datafile).

readin("done",_) :- !.

/*ввод данных завершится после вода слова "done"*/ readin(_,Cstr) :-

write(Cstr),

readln(Dstrl),

concat(Dstrl, "\13\10",Cstr1), writedevice(datafile), readin(Dstrl,Cstr1).

Предикаты для работы с файлами прямого доступа Openmodify(fn,filename)-связывает логическое имя файла fn с именем файла Filepos(fn, pos, mode)-устанавливает указатель файла в заданную позицию

Таблица 12. Действие системы при операциях с файлами прямого доступа

Режим mode

Действия системы

0

Смещение берется относительно начала файла

1

Смещение берется относительно текущей позиции

2

Смещение берется относительно конца файла

Пример 4. Данные, вводимые с клавиатуры, записать в файл прямого доступа.

Domains

Программа 30. Запись данных в файл прямого доступа

file = datafile Predicates

create_a_random_access_file write_read_more(real, string) pad_str (strIng,string,integer)

Goal

create_a_random_access_file.

Clauses

create_a_random_access_file :-

write("Please enter filename:"),nl, readln(Filename), openwrite(datafile,Filename), closefile(datafile), openmodify(datafile,Filename), write("Введите строку"),nl, readln(Dstr), write_read_more(0,Dstr), closefile(datafile).

write_read_more(_,"done") :-

nl, write(" Press the space bar."), readchar(_),exit.

54

write_read_more(Index,Dstr) :- writedevice(datafile), filepos(datafile,Index,0), pad_str(Dstr,Padstr,38), concat(Padstr, "\10\13", Cstr), write(Cstr), writedevice(screen), write("Введите строку"),nl, readln(Dstr1),

Index1 = Index + 40, write_read_more (Index1, Dstr1).

pad_str (Instr,Instr,Length) :- str_len(Instr,Testlength), Testlength >= Length,!. pad_str (Instr,Padstr,Length) :- concat(Instr,"-",Newstr), pad_str(Newstr,Padstr,Length).

Пример 5. Вывести на экран заданную строку файла прямого доступа и выдача их на экран

Domains

Программа 31. Вывод данных из файла прямого доступа

file = datafile Predicates

read_a_random_access_file Goal

read_a_random_access_file. Clauses

read_a_random_access_file:-

write("Please enter filename:"), nl, readln(Filename), openread(datafile,Filename),

write("Type 1n record number: "),nl, readreal(Record),

Index = (Record - 1) * 40, readdevice(datafile), filepos(datafile,Index,0), readln(Cstr),

write(Cstr), nl,nl,

write("Press the space bar."),nl, readdevice(keyboard), readchar(_),

closefile(datafile),

exit.

Задание для самостоятельной работы

1)В файле задана последовательность целых чисел, найти сумму чисел, предшествующих первому отрицательному.

2)Переписать данные файла в обратном порядке.

3)Вывести на экран данные файла в неубывающем порядке.

4)Записать результат сложения чисел, содержащихся в файлах в

третий.

5)Переписать числа из файла в другой, дописав за каждым его квадрат.

55

Источник: https://studfile.net/preview/16371536/