Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Нужно переделать программу из Turbo Prolog в Visual Prolog
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Hedgehok Hedgehok вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.05.2015
По умолчанию Нужно переделать программу из Turbo Prolog в Visual Prolog - 09.05.2015, 02:37

Доброго времени суток!
Нужно переделать программу из Turbo Prolog в Visual Prolog. Пробовал убирать предикаты для работы с окнами, после отладки программа работает не корректно. В Прологе не силен, поэтому и обращаюсь к вам.

Постановка задачи:
На вход программы идут два текстовых файла F1.txt и F2.txt. F1.txt содержит строки для поиска. F2.txt содержит текст по которому нужно вести поиск. В качестве результата работы должен создаваться файл Out.txt, содержащий число строк файла F2.txt, в которых была найдена существующая подстрока из файла F1.txt.

Пример:
F1.tx---F2.txt---Out.txt
a------abba-----3
bc-----caba-----1
c------bca------2
bb-----bbb------2

Код:
prolog Код:
domains
  file = f.
 
predicates
  repeat                                    % цикл повтора
  readin(string,string)                     % запись строки в файл
  readline(integer,integer,string)          % вывод строки из файла
  kol1(integer,integer)                     % число строк в первом файле
  kol2(integer,integer)                     % число строк во втором файле
  read_and_print                            % вывод содержимого файла на экран
  x_in_y(string,string,integer,integer)     %проверка
  create_out(integer,integer,integer,integer,integer,integer)    
  show_menu                                 %меню
  process(integer)  
 
clauses
  % цикл повтора
  repeat.
  repeat :- repeat.
 
  % процесс ввода информации в файл
  readin("Stop",_) :- !.
  readin(_,Fstr) :- write(Fstr),readln(Str),concat(Str,"\13\10",Fstr1),
                    readin(Str,Fstr1).
                   
  % вывод информации из файла
  read_and_print :- not(eof(f)),readln(Fstr),
                    write(Fstr),nl,writedevice(screen),
                    read_and_print.
  read_and_print :- eof(f),!.
 
  % число строк во втором файле
  kol2(N,M) :- K=N+1,readln(_),kol2(K,M).
  kol2(N,M) :- eof(f),M=N.
 
  % число строк в первом файле
  kol1(N,MM) :- K=N+1,readln(_),kol1(K,MM).
  kol1(N,MM) :- eof(f),MM=N.
 
  % вывод строки из файла
  readline(K,N,Str) :- not(eof(f)),K=N,readln(Str).%write(Str),nl.
  readline(K,N,Str) :- not(eof(f)),K1=K+1,readln(_),readline(K1,N,Str).    
 
  % проверка
  x_in_y(Str1,Str2,Nout,Nout1) :- str_len(Str1,N),str_len(Str2,NN),
                    NN=N,Str1=Str2,Nout1 = Nout+1.
  x_in_y(Str1,Str2,Nout,Nout1) :- str_len(Str1,N),str_len(Str2,NN),
                    NN=N,Str1<>Str2,Nout1=Nout.
  x_in_y(Str1,Str2,Nout,Nout1) :- str_len(Str1,N),str_len(Str2,NN),
                    NN<N,Nout1=Nout.                
  x_in_y(Str1,Str2,Nout,Nout1) :- str_len(Str1,N),str_len(Str2,NN),
                    NN>N,N1=N-1,frontstr(N1,Str1,S,_),
                    frontstr(N1,Str2,T,_),S=T,Nout1 = Nout+1.
  x_in_y(Str1,Str2,Nout,Nout1) :- str_len(Str1,N),str_len(Str2,NN),
                    NN>N,N1=N-1,frontstr(N1,Str1,S,_),
                    frontstr(N1,Str2,T,T1),S<>T,concat(T,T1,Z),
                    frontstr(1,Z,_,Z1),x_in_y(Str1,Z1,Nout,Nout1).                
 
  % запись информации в Out.txt
  create_out(X,Y,Nout,M,MM,Nout1) :- Y1=Y+1,Y1<=M,openread(f,"F1.txt"),
                    readdevice(f),readline(1,X,Str1),closefile(f),
                    openread(f,"F2.txt"),readdevice(f),readline(1,Y1,Str2),
                    closefile(f),x_in_y(Str1,Str2,Nout,Nout1),
                    create_out(X,Y1,Nout1,M,MM,_).
  create_out(X,Y,Nout,M,MM,Nout1) :- Y1=Y+1,Y1>M,X<>1,X<=MM,
                    str_int(Str,Nout),concat(Str,"\13\10",Fstr1),
                    openappend(f,"Out.txt"),writedevice(f),
                    write(Fstr1),closefile(f),X1=X+1,X1<=MM,
                    create_out(X1,0,0,M,MM,Nout1).
  create_out(1,Y,Nout,M,MM,Nout1) :- Y1=Y+1,Y1>M,str_int(Str,Nout),
                    concat(Str,"\13\10",Fstr1),openwrite(f,"Out.txt"),
                    writedevice(f),write(Fstr1),closefile(f),X1=2,X1<=MM,
                    create_out(X1,0,0,M,MM,Nout1).
  create_out(_,_,_,_,_,_) :- !.
 
  % меню  
  show_menu :- repeat,makewindow(1,7,7,"Главное меню.",5,5,15,55),
                    nl,write("0 - выход"),
                    nl,write("1 - создать первый файл"),
                    nl,write("2 - создать второй файл"),
                    nl,write("3 - вывести третий файл на экран"),
                    nl,nl,write("Нажмите одну из цифр : "),
                    readint(X),X<4,process(X).
               
  process(0) :- nl,nl,write("Выход из меню. "),!.
 
  process(1) :- makewindow(2,7,7,"Текстовый файл F1.txt.",5,5,15,55),
                    write("Строка 'Stop' показывает конец файла"),
                    openwrite(f,"F1.txt"),writedevice(f),readln(Str),
                    concat(Str,"\13\10",Fstr),readin(Str,Fstr),
                    closefile(f),removewindow,show_menu.
 
  process(2) :- makewindow(3,7,7,"Текстовый файл F2.txt.",5,5,15,55),
                    write("Строка 'Stop' показывает конец файла"),
                    openwrite(f,"F2.txt"),writedevice(f),readln(Str),
                    concat(Str,"\13\10",Fstr),readin(Str,Fstr),
                    closefile(f),removewindow,show_menu.
  process(3) :- makewindow(4,7,7," F1.txt.",5,1,15,15),
                    openread(f,"F1.txt"),readdevice(f),read_and_print,
                    closefile(f),
                    makewindow(4,7,7," F2.txt.",5,17,15,15),
                    openread(f,"F2.txt"),readdevice(f),read_and_print,
                    closefile(f),makewindow(4,7,7," Out.txt.",5,33,15,25),
                    openread(f,"F1.txt"),readdevice(f),kol1(0,MM),
                    closefile(f),openread(f,"F2.txt"),readdevice(f),
                    kol2(0,M),closefile(f),create_out(1,0,0,M,MM,_),
                    openread(f,"Out.txt"),readdevice(f),read_and_print,
                    closefile(f),write("Нажмите любую клавишу : "),
                    readdevice(keyboard),readchar(_),removewindow,
                    removewindow,removewindow,
                    show_menu.
 
goal
  show_menu.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос консольной программы с Turbo Prologa в Visual Prolog - Заказать программу Vladisliv Prolog 4 10.01.2015 19:19
Нужно перевести код из Turbo Prolog в Visual Prolog 5.2 Irina1094 Prolog 8 30.11.2014 22:52
Переписать программу из SWI-Prolog в Visual Prolog enulinum Задания за деньги 1 29.05.2014 02:32
Нужно перевести код из Turbo Prolog в Visual Prolog GGHz Prolog 7 08.12.2012 19:46
Помогите пожалуйста переделать програму для анализа текста под Visual Prolog 7.3. den4iklev4enko Prolog 1 13.11.2012 21:18
код из turbo prolog в visual prolog posleg Prolog 4 13.06.2011 00:33
Помогите переделать задачу из Turbo Prolog в Visual Prolog 5 imported_Anneta Prolog 3 23.12.2010 22:59
Помогите переделать программу из Turbo в SWI-PROLOG armoko Prolog 0 25.05.2010 13:46
Кто возьмется переписать маленькую программу с Turbo Prolog на Visual Prolog 5.0 (за плату) olik567 Prolog 4 07.10.2009 17:46
Кто возьмется переписать маленькую программу с Turbo Prolog на Visual Prolog 5.0 (за плату) Игоревна Задания за деньги 16 04.01.2008 17:20
Нужно решить задачу на TURBO-PROLOG Надюшка Prolog 6 12.10.2006 22:28
Как переделать Prolog-D на Turbo-Prolog Anonymous Prolog 19 02.01.2004 20:05



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов