Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Prolog] Анализатор текста, Анализатор текста 
V
    Опции темы
kresh
Дата 19.4.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 1.1.2008
Где: Минск

Репутация: нет
Всего: нет



Всем привет! Вот очередной семестр и блин начали изучать пролог(чудесный язык прогараммирования) ,но вот только что-то не не идет он у меня не могу перестроиться с С++ на Пролог,поэтой причине прошу вашей помощи в написании программы по лабораторной работе 

Написать программу анализатор текста

которая для указанного текстового файла выполняет следущие операции:

-вывод содержимого файла на экран
-подсчет количества строк в файле
-вывод из текстового файла строки с заданным номером
-вывод самой короткой строки
-подсчет сколько раз в файле встречается заданный символ
-вывод строк,в которых встречаются числовые данные
-поиск в файле заданного слова

 smile 

заранее благодарю! smile 
--------------------
Спросит вас продавец в магазине формулу Гаусса-Остроградского... А вы ее не знаете!
PM MAIL   Вверх
kresh
Дата 12.1.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 1.1.2008
Где: Минск

Репутация: нет
Всего: нет



19.4.2008, 21:51  с этого времени не нашлось ни одного знатока prolog smile  smile 
--------------------
Спросит вас продавец в магазине формулу Гаусса-Остроградского... А вы ее не знаете!
PM MAIL   Вверх
Фантом
Дата 12.1.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 7
Всего: 49



Ну почему же? Просто:
1) Это не "помощь в написании", это просто написание. Почему кто-то должен делать за Вас Вашу работу?
2) Код значительной части всего этого зависит от используемого Вами транслятора, который Вы не удосужились сообщить.
PM   Вверх
kresh
  Дата 19.2.2011, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 1.1.2008
Где: Минск

Репутация: нет
Всего: нет



вот текст программы,может кому поможет smile 
Код

DOMAINS /* раздел описания доменов */
F_N = String
file=f
N,C, M = integer
database -db
files(string)
database -summ
summ(integer)
database -summ1
summ1(integer)
database -shot
shot(string)
database -viv
timer(integer)
PREDICATES
m(char) /* этот предикат реализует выполнение
соответствующего пункта меню */
menu /* этот предикат реализует вывод меню и
обработку выбора пользователя */
start(String) /* этот предикат проверяет наличие файла
с базой на диске и либо загружает
факты из нее во внутреннюю базу данных,
если такой файл существует, либо создает
этот файл, если его не было */
write_file(string)
write_file_main()
nakop(char,char)
file_rek(file,char)
sbor(char)
fwriteF(char,integer)
rep(FILE)
readline(FILE)
sb
malen
readshot(FILE)
prov(string)
sh(string)
muStr(integer)
viv(FILE,integer)
stroka(integer,string,integer)
chis
chisla(file)
chis_sr(char)
chet(char)
chis_v
CLAUSES
menu:-
makewindow(1,2,7,"Работа с файлом",0,0,25,80),
clearwindow, /* очистка текущего окна */
write("1 - Вывести файл"),nl,
write("2 - Число вхождений символа"),nl,
write("3 - Число строк в файле"),nl,
write("4 - Самая короткая строка"),nl,
write("5 - Вывести заданную строку"),nl,
write("6 - Вывести все строки в которых есть числа"),nl,
write("0 - Выйти"),nl,
readchar(C), /* читаем символ с клавиатуры */
m(C). /* вызываем выполнение соответствующего пункта
меню */
m('6'):-
clearwindow,
chis,
chis_v,
retractall(_,summ1),
readchar(_), /*Ждем ввода любого символа*/
menu.
m('2'):-
clearwindow,
write("Введите символ"),nl,
readchar(C),
sbor(C),
readchar(_),
menu.
m('3'):- /*считает количество строк*/
clearwindow,
sb,
readchar(_),
menu.
m('4'):-
clearwindow,
malen,
readchar(_),
menu.
m('1'):-
clearwindow,
write_file_main(),
readchar(_),
menu.
m('5'):-
clearwindow,
write("Введите номер строки"),
readint(I),
muStr(I),
readchar(_),
menu.
m('0'):-
clearwindow,
removewindow.
m(_):-
menu. /* если пользователь по ошибке нажал клавишу,
отличную от тех, реакция на которые
предусмотрена, ничего плохого
не произойдет, будет отображено меню
еще раз */
write_file(f):-
not(eof(f)),!, /*пока не конец файла выполняем ...*/
readchar(C),/*Cчитываем символ*/
write(C), /*выводим символ*/
write_file(f). /*повторям*/
write_file(_).
write_file_main():- /*Предикат вывода файла*/
files(F_N), /*Читаем в переменную имя файла*/
openread(f,F_N), /*Открываем файл на чтение*/
readdevice(f), /*Перенаправляем устройство чтения, из файла*/
write_file(f), /*Вызываем выше описаный предикат*/
closefile(f), /*Закрываем файл*/
readdevice(keyboard). /*Перенаправляем устройство чтения, с клавиатуры*/
write_file_main().
/***********************************************/
nakop(_,_).
nakop(C,Ch):-
C=Ch,!, /*Если символ введеный пользователем совпал с символом в файле*/
summ(M), /*берем значение из БЗ*/
NewM=M+1, /*Увелчиваем на 1*/
retract(summ(M)), /*удаляем предыдущее значение*/
assert(summ(NewM)). /*записываем новое*/
file_rek(f,C):-
rep(f), /*Предикат осуществляющий повторение действий до тех пор пока не закончится файл*/
readchar(Ch), /*Читаем символ из файла*/
nakop(C,Ch),
fail.
file_rek(_,_).
fwriteF(C,M):-
write("Символ '",C,"' встречается ",M ," раз"), /*выводим на экран результат*/
fail.
fwriteF(_,_).
sbor(C):- /*Предикат вывода числа вхождений символа в файл*/
files(F_N),
assert(summ(0)), /*вводим во внутреннюю БЗ 0*/
openread(f,F_N),
readdevice(f),
file_rek(f,C),
summ(M),
fwriteF(C,M), /*предикат для вывода результатов*/
closefile(f),
retract(summ(_),summ), /*обнуляем БЗ*/
readdevice(keyboard).
sbor(_).
/*************************************************/
sb:- /*Предикат подсчета количества строк в файле*/
files(F_N),
assert(summ(0)),
openread(f,F_N),
readdevice(f),
readline(f),
summ(Int),
write("Количество строк в файле: ", Int), /*Вывод результатов на экран*/
closefile(f),
retract(summ(_),summ),
readdevice(keyboard).
sb.
readline(f):-
rep(f),
readln(_), /*читаем строку из файла*/
summ(Int),
NeM=Int+1, /*Увеличиваем предыдущее значение на 1*/
retract(summ(Int)),
assert(summ(NeM)), /*Записываем новое значение*/
fail.
readline(_).
rep(_). /*предикат для осуществления цикла перемещения по файлу*/
rep(f):- not(eof(f)),rep(f).
/*************************************************/
malen:- /*Предикат определения самой короткой строки*/
files(F_N),
assert(summ(0)),
assert(shot("")), /*Задаем начальное значение*/
openread(f,F_N),
readdevice(f),
readshot(f),
shot(Str),
write("Самая короткая строка: ", Str),
closefile(f),
retract(shot(_),shot),
retract(summ(_),summ),
readdevice(keyboard).
malen.
prov(_).
prov(Ln):-
str_len(Ln,Int), /*Узнем длину строки*/
summ(Sum), /*Берем текущее значение строки*/
Sum>Int,!, /*Если строка короче то записываем ее и ее длину в соотв. БЗ*/
retract(summ(Sum)),
assert(summ(Int)),
shot(Str),
retract(shot(Str)),
assert(shot(Ln)).
sh(Ln):- /*Проверяем, если в базе нет строк, то записываем текущую, и ее длинну*/
shot(Str),
Str="",!,
retract(shot(Str)),
assert(shot(Ln)),
summ(Int),
retract(summ(Int)),
str_len(Ln,Sum),
assert(summ(Sum)).
sh(_).
readshot(f):-
rep(f),
readln(Ln), /*Читаем строку*/
sh(Ln),
prov(Ln),
fail.
readshot(_).
/**********************************************/
muStr(I):- /*предикат вывода строки по номеру*/
files(F_N),
assert(summ(1)),
assert(shot("")),
openread(f,F_N),
readdevice(f),
viv(f,I),
shot(Str),
write("Строка номер ",I," :",Str),
write('\n'),
closefile(f),
retract(shot(_),shot),
retract(summ(_),summ),
readdevice(keyboard).
muStr(_).
stroka(I,Ln,Int):-
I=Int,!, /*Если номер строки совпадает с введенным то записываем ее в БЗ*/
shot(Str),
retract(shot(Str)),
assert(shot(Ln)).
stroka(_,_,_).
viv(f,I):-
rep(f),
readln(Ln),
summ(Int), /*берем номер текущей строки*/
stroka(I,Ln,Int),
Nint=Int+1, /*увеличиваем счетчик текущей строки на 1*/
retract(summ(Int)),
assert(summ(Nint)),
fail.
viv(_,_).
/*******************************************/
chis:- /*Предикат вывода строк с числовыми данными*/
files(F_N),
assert(timer(0)),
openread(f,F_N),
readdevice(f),
chisla(f),
closefile(f),
retract(timer(_),viv),
readdevice(keyboard).
chis.
chis_v:- /*Предикат вывода найденных строк*/
summ1(I), /*Берем значение из БЗ*/
muStr(I), /*Подставляем в описаный ранее предикат Нахождения строки по заданному номеру*/
fail. /*и переходим к следующему значению БЗ*/
chis_v.
chet(C):-
C='\n',!, /*Проверяем , если текущий символ конец строки то увеличиваем счетчик строк на 1*/
timer(Int),
M=Int+1,
retract(timer(Int)),
assert(timer(M)).
chet(_).
chis_sr(C):-
char_int(C,Num), /*Берем его числовой код*/
chet(C),
Num>=48,Num<=57,!, /*если текущий символ является цифрой*/
readln(_), /*считываем всю оствщуюся строку*/
timer(Int),
retract(timer(Int)), /*увеличиваем счетчик текущей строки на 1, и записываем номер строки в БЗ*/
M=Int+1,
assert(timer(M)),
assert(summ1(Int)).
chis_sr(_).
chisla(f):-
rep(f),
readchar(C),/*читаем символ*/
chis_sr(C),
fail.
chisla(_).
/*******************************************/
start(F_N):-
existfile(F_N),!, /* если файл существует */
assert(files(F_N),db),
menu. /* вызываем меню */
start(_):-
write("Файл не найден, попробуйте еще раз"),nl,
readln(F_N1),
start(F_N1).
GOAL /* раздел внутренней цели*/
write("Input file name"),nl,
readln(F_N),
start(F_N).



TURBO PROLOG 2.0

Это сообщение отредактировал(а) kresh - 19.2.2011, 23:54

Присоединённый файл ( Кол-во скачиваний: 26 )
Присоединённый файл  FILEF1.PRO 8,59 Kb
--------------------
Спросит вас продавец в магазине формулу Гаусса-Остроградского... А вы ее не знаете!
PM MAIL   Вверх
russya
Дата 25.12.2014, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 25.12.2014

Репутация: нет
Всего: нет



Спасибо большое за программу! а может есть еще ПЗ к ней?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1146 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.