Дипломы, курсовые, рефераты, контрольные...
Срочная помощь в учёбе

Организация многооконного меню и работа с файлами в Турбо-Прологе

РефератПомощь в написанииУзнать стоимостьмоей работы

В Турбо-Прологе по умолчанию каналу ввода назначается устройство ввода — клавиатура, а каналу вывода — экран монитора. Если эти назначения не устраивают, то необходимо воспользоваться предикатами переадресации каналов ввода и вывода. Параметр Window_number, целое число, идентифицирует окно в программе. Это число используется в качестве ссылки предикатом shiftwindow и др. В данной программе… Читать ещё >

Организация многооконного меню и работа с файлами в Турбо-Прологе (реферат, курсовая, диплом, контрольная)

Цель работы

Изучение файловой системы Турбо-Пролога, работы с файлами последовательного и прямого доступов, способов организации многооконных меню. Разработка пролог-программ обработки файлов с созданием среды пользователя с помощью многооконных меню.

Составными частями компьютера являются устройства ввода/вывода, используемые программой на Турбо Прологе во время ее работы.

Аналогично встроенный предикат WriteDevice () осуществляет переадресацию каналов вывода информации на указанное устройство вывода или файл.

Пример.

readdevice (com1).

readdevice (dat.dat).

настраивают канал ввода на коммуникационный порт com1 и логический файл dat. dat соответственно, а предикаты.

writedevice (screen).

writedevice (printer).

настраивают канал вывода на экран и принтер.

В Турбо-Прологе по умолчанию каналу ввода назначается устройство ввода — клавиатура, а каналу вывода — экран монитора. Если эти назначения не устраивают, то необходимо воспользоваться предикатами переадресации каналов ввода и вывода.

Чтобы иметь доступ к файлу, его надо открыть. Файл может быть открыт четырьмя способами:

  • — для чтения используется предикат
  • — для записи используется предикат
  • — для добавления используется предикат
  • — для модификации используется предикат

Файл, открытый для любых действий, кроме чтения, должен быть закрыт, когда действия закончены, в противном случае внесенные изменения могут быть утеряны. Для закрытия файла используется встроенный предикат closefile ().

Одновременно можно открыть несколько файлов, и канал ввода/вывода можно быстро переадресовать между открытыми файлами. Больше времени требуется на то, чтобы открыть и закрыть файл, чем на переадресацию канала ввода/вывода между ними.

После того, как файл открыт, Турбо-Пролог связывает имя логического файла с именем физического файла. Имя физического файла — это имя файла в операционной системе (ОС). Логическое имя файла Турбо-Пролог использует при переадресации канала ввода/вывода. Имя логического файла есть идентификатор и должно начинаться с маленькой буквы и объявлено в разделе domains после ключевого слова file. Объявление одного имени логического файла выглядит как.

domains.

file=,.

domains.

file=;…

В программе может быть только одно поле объявления файлов — file.

Турбо-Пролог автоматически заранее объявляет четыре имени:

  • — printer (относится к параллельно-печатающему порту);
  • — screen (относится к экрану монитора);
  • — keyboard (относится к клавиатуре);
  • — com1 (относится к последовательному порту связи).

Эти имена не должны появляться при объявлении файлов.

Организация обработки файлов

В наиболее общем виде запись информации в файл может быть представлена следующей последовательностью действий:

openwrite (datafile," Dat. dat"),.

writedevice (datafile),.

.

.

closefile (datafile).

Для чтения информации из файла может служить следующий фрагмент:

openread (datafile," Dat. dat"),.

readdevice (datafile),.

.

.

closefile (datafile).

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

Модификация файла:

openmodify (datafile," Dat. dat"),.

readdevice (datafile),.

writedevice (datafile),.

.

.

closefile (datafile).

openappend (datafile," Dat. dat"),.

writedevice (datafile),.

.

.

closefile (datafile).

Предикаты Турбо-Пролога для работы с файлами

Для работы с файлами в системе Турбо-Пролог имеются следующие предикаты. Здесь физический файл открывается для чтения. Если файл не найден, то предикат не выполняется (не успешен). Если имя физического файла является недопустимым, то сообщается об ошибке.

openwrite (,).

Физический файл открыт для записи. Если файл существует, то он очищается. Если нет, то он создается и заносится в текущий каталог ОС.

openappend (,).

Физический файл открыт для добавления информации в конец файла. Если файл не найден, то выводится сообщение об ошибке.

openmodify (,).

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

closefile ().

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

readdevice ().

Переадресовывает канал ввода на указанное устройство или файл, открывая их для чтения. Если имя логического файла было свободно, то оно связывается с текущим назначением канала ввода.

writedevice ().

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

existfile ().

Предикат успешен, если файл с указанным именем существует.

eof ().

Предикат успешен, если достигнут конец файла, и не успешен в противном случае.

В Турбо-Прологе имеется ряд других стандартных предикатов для работы с файлами. Описание этих предикатов приводится в соответствующей литературе по Турбо-Прологу.

domains.

file=dataFile.

predicates.

check (string).

wr_lines.

clauses.

wr_lines: — readln (X),.

write (X), nl,.

writedevice (datafile),.

write (X), nl,.

writedevice (screen),.

check (X).

wr_lines.

check («end»):-!.

check (_):-fail.

goal.

openwrite (datafile," Dat. dat"),.

wr_lines,.

closefile (datafile).

Обрабатываемая информация вводится с клавиатуры построчно.

Последняя строка — end.

Чтение данных из файла и вывод их на экран

domains.

file=datafile.

predicates.

read_write.

goal.

openread (datafile," Dat. dat"),.

readdevice (datafile),.

read_write,.

closefile (datafile).

clauses.

read_write: — not (eof (datafile)),.

readln (Line),.

write (Line), nl,.

read_write.

read_write.

Файлы прямого доступа

Файл прямого доступа — это файл, позволяющий работать с произвольной записью в нем без предварительного чтения предыдущих записей. Файлы, где нельзя без этого обойтись, называются файлами последовательного доступа. Файлы, рассматриваемые до сих пор, были именно таковыми.

В файлах прямого доступа все записи имеют одинаковую длину. Указатель перемещается по позициям кратным длине записи, он указывает всегда на начало очередной записи. Турбо-Пролог содержит встроенный предикат, который удобен для работы с файлами прямого доступа: filepos.

filepos (,).

может иметь одно из трех значений: 0, 1, 2. Эти значения определяют как будет ориентировано значение аргумента.

Определяется по таблице 3.

Пример обработки файла прямого доступа.

Пример обработки файла прямого доступа.

Работа с файлами прямого доступа требует знания структуры этого файла.

Нужно знать, к примеру, длину каждой записи файла, число записей, начальную позицию первой записи.

Приведем программу чтения n-ой записи из файла прямого доступа.

Номер, интересуемой записи, вводится по запросу с клавиатуры. Предполагается, что длина каждой записи 40 позиций, начальная позиция первой записи нулевая и число записей равно 100.

domains.

file=f.

predicates.

read_file.

clauses.

read_file:;

write («Введите имя файла: «), nl,.

readln (F),.

openmodify (f, F),.

write («Введите номер записи: «), nl,.

readint (N),.

N>0,N<=100,!,.

I=(N-1)*40,.

readdevice (f),.

filepos (f, I,0),.

readln©,.

write©, nl, nl,.

write («Нажмите пробел»), nl,.

readdevice (keyboard),.

readchar (_),.

closefile (f).

read_file:-write («** Ошибка ввода **»).

goal.

read_file.

В случае указания несуществующего имени физического файла или указания несуществующего номера записи в файле печатается сообщение об ошибке ввода.

Предикаты для работы с окнами

Для организации удобного интерфейса пользователя с пролог-программой в Турбо-Прологе имеется ряд стандартных предикатов для работы с окнами.

Предикат для создания окон

makewindow (Window_number,.

Screen_attribute,.

Frame_attribute,.

Frame_string,.

Starting_row,.

Starting_column,.

Window height,.

Window_width).

Параметр Window_number, целое число, идентифицирует окно в программе. Это число используется в качестве ссылки предикатом shiftwindow и др. В данной программе организуется 5 различных окон, т. е. значение параметра Window_number будет изменяться от 1 до 5.

Целочисленные значения Screen_attribute задают комбинацию цветов текста и фона в окне. Для создаваемых окон выбраны белые символы на черном фоне, т. е. значение параметра Screen_attribute=7.

Для цветного экрана параметр формируется по формуле screen_attribute = S+A, где S — цвет текста, а A — цвет фона (таблица 4).

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

Для вывода символов с мерцанием параметр формируется по формуле.

screen_attribute = S+A+128.

Аргумент Frame_attribute есть целое число, значение которого задает цвет рамки (таблица 5). Для белой рамки Frame_attribute=7.

Аргумент Starting_row — целое число, определяющее верхнюю строку (лишнюю) создаваемого окна.

Аргумент Starting_column — целое число, указывающее крайний левый столбец окна. Аргумент Window_height — целое число, определяющее количество строк, занимаемых создаваемым окном.

Аргумент Window_width — целое число, указывающее число столбцов занимаемых окном.

Предикат смены текущего окна.

Предикат смены текущего окна.

shiftwindow (Window_number).

Параметр Window_number является целым числом, приписываемым окну при его создании. (Это параметр Window_number предиката makewindow).

Значение предиката shiftwindow (3) вызывает переназначение всех операций ввода и вывода в окно с номером 3.

Предикат удаления текущего окна с экрана

Все текстовые и графические изображения, находящиеся в окне, так же удаляются. Если за данным окном находится другое окно, то это окно и его содержимое становится видимым.

Пример организации многооконного меню в программе обработки файла прямого доступа

Модуль menu высвечивает в главном окне программы доступные пользователю функции обработки файла:

  • — создание файла прямого доступа;
  • — добавление элемента в файл;
  • — модификация файла;
  • — просмотр файла;
  • — окончание работы программы.

Модуль запрашивает у пользователя режим работы N в соответствии с выбранной функцией обработки файла или окончанием работы. С помощью repeat и N=5 осуществляется выбор новых необходимых видов обработки файла. В соответствии с выбранным режимом работы N осуществляется выбор правил:

  • — process (1) для создания файла прямого доступа;
  • — process (2) для добавления информации в файл;
  • — process (3) для модификации информации в файле;
  • — process (4) для просмотра информации, находящейся в файле;
  • — process (5) для окончания работы программы.

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

В программе предусмотрены реакции программы на ошибки при вводе выбираемого режима работы и при неуказании имени физического файла.

domains.

file=f.

predicates.

menu.

repeat.

namefile (string).

input (string).

read.

process (integer).

print.

error.

clauses.

menu:-repeat, makewindow (1,7,7," ГЛАВНОЕ МЕНЮ", 0,0,25,70),.

write («***»), nl,.

write («* ФУНКЦИИ ОБРАБОТКИ ФАЙЛА *»), nl,.

write («* *»), nl,.

write («* 1. Создание файла *»), nl,.

write («* 2. Добавление элемента в файл *»), nl,.

write («* 3. Модификация файла *»), nl,.

write («* 4. Просмотр файла *»), nl,.

write («* 5. Окончание работы *»), nl,.

write («***»), nl, nl, nl,.

write («ВАШ ВЫБОР (1.5): «), readint (N),.

process (N), N=5,!.

repeat.

repeat:-repeat.

process (1):-makewindow (2,7,7," СОЗДАНИЕ ФАЙЛА", 0,10,25,30),.

nl, nl, write («Введите имя файла: «), readln (F),.

namefile (F), openwrite (f, F), closefile (f),.

openappend (f, F), write («Будете вводить (y/n): «),.

readln©, input©, closefile (f), removewindow.

process (2):-makewindow (3,7,7," ДОБАВЛЕНИЕ ЭЛЕМЕНТА", 0,10,25,30),.

nl, nl, write («Введите имя файла: «), readln (F),.

namefile (F), openappend (f, F), input («y»),.

closefile (f), removewindow.

process (3):-makewindow (4,7,7," ДОБАВЛЕНИЕ ЭЛЕМЕНТА", 10,10,10,30),.

nl, nl, write («Введите имя файла: «), readln (F),.

namefile (F), openmodify (f, F),.

write («Номер записи: «), readint (N),.

I:=(N-1)*7,readdevice (f), filepos (f, I,0),.

readln©, write©, nl, nl, readdevice (keyboard),.

write («Введите новое значение: «), nl, readint (K),.

filepos (f, I,0), writedevice (f), write («%5.0 «, K),.

writedevice (screen), closefile (f), removewindow.

process (4):-makewindow (5,7,7," ПРОСМОТР ФАЙЛА", 0,10,25,30),.

nl, nl, write («Введите имя файла: «), readln (F),.

namefile (F), openread (f, F), readdevice (f),.

writedevice (screen), print, closefile (f),.

removewindow.

process (5):-nl, write («КОНЕЦ»), nl,.

write («Нажмите пробел»), readchar (_).

error:-nl, write («*** ОШИБКА ВВОДА ***»), nl,.

write («Нажмите пробел»), readchar (_).

print:-not (eof (f)),!, readln (N), write (N), nl, print.

print:-readdevice (keyboard).

namefile («„):-!, write (“ *** ОШИБКА ВВОДА ***»), nl,.

write («Нажмите пробел»), readchar (_), fail.

namefile (_).

input («y»):-!, write («Введите элемент: «), read,.

write («Будете еще вводить (y/n): «), readln©,.

input©.

input (_).

read:-readint (K),!, writedevice (f), writef («%5.0 «, K),.

writedevice (screen).

Задание на лабораторную работу

  • 1. Изучить способы организации обработки файлов.
  • 2. В соответствии с вариантом задания, определенным преподавателем, составить пролог-программу.
  • 3. Оформить отчет с указанием варианта задания, текстом программы, и протоколом выполнения программы.
Показать весь текст
Заполнить форму текущей работой