Конспект лекций по дисциплине "Программное обеспечение интеллектуальных систем". Для магистров специальности 5А521902




Скачать 401.76 Kb.
НазваниеКонспект лекций по дисциплине "Программное обеспечение интеллектуальных систем". Для магистров специальности 5А521902
страница3/4
Дата27.12.2012
Размер401.76 Kb.
ТипКонспект
1   2   3   4

Лекция №6.

Использование файлов прямого доступа

План Лекции

  1. файлом прямого доступа

  2. создания и записи файла прямого доступа

  3. Чтение из файла прямого доступа

  4. особенности дружественного интерфейса программ



Ключевые слова

Чтение из файла прямого доступа. Особенности дружественного интерфейса программ.

Openmodify

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


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

Если надо модифицировать файл, то следует использовать следующие шаги:

  1. openmodify(datafile,”имя”).

  2. сместить указатель файла filepos(datafile,File_position,Mode).

Параметру File_position – присвоено действительное число, обозначающее позицию в файле.

Параметру Mode присвоено одно из 3-х значений: 0,1,2.

0 – смещение относительно начала файла

1 – смещение относительно текущей позиии

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

Например:

File_pos(players,100,0)

В этом предикате players – имя логического файла.

«100» - означает, что указатель сместиться к 100 символу или 100 позиции.

«0» - показывает, что 100 отсчитывается от начала файла.

Если «1» - то отсчет будет вестись от текущей позиции указателя и указатель сместиться на 100 позиций от текущей.


Рассмотрим пример использования файлов прямого доступа.


Имеются записи о футболистах

Иванов, 7, Динамо …

Петров, 6, Спартак …

Сидоров, 11, ЦСКА …

Воробьев, 12, Зенит …

Вся информация состоит из 4 строк, каждая содержит 38 символов.

Данные хотим извлекать выборочно, а не подряд. Чтобы добиться этого, необходимо в конец каждой строки добавить комбинацию символов «\10\13» . Длина строки станет 40 – (LF-CR). Все строки одинаковые, так как мы их дополнили дефисами до 38.


Рассмотрим правило создания и записи файла прямого доступа.

create_file:

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

readln(fileName),

openwrite(datafile,FileName), /*Создают пустой файл*/

closefile(datafile)

openmodify(datdfile,FileName), /*Открытие для модификации*/

write(“Введите строку данных”),nl

readln(Dstring),

write_read(0,Dstring), /*рекурсивная процедура …. данные в файл, 0 – первоначальная позиция в файле*/

closefile(datdfile).

write_read(“done”):- /*правило при окончании «done»-слова конца*/

nl,write(“Конец данных”),

readchar(_),exit. /*модуль ожидания полезен в диалоговых программах*/

/*exit-выход из программы Турбо Пролог*/


write_read(Index,Dstring):-

writedevice(datafile),

filepos(datafile,Index,0), /*вывод на 0- позицию*/

1) pad_string(Dstring, Padstring,38), /*правило дополнения строки дефисами*/

2) concat(Padstring,”\10\13\”,Cstring)

write(Cstring), /*писать в файл*/

writedevice(screen),

readln(Dstring 1) /*считывание очередной строки*/

Index 1 = Index + 40, /*выбор следующей записи*/

write_read(Index 1, Dstring 1).

pad_string(Inst,Inst,Len):- /*Len – длина требуемая = 38*/

str_len(Inst,Test), /*встр. предикат длины строки*/

Test >= Len,!. /*если строка = или длиннее требуемого (38), то программа завершается*/

pad_string(Inst,Padstr,Len):- /*программа заполнения строки дефисами до длины Len(38)*/

concat(Inst,”-”, New),

pad_string(New, Padstr, Len).


Чтение из файла прямого доступа


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

Правило для чтения имеет вид:


read_file :-

openread(datafile,FileName),

readreal(record), /*чтение номера записи*/

filepos(datafile,index,0) Index = (Record-1)*40,

readln(Cstring), readdevice(datafile)

write(Cstring),nl,nl

readdevice(keyboard) /*готовность диалога через клавиатуру*/

readchar(-)

closefile(datafile).

exit.


Проследим, как вычисляется значение переменной Index. Введенный номер записи уменьшается на 1 и умножается на 40. Например, 2 запись (2-1)*40. Значит, с 40 позиции будет прочитана запись длиной 40 и помещена в переменную cstring.


Отметим особенности дружественного интерфейса программ.


readdevice (keyboard) /*предназначено для ведения диалога с пользователем-ожидание, пока не будет нажата какая-нибудь клавиша */

readchar(_)


Заметим, что существует 2 способа считывания данных с клавиатуры:

readln-для чтения данных symbol и string

readchar – для чтения данных посимвольно

в одном и другом случае нужно сцеплять с комбинацией CR-LF, для того, чтобы предикат readln мог читать каждую строку отдельно, а не потоком.

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

Ниже приведено правило ввода данных посимвольно.


1. readin(‘#’):-!. /*правило конца всех записей*/

2. readin(‘\13’):- /*правило ввода признака конца записи*/

write(“\13\10”), /*запись в файл*/

writedevice(screen), /*запись на экран*/

write(“\13\10”),

readchar(c)

writedevice(datafile), /*считывание следующего символа с экрана*/

readin(c). /*любой другой символ*/

3. readin(c):- /*вывод в файл*/

write(c)

writedevice(screen) /*вывод на экран*/

write(c)

readchar(c1) /*ввод с клавиатуры любого символа*/

writedevice(datafile)

readin(c1).


В правило используется, сам вводимый символ – «возврат коретки»


Лекция №7.

Использование динамических баз данных.

План Лекции

  1. иерархическая модель

  2. сетевая модель

  3. реляционная модель



Ключевые слова

иерархическая модель (данные хранятся в иерархии классов), сетевая модель (данные в виде связанных агрегатов, образующих сеть) и реляционная модель (данные в виде таблиц).

Использование динамических баз данных.

Программы баз данных на Прологе есть частный случай систем управления базами данных. Можно выделить три основные модели организации базы данных это: иерархическая модель (данные хранятся в иерархии классов), сетевая модель (данные в виде связанных агрегатов, образующих сеть) и реляционная модель (данные в виде таблиц). Пролог ориентирован на создание баз данных на основе реляционной модели. Для работы с базами данных существует достаточно большой набор встроенных предикатов. Некоторые из них продемонстрированы в примерах 5 и 6.

В Примере 5 происходит загрузка файла базы данных с именем «facts.bd», далее в случае существования объекта с именем Name все факты связанные с этим объектом уничтожаются, после чего база данных на диске обновляется.

Пример 5.

Domains

i = integer s = string

Database

age(s,i)

woman(s)

man(s)

Predicates

start

conclusion(s)

Goal start.

Clauses

start:- existfile("facts.bd"),consult("facts.bd"), % если база существует, то загружаем

makewindow(1,27,57,"",0,0,25,80), % создаем окно на весь экран

/* где 1 - номер окна , 27 - атрибут экрана ( цвет символов )

57 - атрибут рамки ,заголовок окна,

0,0 -координаты верхнего левого угла окна (Y,X),

25,80 -размеры окна по осям Y и X. */

write("Введите имя: "),readln(Name),nl, % вводим искомый объект

conclusion(Name). % переходим к правилу с одноименным заголовком

start.

conclusion(Name):-

woman(Name), % проверка существования объекта с именем Name

retract(age(Name,_)), retract(woman(Name)), % удаляем данные по объекту

save("facts.bd"), % сохраняем базу на диске

write("Данные по объекту ",Name," удалены из базы !"),

readchar(_). % задержка экрана до нажатия любого символа

conclusion(Name):-

not(woman(Name)), % если объект не существует, то выводим сообщение

write("Объект ",Name," отсутствует в базе !"),readchar(_).

/* содержимое файла "facts.bd"

age("Петя",20) age("Таня",10) age("Катя",18)

woman("Таня") woman("Катя")

man("Петя")

*/

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

В примере 6 приведен фрагмент программы, который позволяет сохранить в базе данных на диске текущую дату с подтверждением пользователя. В данном примере используется база данных с именем da1. Обобщенный алгоритм программы такой:

  1. загружается файл базы данных с именем da1;

  1. если факты в базе отсутствуют, то в память заносится факт da("",1);

  1. с помощью системных предикатов считываем текущую дату;

  1. используя встроенный редактор пролога пользователь подтверждает (вводит) текущую дату;

  1. если формат даты правильный, то база данных с именем da1 обновляется.

Пример 6.

Domains i = integer s = string

Database - da1 % описание динамической базы данных с именем da1

da(s,i) % 1-й объект дата,

% 2-й объект - номер пользователя (активно не используется)

Predicates

start % предикат целевого утверждения

dtt % для ввода новой даты

td(i,s) % для проверки правильности ввода с сохранением

Goal start.

Clauses

start:- existfile("da.bd"),consult("da.bd",da1), % загрузка базы в память

makewindow(1,0,0,"",0,0,25,80), dtt, removewindow, !.

start.

dtt:-not(da(_,_)),assert(da("",1)). % если факты отсутствуют в базе, то

% добавляем в память начальный факт

dtt:- da(H1,_), % считываем последнюю дату работы из базы

% определяем текущую дату и выводим ее в заголовке окна редактора

date(G,M,D),str_int(G1,G),str_int(M1,M),str_int(D1,D),

concat("Введите дату (Esc - отказ) [СЕГОДНЯ:",D1,S1),

concat(S1,".",S2),concat(S2,M1,S3),concat(S3,".",S4),

concat(S4,G1,S5),concat(S5," г.]",S6),

makewindow(5,48,91,S6,10,10,4,58),

% используем редактор Пролога

editmsg(H1,H2,"F10 - выход с сохpанением","","",0,"",C),

removewindow,td(C,H2),!.

dtt:-dtt. % используем рекурсию для повторного ввода в случае ошибки

% если дата введена правильно, то обновляем базу данных

td(C,H2):- C=0,str_len(H2,Ld),Ld<9,

frontstr(2,H2,H3,H4),str_int(H3,Nd),Nd>0,Nd<32,

frontstr(1,H4,K1,K2),K1=".", frontstr(2,K2,P1,P2),

str_int(P1,Nm),Nm<13,Nm>0, frontstr(1,P2,J1,J2),J1=".",

frontstr(2,J2,Q1,Q2),str_int(Q1,Ng),Ng>=0,

da(_,Bb), retractall(da(_,_)),assert(da(H2,Bb)),

save("da.bd",da1),!.

td(C,H2):- C=1,!. % если пользователь ничего не ввел, то база не обновляется.


Лекция №8.

Использование списков.

План Лекции

  1. Использование списков.

  2. Программа демонстрации разделения списка на голову и хвост

  3. Преобразование данных в Прологе.



Ключевые слова

  1. доступ к объектам списка;

  1. проверка на принадлежность к списку;

  1. разделение списка на два;

  1. слияние двух списков;

  1. сортировку элементов списка.



Использование списков.

Список является набором связанных объектов одного и того же доменного типа. Объектами списка могут быть целые числа, действительные числа, символы, символьные строки и структуры. Пролог позволяет выполнять со списком целый ряд операций. Их перечень включает:

  1. доступ к объектам списка;

  1. проверка на принадлежность к списку;

  1. разделение списка на два;

  1. слияние двух списков;

  1. сортировку элементов списка.

Основным встроенным механизмом Пролога для работы со списком является метод «разделения списка на голову и хвост». Ниже приведены примеры 7.1 и 7.2 . В одном из них показано, как можно разложить список на элементы, а в другом создать список из множества фактов и сохранить его в базе данных.

Пример 7.1. Программа демонстрации разделения списка на голову и хвост.

Domains i=integer

l=integer* % список целых чисел

Predicates split(l)

sw

Goal makewindow(1,1,7,"",0,0,25,80),sw.

Clauses

sw:- S=[1,2,3,4,5], % соэдаем список

split(S). % обращаемся к правилу разделения списка

% разделение списка с помощью рекурсивного цикла

split([N|S]):-write(N," ",S),nl,readchar(_),fail.

split([]):-write("Список пуст").

split([N|W]):-split(W). % основная идея разделения списка

Пример 7.2. Программа собирает в список все объекты фактов с предикатом bn

Domains i=integer

l=integer* % список целых чисел

Database d(l) % база данных, где объектом в предиката является список

Predicates sw bn(i) fb sp(l)

Goal makewindow(1,1,7,"",0,0,25,80),sw.

Clauses

sw:- assert(d([])), % создаем в памяти факт БД с объектом типа "список"

fb. % переходим к правилу формирования списка

% правила формирования списка с помощью бектрекинга

fb:-bn(N),d(S),sp([N|S]),fail.

sp(S):-retractall(d(_)),assert(d(S)),

write(S," "),readchar(_).

% база фактов непосредственно в тексте программы

bn(1). bn(2).

bn(3). bn(4).

Преобразование данных в Прологе.

Преобразование данных необходимо, если тип объектов встроенного предиката отличается от типа объектов предиката, определенного пользователем. Все предикаты преобразования данных содержат два объекта. Имена предикатов показывают тип выполняемого преобразования , а так же указывают и порядок следования объектов.

Особенностью является то, что предикаты преобразования имеют два направления. Основные виды преобразований представлены в примере 8.

Пример 8.

Predicates

start conv(char,string,integer,real)

Goal start.

Clauses

start:-C='A',S="A",I=65,R=3.14,nl,conv(C,S,I,R).

conv(C,S,I,R):-char_int(C,X),nl,write(X),fail. % X=65

conv(C,S,I,R):-char_int(C1,I),nl,write(C1),fail. C1=A

conv(C,S,I,R):-str_int(S1,I),nl,write(S1),fail. S1=65

conv(C,S,I,R):-str_char(S,C1),char_int(C1,I1),nl,write(I1),fail. % I1=65

conv(C,S,I,R):-str_real(S1,R),nl,write(S1),fail. S1=3.14

Кроме встроенных предикатов преобразования данных пользователь может ввести свои. В примере 9 приведено нестандартное преобразование цифр в соответствующие им слова.

Пример 9.

Predicates

start(string) conv(string,integer)

Goal

start("0123456789").

Clauses

start(S):- frontstr(1,S,S1,S2), % расщепляем строку на элементы

str_int(S1,K),conv(X,K),write(X),nl,start(S2).

% База фактов преобразования

conv("ноль",0). conv("один",1). conv("два",2). conv("три",3).

conv("четыре",4). conv("пять",5). conv("шесть",6). conv("семь",7).

conv("восемь",8). conv("девять",9).

1   2   3   4

Похожие:

Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconО. Л. Молдованова Документационное обеспечение управления
Конспект лекций предназначен для студентов всех форм обучения по специальности 0801110 «Экономика и бухгалтерский учет (по отраслям)»...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа по дисциплине Архитектура вычислительных систем Для специальности 230105(220400) Программное обеспечение вычислительной техники и автоматизированных систем
Рабочая программа составлена в соответствии с гос во по специальности 230105 Программное обеспечение вычислительной техники и автоматизированных...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа По дисциплине “Преддипломная практика" Для специальности 230105 (220400) "Программное обеспечение вычислительной техники и автоматизированных систем"
Гос во по специальности 230105 (220400) – Программное обеспечение вычислительной техники и автоматизированных систем, утвержденного...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа по дисциплине «проектирование систем управления и менеджмента» для специальности 230105 “Программное обеспечение вычислительной техники и автоматизированных систем”
Рабочая программа составлена на основании гос впо для специальности 230105 «Программное обеспечение вычислительной техники и автоматизированных...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 icon«Программное обеспечение ЭВМ и информационные технологии» мгту им. Н. Э. Баумана 2011
В настоящее время кафедра готовит как бакалавров и магистров, так и дипломированных специалистов – инженеров по специальности 2204...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconМетодические указания составлены в соответствии с рабочей программой по дисциплине «Программное обеспечение компьютерных сетей»
...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа По дисциплине “Методы оптимизации" для специальности 230105 "Программное обеспечение вычислительной техники и автоматизированных систем"
По дисциплине “Методы оптимизации" для специальности 230105 "Программное обеспечение вычислительной техники и автоматизированных...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconПрограмма курса «Технологии и языки Internet-программирования» разработана для студентов специальности 1-40 01 01 «Программное обеспечение информационных технологий»
Д. В. Антоник, старший преподаватель кафедры программного обеспечения интеллектуальных и компьютерных систем
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconУчебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем
Базы данных“ для специальности 230105 – программное обеспечение вычислительной техники и автоматизированных систем
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconКонспект лекций по дисциплине «Основы лесоводства и лесной таксации»
Конспект лекций предназначен для студентов заочного отделения указанной специальности
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница