Мегаобучалка Главная | О нас | Обратная связь


Практическое занятие №9



2015-12-04 369 Обсуждений (0)
Практическое занятие №9 0.00 из 5.00 0 оценок




Запись в файл в среде Турбо-Пролог. Чтение из файла. Модификация существующего файла.

Задание 1.

В программе "Печать файла" (Листинг 7.5), так же как и в программе "Запись в файл"( Листинг 7.4), справа к строке данных добавляется комбинация CR-LF. Теперь эти присоединенные символы каждый раз вызывают переход на новую строку. В программе же "Запись в файл" комбинация добавлялась для того, чтобы предикат readln мог отличать строки друг от друга. Для этого предиката CR-LF указывает на окончание строки текста.

Следует также обратить внимание на использование предиката flush(printer). Большинство принтеров не выводят данные на печать сразу по получению, но лишь тогда, когда целиком заполняется их внутренний буфер. Предикат flush позволяет осуществить немедленный вывод накопленной информации.

Проделайте следующие действия с программами "Запись в файл" и "Печать файла":

а. Осуществите поочередный запуск обеих программ. Текст для воода вы можете выбрать по своему собственному усмотрению.

б. Уберите из программы "Запись в файл" операцию конкатенации строки и комбинации спецсимволов CL-LF. Запустите измененный вариант программы на счет и посмотрите, каков будет результат.

в. Внесите в программу "Печать файла" такие изменения, чтобы каждая выводимая строка предварялась спереди двумя пробелами.

 

Листинг 7.4

/* Программа: Запись в файл Файл: PROG0704.PRO */

/* Назначение: Считывание данных с клавиатуры и */

/* запись их в файл на диске. */

 

domains

 

file = datafile

dstring, cstring = string

 

predicates

 

readin(dstring,cstring)

create_a_file

 

goal

 

create_a_file

 

clauses

 

create_a_file :-

 

 

nl,nl,

write("Please enter complete filename."),

nl,nl,

 

readln(Filename),

openwrite(datafile,Filename),

writedevice(datafile),

readline(Dstring),

concat(Dstring"\13\10",Cstring),

readin(Dstring,Cstring),

closefile(datafile).

 

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

 

readin(_,Cstring) :-

write(Cstring),

readln(Dstring1),

concat(Dstring1,"\13\10",Cstring1),

writedevice(datafile),

readin(Dstring1,Cstring1).

 

/***** конец программы *****/

____________________________

Листинг 7.5

/* Программа: Печать файла Файл: PROG0705.PRO */

/* Назначение: Считывание данных из файла и */

/* вывод их на экран и принтер. */

 

domains

 

file = datafile

gstring, cstring = string

 

predicates

 

read_and_print

read_and_display_a_file

 

goal

 

read_and_display_a_file.

 

clauses

 

read_and_display_a_file :-

 

write("Please enter complete filename."),nl,

 

readln(Filename),nl,

openread(datafile,Filename),

readdevice(datafile),

read_and_print,

closefile(datafile),

nl,write("Press the space bar."),

readchar(_),exit.

 

read_and_print :-

not(eof(datafile)),

readln(Cstring),

concat(Cstring,"\13\10",Gstring),

write(Gstring),

writedevice(printer),

write(Gstring),

flush(printer),

writedevice(screen),

read_and_print.

 

read_and_print :-

eof(datafile), !.

 

/***** конец программы *****/

____________________________

 

 

Практическое занятие №10.

Создание файла, содержащего символьную информацию в среде Турбо-Пролог. Считывание символов из файла.

Задание 1.

Как можно видеть из распечатки программы, оба модуля, process_file и readin, используют предикат readchar.

 

readin('#') :- !.

 

readin('\13') :-

write("\13\10"),

writedevice(screen),

write("\13\10"),

readchar(C),

writedevice(datafile),

readin(C).

 

readin(C) :-

write(C),

writedevice(screen),

write(C),

readchar(C1),

writedevice(datafile),

readin(C1).

 

Вторая форма правила readin успешна, когда введен символ возврат каретки (код ASCII 13); при этом комбинация CR-LF выводится на экран и в файл, посредством readchar запрашивается следующий символ, далее еще раз рекурсивно вызывается readin. Третья форма правила успешна при вводе любого другого символа. Это правило, так же как и второй вариант readin, вводит следующий символ и еще раз рекурсивно вызывает readin.

При вводе символа "фунт стерлингов" (#) успешен первый вариант правила, рекурсивных вызовов в нем нет, поэтому подцель readin(C) удовлетворена, и, следовательно, испытывается следующая часть целевого утверждения. Файл на диске закрывается, а программа завершает работу.

Запустите на счет программу "Ввод символов". Введите имя файла - MYPOEM.DAT и наберите на экране Ваше любимое стихотворение (желательно, не очень большое). Ознакомтесь с содержимым созданного файла при помощи редактора Турбо-Пролога.

Задание 2.

Модуль, осуществляющий рекурсивный ввод и вывод, есть правило read_and_print_file:

 

read_and_print_file :-

not(eof(datafile)),

readchar(Y),

writedevice(printer),

write(Y),

flush(printer),

writedevice(printer),

read_and_print_file.

 

Предикат readchar здесь используется как для чтения печатных символов (данных из файла), так и управляющих символов типа комбинации CR-LF.

Запустите на счет программу "Чтение символов". Введите имя файла FROGS.DAT (то же самое, что вы использовали при запуске программы "Запись в файл"). На экране должны появиться 3 строки текста, которые вы ввели при запуске "Запись в файл".

 

Листинг 7.6

/* Программа: Ввод символов Файл: PROG0706.PRO */

/* Назначение: Считывание с клавиатуры символьной */

/* информации и запись ее в файл на диске.*/

 

domains

 

file = datafile

 

predicates

 

process_file

readin(char)

 

goal

 

process_file.

 

clauses

 

process_file :-

write("Enter the comlete file name:"),nl,

readln(Filename),

openwrite(datafile,Filename),

writedevice(datafile),

readchar(C),

readin(C),

closefile(datafile).

 

readin('#') :- !.

 

readin('\13') :-

write("\13\10"),

writedevice(screen),

write("\13\10"),

readchar(C),

writedevice(datafile),

readin(C).

 

readin(C) :-

write(C),

writedevice(screen),

write(C),

readchar(C1),

writedevice(datafile),

readin(C1).

 

/***** конец программы *****/

____________________________

 

Листинг 7.7

/* Программа: Чтение символов Файл: PROG0707.PRO */

/* Назначение: Считывание из файла символьной */

/* информации и вывод ее на экран. */

 

domains

 

file = datafile

 

predicates

 

process_file

read_and_print_file

 

goal

 

process_file.

 

clauses

 

process_file :-

write("Enter the comlete file name:"),nl,

readln(Filename),

openread(datafile,Filename),

readdevice(datafile),

read_and_print_file,

closefile(datafile).

 

 

read_and_print_file :-

not(eof(datafile)),

readchar(Y),

writedevice(printer),

write(Y),

flush(printer),

writedevice(printer),

read_and_print_file.

 

read_and_print_file :-

nl,nl,

readdevice(keyboard),

write("Please press the space bar"),

readchar(_).

 

/***** конец программы *****/

_____________________________




2015-12-04 369 Обсуждений (0)
Практическое занятие №9 0.00 из 5.00 0 оценок









Обсуждение в статье: Практическое занятие №9

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (369)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.005 сек.)