Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пролог_шпоры.docx
Скачиваний:
35
Добавлен:
27.09.2019
Размер:
103.66 Кб
Скачать

28. Запись данных в файл на Visual Prolog

Последовательность действий, необходимая для записи в файл:

  1. Открытие файла с помощью предиката openwrite. Если файла с указанным именем нет, то создаетс яновый файл. Если файл уже есть, то его содержимое будет утрачено. Чтобы от этого застраховаться, можно сначала проверить наличие файла предикатом existfile, и принять соответствующие меры, если existfile будет успешным.

  2. Назначение файла в качнстве устройства записи предиката writedevice.

  3. Самма запись в файл write или writef.

  4. Использование любых других предикатов и правил, отвечающих назначению программы.

  5. Закрытие файла предикатом closefile.

/* Считывание данных с клавиатуры и запись их в файл */

domains

file = datafile

kstr, fstr = string

predicates

readin (kstr, fstr) % чтение-запись

create_file

goal

create_file

clauses

create_file:- nl, nl,

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

nl, nl, readln(FileName),

openwrite (datafile),

writedevice (datafile),

readln (Kstr),

concat (Kstr, “\13\10”, Fstr),

readin (Kstr, FStr),

closefile (datafile).

readin (_, Fstr):- write (FStr), readln (KStr1),

concat (KStr1, “\13\10”, Fstr1),

readin (Kstr1, Fstr1).

В приведенной программе

Kstr - строка, вводимая с клавиатуры,

Fstr - строка, выводимая в файл.

29. Чтение данных из файла на Visual Prolog

Открытие файла предикатом openread.

  1. Назначение файла устройству чтения с помощью readdevice.

  2. Само чтение из файла.

  3. Использование произвольных предикатов и правил.

  4. Закрытие файла предикатом close.

/* Считывание данных из файла и вывод их на экран и принтер */

domains

file = datafile

predicates

read_and_print

read_file

goal

read_file

clauses

read_file:- write (“Введите имя файла”), nl,

readln(FileName), nl,

openread (datafile, FileName), readdevice (datafile),

read_and_print, closefile (datafile),nl,

write (“Нажмите любую клавишу”), readdevice (keyboard),

readchar (_), exit.

read_and_print:- not (eof(datafile)), readln (Fstr), write (Fstr), nl,

writedevice (printer), write (Fstr), writedevice (screen), read_and_print.

read_and_print:- eof(datafile),!.

30. Дозапись данных в конец существующего файла на Visual Prolog.

process_append:- write (“Введите имя файла”), nl,readln (Filename), nl, write (“Программа готова принять данное для записи”), nl,

openappend (datafile, Filename),

writedevice (datafile), readln (Kstr),

concat (Ksrt, “\13\10”, Fstr), readin (Kstr, Fstr),

closefile (datafile).

31.Создание меню средствами Visual Prolog.

На приведенном ниже рисунке дается структурная диаграмма программы, использующей упрощенное меню.

Целевое утверждение result создает главное меню show_menu. В главном меню можно выбрать одну из пяти опций, каждая из которых реализует определенную операцию (process).

Возможный вариант программы:

predicates

nondeterm repeat

process(integer)

show_menu

result

goal

result.

clauses

result:-

show_menu,nl,write("Нажмите любую клавишу"),

readchar(_),exit.

repeat.

repeat:-repeat.

show_menu:-

repeat,

write("**************************"),nl,

write(" 0 Выход"),nl,

write(" 1 Создание файла"),nl,

write("***********************"),nl,nl,

/*аналогичные предложения для опций 2-4*/

write("Наберите одну из цифр (0-4): "),

readint(N),N<5,process(N),N=0,!.

process(0):-

nl,write(" Выход из меню"),nl.

process(1):-

/* реализация процесса создания файла */

write(" Для возврата в главное меню нажмите любую клавишу"),nl,nl,

readchar(_).

/*аналогично пишутся остальные правила process */

Правило повтора repeat, являясь одной из компонент некоторого правила, обеспечивает циклическое выполнение расположенных после repeat подцелей данного правила.