close

Вход

Забыли?

вход по аккаунту

?

Kurs basal

код для вставкиСкачать
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РБ
БНТУ
Кафедра ПОВТ и АС
Курсовой проект на тему:
"Работа со списками, строками, файлами"
по курсу "Функциональное и логическое программирование"
Выполнил: студент гр. 107219
Басалыга В. В.
Проверил:Ковальков А.Т.
Минск 2002
Содержание
Введение.........................................................................3
Постановка задачи.............................................................4
Описание предикатов.........................................................5
Текст программы...............................................................7
Тестирование программы...................................................12
Выводы..........................................................................15
Литература......................................................................16
Введение:
Курсовой проект на тему " Работа со списками, строками, файлами " был разработан на языке программирования Turbo Prolog. Данный язык программирования базируется на ограниченном наборе механизмов, включающем в себя сопоставление образцов, древовидное представление структур данных и автоматический возврат. Этот небольшой набор образует удивительно мощный и гибкий программный аппарат. Пролог особенно хорошо приспособлен для решения задач, в которых фигурируют объекты и отношения между ними. Популярность Пролога резко возросла после того, как он был выбран в качестве базового языка японской программы ЭВМ пятого поколения. Спрос на программы искусственного интеллекта, применяемые либо взамен, либо совместно с традиционными прикладными программами, постоянно увеличивается. В ходе продолжающейся эволюции применений вычислительной техники наблюдается все возрастающая потребность в создании прикладных программ на Прологе. Турбо-Пролог может прекрасно удовлетворить такую потребность. Еще одной причиной предпочтительности выбора Турбо-Пролога является то, что написанные на нем программы компилируются, в отличие от других версий Пролога, где программа интерпретируется. Интерпретатор выбирает предложения программы одно за другим и последовательно исполняет их. Компилятор транслирует в машинные коды сразу весь текст программы. Турбо-Пролог транслирует исходный текст программы особенно быстро (быстрее всех других версий Пролога для компьютеров IBM PC). Также он позволяет легко создавать отдельные выполнимые файлы. Постановка задачи:
Разработать программу, которая выполняет следующие операции:
> Удаление из списка каждого третьего элемента.
> Уменьшение всех элементов списка на величину максимального элемента этого списка.
> Нахождение в строке слов, в которых имеется заданный символ.
> Подсчет в строке количества цифровых символов.
> Сортировка строк текстового файла в порядке увеличения их длины.
> Удаление из текстового файла строк, заканчивающихся пробелом.
Нужная операция выбирается из меню.
Описание предикатов:
find_max (List,Max)(real*,real): (i,o) - Нахождение в списке List самого длинного слова Max.
del_tree (List1,List2)( string*, string*): (i,o) - Удаление каждого третьего элемента списка List1, где List2 - полученный спиок.
minus_max (El,List1,List2)(real,real*,real*): (i,i,o) - Уменьшение элементов списка List1 на величину El, где List2 - полученный спиок.
find_word (C,Str,List)(char,string,string*): (i,i,o) - Поиск списка слов List в строке Str по заданному параметру C.
is_char (C,Str,Ans)(char,string,char): (i,i,o) - Проверка наличия в строке Str заданного символа C, где Ans - ответ программы.
find_num (Str,Res)(string,integer): (i,o) - Подсчет в строке Str количества цифровых символов Res.
work_file (List,Name)( string*,string): (o,o) - Загрузка данных из файла Name в список List. save_file (List,Name)( string*,string): (i,i) - Сохранение списка List в файл Name. read_list (List)( string*): (o) - Чтение списка типа string. read_list_r (List)(string*): (o) - Чтение списка типа real.
write_list (List)( string*): (i) - Печать списка строк List.
work_file (List,Name)( string*,string): (o) - Загрузка данных из файла Name в список List.
str_with_gap (List1,List2)(string*, string*): (i,o) - Работа со строками, в которых есть точки, где List1 - входной список, List2 - список после обработки.
sort (List1,List2)( string*, string*): (i,o) - Сортировка списка List1.
insert (El,List1,List2)(string, string*, string*): (i,i,o) - Вставка элемента El в список List1.
repeat - Организация в программе цикла.
window_work - Главный предикат программы.
make_menu - Создание меню и графического интерфейса.
process(Key)(char): (i) -Создание системы запросов в меню .
Текст программы:
DOMAINS
list_real=real*
list_str=string*
file=myfile
PREDICATES
% Нахождение в строке самого длинного слова
find_max(list_real,real)
% Удаление каждого третьего элемента списка
del_tree(list_str,list_str)
% Уменьшение элементов списка
minus_max(real,list_real,list_real)
% Поиск слов по заданному параметру
find_word(char,string,list_str)
% Проверка наличия в строке заданного символа
is_char(char,string,char)
% Подсчет в строке цифровых символов
find_num(string,integer)
% Организация цикла
repeat
% Основной предикат
window_work
% Организация меню
make_menu
process(char)
% Чтение списка
read_list(list_str)
read_list_r(list_real)
% Печать списка
write_list(list_str)
% Загрузка файла
work_file(list_str,string)
% Сохранение списка в файл
save_file(List_str,string)
% Работа со строками, в начале которых есть пробел
str_with_gap(list_str,list_str)
% Сортировка списка
sort(list_str,list_str)
% Вставка элемента в список
insert(string,list_str,list_str)
CLAUSES
window_work:-
makewindow(2,11,3,
" Курсовой проект на тему: Работа со списками, сторками, файлами ",
2,2,20,70),
shiftwindow(2),
make_menu,
removewindow.
make_menu:-
repeat,
clearwindow,nl,
write("Выберите нужный пункт меню:"),nl,nl,
write(" 1. Удаление из списка каждого третьего элемента."),nl,
write(" 2. Уменьшение всех элементов списка на величину"),nl,
write("максимального элемента этого списка."),nl,
write(" 3. Нахождение в строке слов, в которых имеется заданный символ."),nl,
write(" 4. Подсчет в строке количества цифровых символов."),nl,
write(" 5. Сортировка строк текстового файла в порядке"),nl, write(" увеличения их длины."),nl,
write(" 6. Удаление из текстового файла строк, заканчивающихся пробелом."),nl,
nl,write(" Esc - Выход."),nl,nl,
readchar(C),
process(C),
C=27,!.
process('1'):-
clearwindow,nl,
write(" 1. Удаление из списка каждого третьего элемента."),nl,
write(" Введите список элементов:"),nl,
read_list(List1),
del_tree(List1,List2),
write(" Полученный список: "),nl,
write(List2),
readchar(_),!.
process('2'):-
clearwindow,nl,
write(" 2. Уменьшение всех элементов списка на величину"),nl,
write("максимального элемента этого списка."),nl,
write(" Введите список элементов:"),nl,
read_list_r(List1),
find_max(List1,Max),
minus_max(Max,List1,List2),
write(" Максимальный элемент: ",Max),nl,
write(" Полученный список: "),nl,
write(List2), readchar(_),!.
process('3'):-
clearwindow,nl,
write(" 3. Нахождение в строке слов, в которых имеется заданный символ."),nl,
write(" Введите строку: "),
readln(Str),
write(" Введите символ: "),
readln(Chr1),
str_char(Chr1,Chr),
find_word(Chr,Str,List),
write(" Полученный список слов: "),nl,
write(List),
readchar(_),!.
process('4'):-
clearwindow,nl,
write(" 4. Подсчет в строке количества цифровых символов."),nl,
write(" Введите строку: "),
readln(Str),
find_num(Str,Res),
write(" Полученный результат: ",Res),nl,
readchar(_),!.
process('5'):-
clearwindow,nl,
write(" 5. Сортировка строк текстового файла в порядке"),nl, write(" увеличения их длины."),nl,
work_file(List1,Name),
write(" Строки до сортировки:"),nl,
write_list(List1),
sort(List1,List2),
write(" Отсортированный список:"),nl,
write_list(List2),
save_file(List2,Name),
readchar(_),!.
process('6'):-
clearwindow,nl,
write(" 6. Удаление из текстового файла строк, заканчивающихся пробелом."),nl,
work_file(List1,Name),
write(" Исходные строки:"),nl,
write_list(List1),
str_with_gap(List1,List2),
write(" Полученные строки: "),nl,
write_list(List2),
save_file(List2,Name),
readchar(_),!.
process(27):-!.
process(_):-
write(" Ошибка ввода."),
readchar(_),!.
repeat.
repeat:-repeat.
del_tree([],[]).
del_tree([A],[A]).
del_tree([A,B],[A,B]).
del_tree([A,B,_|T1],[A,B|T2]):-del_tree(T1,T2).
find_num("",0).
find_num(Str,N):-
frontchar(Str,C,Ost),
char_int(C,I),
I1=I-48,
I1>=0,
I1<=9,
find_num(Ost,N1),
N=N1+1.
find_num(Str,N):-
frontChar(Str,_,Ost),
find_num(Ost,N).
work_file(List,Namefile):-
write("Введите имя файла: "),
readln(Namefile),
existfile(Namefile),
openread(myfile,Namefile),
readdevice(myfile),
read_list(List),
readdevice(keyboard),
closefile(myfile);
write(" Указанный файл не существует."),nl,
work_file(List,Namefile).
save_file(List,Namefile):-
openwrite(myfile,Namefile),
writedevice(myfile),
write_list(List),
writedevice(screen),
closefile(myfile).
read_list([H|T]):-
readln(H),
H<>"",
read_list(T).
read_list([]).
read_list_r([H|T]):-
readreal(H),
read_list_r(T).
read_list_r([]).
write_list([]).
write_list([H|T]):-
write(H),nl,
write_list(T).
sort([],[]).
sort([H|T],L_posle):-
sort(T,L_do),
insert(H,L_do,L_posle).
insert(E,[],[E]).
insert(S,[H|T1],[H|T2]):-
str_len(S,Len_s),
str_len(H,Len_h),
Len_s>Len_h, insert(S,T1,T2).
insert(S,[H|T],[S,H|T]):-
str_len(S,Len_s),
str_len(H,Len_h),
Len_s<=Len_h.
str_with_gap([],[]).
str_with_gap([H1|T1],[H1|T2]):-
frontchar(H1,C,_),
C<>' ',
str_with_gap(T1,T2).
str_with_gap([_|T1],T2):-str_with_gap(T1,T2).
find_max([S],S).
find_max([S1,S2],S1):-
S1>S2.
find_max([S1,S2],S2):-
S1<=S2.
find_max([H1,H2|T],Max):-
H1>H2,
find_max([H1|T],Max).
find_max([H1,H2|T],Max):-
H1<=H2,
find_max([H2|T],Max).
minus_max(_,[],[]).
minus_max(Max,[H1|T1],[H2|T2]):-
H2=H1-Max,
minus_max(Max,T1,T2).
find_word(_,"",[]).
find_word(C,Str,[H|T]):-
fronttoken(Str,H,Ost),
is_char(C,H,Ans),
Ans='y',
find_word(C,Ost,T),!.
find_word(C,Str,T):-
fronttoken(Str,_,Ost),
find_word(C,Ost,T).
is_char(_,"",'n').
is_char(C1,Str,'y'):-
frontchar(Str,C2,_),
C1=C2,!.
is_char(C,Str,Ans):-
frontchar(Str,_,Ost),
is_char(C,Ost,Ans).
GOAL
window_work
Тестирование программы:
После запуска программы появляется окно, содержащее название программы и имя и фамилия разработчика, а также появляется меню с шестью пунктами. Пользователь может выбрать один из пунктов меню для решения поставленной задачи.
Выберите нужный пункт меню:
1. Удаление из списка каждого третьего элемента.
2. Уменьшение всех элементов списка на величину
максимального элемента этого списка.
3. Нахождение в строке слов, в которых имеется заданный символ.
4. Подсчет в строке количества цифровых символов.
5. Сортировка строк текстового файла в порядке
увеличения их длины.
6. Удаление из текстового файла строк, заканчивающихся пробелом.
Esc - Выход. 1. Удаление из списка каждого третьего элемента.
Введите список элементов:
1
2
3
4
3
2
4
Полученный список:
["1","2","4","3","4"]
2. Уменьшение всех элементов списка на величину
максимального элемента этого списка.
Введите список элементов:
2
5
3
6
4
7
Максимальный элемент: 7
Полученный список:
[-5,-2,-4,-1,-3,0]
3. Нахождение в строке слов, в которых имеется заданный символ.
Введите строку: mama papa little vova
Введите символ: a
Полученный список слов:
["mama","papa","vova"]
4. Подсчет в строке количества цифровых символов.
Введите строку: app434ly54my9845ple987ase
Полученный результат: 12
5. Сортировка строк текстового файла в порядке
увеличения их длины.
Введите имя файла: myfile.txt
Строки до сортировки:
gfhgfhgf
dfgfdgh
uytu
gfh
gngh
gfhgfhgfhgf
Отсортированный список:
uytu
gfh
gngh
gfhgfhgf
dfgfdgh
gfhgfhgfhgf
6. Удаление из текстового файла строк, заканчивающихся пробелом.
Введите имя файла: myfile.txt
Исходные строки:
uytu
gfh
gngh
gfhgfhgf
dfgfdgh
gfhgfhgfhgf
Полученные строки:
uytu
gfhgfhgf
gfhgfhgfhgf
Выводы:
Данная программа может быть использована как подключаемый модуль, если требуется работа со списками, строками, файлами. Реализованные в ней алгоритмы можно использовать как в имеющемся виде, так и в переделанном. Также можно позаимствовать с этой программы реализованный интерфейс и использовать его при разработке других программ или модулей. Одним из способов усовершенствования программы является создание многооконного приложения с усовершенствованной системой подсказок и работой с различными типами данных.
Литература.
Янсон А. Использование ТурбоПролога в сжатом изложении. Москва << Мир >> 1991.
Братко И. Программирование на языке Пролог для искусственного интеллекта. Москва << Мир >> 1990.
2
Документ
Категория
Рефераты
Просмотров
47
Размер файла
64 Кб
Теги
kurs, basal
1/--страниц
Пожаловаться на содержимое документа