Автор работы: Пользователь скрыл имя, 16 Июня 2013 в 00:11, курсовая работа
Prolog — один из старейших и все еще один из наиболее популярных языков логического программирования, хотя он значительно менее популярен, чем основные императивные языки. Он используется в системах обработки естественных языков, исследованиях искусственного интеллекта, экспертных системах, онтологиях и других предметных областях, для которых естественно использование логической парадигмы. Так в данном курсовом проекте реализуется работа со списками, строками и файлами средствами языка Prolog.
ВВЕДЕНИЕ 5
1 Постановка задачи 8
2. теоретическая часть 9
2.1 Общие сведения 9
2.2 Списки 11
2.2 Строки 14
2.2 Файлы 16
3. Структурная схема программы 18
4. ОПИСАНИЕ ПРЕДИКАТОВ 19
5 ТЕКСТ ПРОГРАММЫ 20
6 ТЕСТИРОВАНИЕ ПРОГРАММЫ 26
7 РУКОВОДСТВО ДЛЯ ПОЛЬЗОВАТЕЛЯ 27
ВЫВОДЫ 29
ЛИТЕРАТУРА 30
write(" 4 - Elementi kratnie zadannomu chislu."),nl,
write(" 5 - Soedinenie treh tekstovih failov."),nl,
write(" 6 - Nahozhdenie dvuh korotkih strok v faile."),nl,
write(" 0 - Vihod."),nl,
write(" Please enter: "),
readint(Number),
Number >= 0,
Number < 7,
clearwindow,
selects(Number),
clearwindow,
removewindow.
selects(0):-
makewindow(1,2,7,"Vihod",0,0,
write("Vi uvereni? (1-Da 0-Net) > "),readint(WHAT),
WHAT=1,exit;
WHAT=0, removewindow, createmenu.
selects(1):-
makewindow(1,2,7,"Proga",0,0,
write("Vvedite stroku: "),readln(S),nl,
razbivka(S,S1,S2),write("
write(S1),nl,write(S2),nl,nl,
write("Zhmi chto-nibud:"),readchar(_),
removewindow, createmenu, fail.
selects(2):-
makewindow(1,2,7,"Proga",0,0,
write("Vvedite stroku: "),readln(Str),nl,
proverka(Str,N),
write("Kol-vo cifr v stroke:"),nl,
write(N),nl,nl,
write("Zhmi chto-nibud:"),readchar(_),
removewindow, createmenu,fail.
selects(3):-
makewindow(1,2,7,"Proga",0,0,
write("Vvedite spisok: "),nl,
read_list(L),max(L,Max1),
write("Dva maksimalnih chisla:",Max1),
del_max(Max1,L,L1),
max(L1,Max2),
write(",",Max2),nl,nl,
write("Zhmi chto-nibud:"),readchar(_),
removewindow, createmenu,fail.
selects(4):-
makewindow(1,2,7,"Proga",0,0,
write("Vvedite spisok: "),nl,
read_list(L),
write("Vvedite chislo:"),nl,
readint(N),
kratn(N,L,L1),
write("Kratnie chislu=",N,". Eto: ",L1),nl,nl,
write("Zhmi chto-nibud:"),readchar(_),
removewindow, createmenu,fail.
selects(5):-
read_write,nl,
write("Zhmi chto-nibud:"),readchar(_),
removewindow, createmenu,fail.
selects(6):-
read_write1,nl,
write("Zhmi chto-nibud:"),readchar(_),
removewindow, createmenu.
%selects(1): процедура разбиения строки на две приблизительно одинаковые по границе слова
razbivka(S,S1,S2):-
str_len(S,N),N1=N div 2,
frontstr(N1,S,Str1,Str2),
fronttoken(Str2,Kusok,S2),
concat(Str1,Kusok,S1),!.
%selects(2): процедура подсчета в строке количества цифровых символов
proverka("",0).
proverka(Str,N):-
frontchar(Str,Char,Ost),
Char>='0',Char<='9',proverka(
proverka(Str,N):-
frontchar(Str,Char,Ost),
Char<'0', proverka(Ost,N).
proverka(Str,N):-
frontchar(Str,Char,Ost),
Char>'9', proverka(Ost,N).
%selects(3,4): создание из введенных пользователем строк списка, состоящего из чисел
read_list([H|T]):-readint(H),
read_list([]).
%selects(3): процедура создания второго списка, в котором будет отсутствовать уже найденный первый максимальный элемент
del_max(N,[N|T],T).
del_max(N,[H|T],[H|T1]):-N<>H,
%selects(3): процедура поиска
максимального элемента в
max([A1,A2],A1):-A1>=A2,!.
max([A1,A2],A2):-A1<A2,!.
max([H1,H2|T],Max):-H1>=H2,
max([H1,H2|T],Max):-H1<H2,max(
%selects(4): процедура поиска
в списке чисел кратных
kratn(_,[],[]).
kratn(N,[H|T],[H|T1]):-H mod N = 0,kratn(N,T,T1).
kratn(N,[H|T],T1):-H mod N <> 0,kratn(N,T,T1).
%selects(5): процедура открытия и записи 3 файлов в один
read_write:-
write("Vvedite File1:"),nl,
readln(F1),
write("Vvedite File2:"),nl,
readln(F2),
write("Vvedite File3:"),nl,
readln(F3),
write("Vvedite MainFile:"),nl,
readln(F),
openwrite(tf,F),
writedevice(tf),
file_str(F1,Str1),
file_str(F2,Str2),
file_str(F3,Str3),
concat(Str1,Str2,BuffStr),
concat(BuffStr,Str3,Str),
write(Str),
closefile(tf),
writedevice(screen),
write("File 1:\n", Str1),nl,
write("File 2:\n", Str2),nl,
write("File 3:\n", Str3),nl,
file_str(F,Str4),
write("File 4:\n",Str4),nl.
%selects(6): процедура сбора строк из файла в список
read_list1([H|T]):-not(eof(df)
read_list1([]).
%selects(6): процедура создания второго списка, в котором будет отсутствовать уже найденный первый минимальный элемент
del_min(N,[N|T],T).
del_min(N,[H|T],[H|T1]):-N<>H,
%selects(6): процедура нахождения минимального элемента списка
min([A1,A2],A1):-str_len(A1,
min([A1,A2],A2):-str_len(A1,
min([H1,H2|T],Min):-str_len(
min([H1,H2|T],Min):-str_len(
%selects(6): процедура нахождения
и вывода на экран двух
read_write1:-write("Enter df:"),nl,
readln(F),
openread(df,F),nl,
readdevice(df),
read_list1(L),min(L,Min1),
closefile(df),
writedevice(screen),
file_str(F,Str),
write("Vash file:\n",Str),nl,nl,
write("Dve minimalnie stroki iz faila:\n",Min1),nl,
del_min(Min1,L,L1),
min(L1,Min2),
write(Min2),nl.
В процессе тестирования готовой программы явных ошибок обнаружено не было.
После запуска программы появляется главное меню, из пунктов которого и выбирается та или иная команда. Меню состоит из следующих пунктов:
В результате запуска программы появляется окно главного меню с пунктами выбора нужной операции. Внешний вид окна представлен на рисунке 1.
Рисунок 1 – Главное меню программы
Выбор операции осуществляется
путем нажатия клавиши с
В зависимости от операции, выбранной пользователем, выдается запрос на ввод текстовой строки, списка или пути к рабочему файлу, т.е появляется одно из окон, показанных на рисунке 2.
Рисунок 2 – Варианты запроса для ввода данных пользователем
Ввод строки подтверждается единичным нажатием клавиши “ENTER”. Каждый элемент списка отделяется нажатием “ENTER”, а для окончания ввода следует нажать эту клавишу дважды.
Возврат в главное меню после выполнения текущей операции выполняется нажатием любой клавиши.
ВЫВОДЫ
В результате написания данного
курсового проекта была разработана
программа, позволяющая работать с
различными формами организации
данных. Программа позволяет
Расширенная и доработанная программа, представленная в данном курсовом проекте, может найти широкую область применения в различных сферах обработки и редактирования данных. Причем из-за не большого перечня возможных синтаксических конструкций, программа, написанная на языке Пролог, становится более удобочитаемой и простой для восприятия, а сам язык доступным для изучения.
ЛИТЕРАТУРА