close

Вход

Забыли?

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

?

Kurs barov

код для вставкиСкачать
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РБ
БНТУ
Кафедра ПОВТ и АС
Курсовой проект на тему:
"Работа со списками, строками, файлами"
по курсу "Функциональное и логическое программирование"
Выполнил: студент гр. 107229
Баровский В.
Проверил:Ковальков А.Т.
Минск 2002
Содержание
Введение.........................................................................3
Постановка задачи.............................................................4
Описание предикатов.........................................................5
Текст программы...............................................................7
Тестирование программы....................................................12
Выводы...........................................................................14
Литература......................................................................15
Введение:
Курсовой проект на тему " Работа со списками, строками, файлами " был разработан на языке программирования Turbo Prolog. Данный язык программирования базируется на ограниченном наборе механизмов, включающем в себя сопоставление образцов, древовидное представление структур данных и автоматический возврат. Этот небольшой набор образует удивительно мощный и гибкий программный аппарат. Пролог особенно хорошо приспособлен для решения задач, в которых фигурируют объекты и отношения между ними. Популярность Пролога резко возросла после того, как он был выбран в качестве базового языка японской программы ЭВМ пятого поколения. Спрос на программы искусственного интеллекта, применяемые либо взамен, либо совместно с традиционными прикладными программами, постоянно увеличивается. В ходе продолжающейся эволюции применений вычислительной техники наблюдается все возрастающая потребность в создании прикладных программ на Прологе. Турбо-Пролог может прекрасно удовлетворить такую потребность. Еще одной причиной предпочтительности выбора Турбо-Пролога является то, что написанные на нем программы компилируются, в отличие от других версий Пролога, где программа интерпретируется. Интерпретатор выбирает предложения программы одно за другим и последовательно исполняет их. Компилятор транслирует в машинные коды сразу весь текст программы. Турбо-Пролог транслирует исходный текст программы особенно быстро (быстрее всех других версий Пролога для компьютеров IBM PC). Также он позволяет легко создавать отдельные выполнимые файлы. Постановка задачи.
Разработать программу, которая выполняет следующие операции:
1. Все элементы списка уменьшить на величину минимального элемента списка;
2. Дублирование каждого положительного элемента списка;
3. Из списка слов получить строку, содержащую последовательность слов списка, разделенных запятой и пробелом после запятой;
4. Определить, есть ли в строке числовые символы;
5. Определение средней длины строк в текстовом файле;
6. Удаление из файла строк, с начальными пробелами.
Нужная операция выбирается из меню.
Описание предикатов:
find_min (List,Min)(real*,real): (i,o) - Нахождение в списке List минимального элемента Min.
minus_min (El,List1,List2)(real,real*,real*): (i,i,o) - Уменьшение элементов списка List1 на величину El, где List2 - полученный список.
find_num (Str,Res)(string,string): (i,o) - Проверка в строке Str наличие числовых символов. 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 - список после обработки.
repeat - Организация в программе цикла.
window_work - Главный предикат программы.
make_menu - Создание меню и графического интерфейса.
process(Key)(char): (i) -Создание системы запросов в меню.
make_list (List1,List2)(real*,real*): (i,o) - Дублирование положительных элементов списка List1, List2 - список после обработки.
list_to_str (List,Str)(string*,string): (i,o) - Получение определенной строки Str из списка строк List.
find_sum_len (List,Sum)(string*,integer): (i,o) - Поиск суммы Sum длин строк списка List.
find_count (List,Count)(string*,integer): (i,o) - Поиск количества элементов Count списка List.
Текст программы:
% Курвовой проект студента группы 107229 Баровского В. % Работа со списками, строками, файлами. DOMAINS
list_real=real*
list_str=string*
file=myfile
PREDICATES
% Нахождение в строке минимального элемента
find_min(list_real,real)
% Дублирование положительных элементов списка
make_list(list_real,list_real)
% Получение определенной строки из списка строк
list_to_str(list_str,string)
% Уменьшение элементов списка
minus_min(real,list_real,list_real)
% Проверка наличия в строке числовых символов
find_num(string,string)
% Организация цикла
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)
% Поиск суммы длин строк списка
find_sum_len(list_str,integer)
% Поиск количества элементов списка
find_count(list_str,integer)
% Сохранение списка в файл
save_file(List_str,string)
% Работа со строками, в начале которых есть пробел
str_with_gap(list_str,list_str)
CLAUSES
window_work:-
makewindow(2,15,9,
" Курсовой проект на тему: Работа со списками, сторками, файлами ",
2,2,20,70),
shiftwindow(2),
make_menu,
removewindow.
make_menu:-
repeat,
clearwindow,nl,
write("Выберите нужный пункт меню:"),nl,nl,
write(" 1. Все элементы списка уменьшить на величину"),nl,
write("минимального элемента списка."),nl,
write(" 2. Дублирование каждого положительного элемента списка."),nl,
write(" 3. Из списка слов получить строку, содержащую последовательность"),nl,
write(" слов списка,разделенных запятой и пробелом после запятой."),nl,
write(" 4. Определить, есть ли в строке числовые символы."),nl,
write(" 5. Определение средней длины строк в текстовом файле."),nl, write(" 6. Удаление из файла строк, с начальными пробелами."),nl,
nl,write(" Esc - Выход."),nl,nl,
readchar(C),
process(C),
C=27,!.
process('1'):-
clearwindow,nl,
write(" 1. Все элементы списка уменьшить на величину"),nl,
write("минимального элемента списка."),nl,
write(" Введите список элементов:"),nl,
read_list_r(List1),
find_min(List1,Min),
minus_min(Min,List1,List2),
write(" Минимальный элемент списка: ",Min),nl,
write(" Полученный список: "),nl,
write(List2),
readchar(_),!.
process('2'):-
clearwindow,nl,
write(" 2. Дублирование каждого положительного элемента списка."),nl,
write(" Введите список элементов:"),nl,
read_list_r(List1),
make_list(List1,List2),
write(" Полученный список: "),nl,
write(List2), readchar(_),!.
process('3'):-
clearwindow,nl,
write(" 3. Из списка слов получить строку, содержащую последовательность"),nl,
write(" слов списка,разделенных запятой и пробелом после запятой."),nl,
write(" Введите список строк: "),nl,
read_list(List),
list_to_str(List,Str),
write(" Полученная строка: ",Str),nl,
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, work_file(List,_),
find_sum_len(List,Sum),
find_count(List,Count),
Sred=Sum/Count,
write(" Средняя длина строк равна ",Sred),nl,
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.
find_num("","Нет.").
find_num(Str,"Есть."):-
frontchar(Str,C,_),
char_int(C,I),
I1=I-48,
I1>=0,
I1<=9,!.
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).
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_min([S],S).
find_min([S1,S2],S1):-
S1<=S2.
find_min([S1,S2],S2):-
S1>S2.
find_min([H1,H2|T],Min):-
H1<=H2,
find_min([H1|T],Min).
find_min([H1,H2|T],Min):-
H1>H2,
find_min([H2|T],Min).
minus_min(_,[],[]).
minus_min(Min,[H1|T1],[H2|T2]):-
H2=H1-Min,
minus_min(Min,T1,T2).
make_list([],[]).
make_list([H|T1],[H,H|T2]):-
H>0,
make_list(T1,T2).
make_list([H|T1],[H|T2]):-make_list(T1,T2).
list_to_str([],"").
list_to_str([A],A).
list_to_str([H|T],Str):-
list_to_str(T,Ost),
concat(", ",Ost,Str1),
concat(H,Str1,Str).
find_count([],0).
find_count([_|T],N):-
find_count(T,N1),
N=N1+1.
find_sum_len([],0).
find_sum_len([H|T],N):-
find_sum_len(T,N1),
str_len(H,Len),
N=N1+Len.
GOAL
window_work
Тестирование программы.
После запуска программы появляется окно, содержащее название программы и имя и фамилия разработчика, а также появляется меню с шестью пунктами. Пользователь может выбрать один из пунктов меню для решения поставленной задачи. Выберите нужный пункт меню:
1. Все элементы списка уменьшить на величину
минимального элемента списка.
2. Дублирование каждого положительного элемента списка.
3. Из списка слов получить строку, содержащую последовательность
слов списка,разделенных запятой и пробелом после запятой.
4. Определить, есть ли в строке числовые символы.
5. Определение средней длины строк в текстовом файле.
6. Удаление из файла строк, с начальными пробелами.
Esc - Выход.
1. Все элементы списка уменьшить на величину
минимального элемента списка.
Введите список элементов:
12
23
3
2
43
Минимальный элемент списка: 2
Полученный список:
[10,21,1,0,41]
2. Дублирование каждого положительного элемента списка.
Введите список элементов:
34
-5
-45
4
54
Полученный список:
[34,34,-5,-45,4,4,54,54]
3. Из списка слов получить строку, содержащую последовательность
слов списка, разделенных запятой и пробелом после запятой.
Введите список строк:
привет
как
дела
хорошо
Полученная строка: привет, как, дела, хорошо
4. Определить, есть ли в строке числовые символы.
Введите строку: павпаврпарпа
Полученный результат: Нет.
Введите строку: вапа4апавпавпав авп
Полученный результат: Есть.
5. Определение средней длины строк в текстовом файле.
Введите имя файла: myfile.txt
Средняя длина строк равна 7.6
6. Удаление из файла строк, с начальными пробелами.
Введите имя файла: myfile1.txt
Исходные строки:
go
my boy.
fschool
to.
football.
girle
Полученные строки:
my boy.
fschool
football.
girle
Выводы:
Данная программа может быть использована как подключаемый модуль, если требуется работа со списками, строками, файлами. Реализованные в ней алгоритмы можно использовать как в имеющемся виде, так и в переделанном. Также можно позаимствовать с этой программы реализованный интерфейс и использовать его при разработке других программ или модулей. Одним из способов усовершенствования программы является создание многооконного приложения с усовершенствованной системой подсказок и работой с различными типами данных.
Литература.
Янсон А. Использование ТурбоПролога в сжатом изложении. Москва << Мир >> 1991.
Братко И. Программирование на языке Пролог для искусственного интеллекта. Москва << Мир >> 1990.
2
Документ
Категория
Рефераты
Просмотров
43
Размер файла
64 Кб
Теги
kurs, baro
1/--страниц
Пожаловаться на содержимое документа