0 / 0 / 0
Регистрация: 18.01.2011
Сообщений: 8

Код Turbo Prolog переделать в Visual Prolog 5.2

19.04.2016, 15:05. Показов 3855. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста переделать код Turbo Prolog в Visual Prolog 5.2
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
domains
st=st(string,real,real,real,real)
st1=st1(string,real)
List1=st1*
List=st*
database
dstudent(st)
predicates
result
repeat
menu
point(char)
print_av_down(List1)
max_el(List1,st1)
del_el(List1,st1,List1)
av_mark(List1,real,integer)
preobr(List,List1)
print_al_down(List1,real)
sort(List1,List1)
ins(st1,List1,List1)
retract_all
print_bad
clauses
repeat.
repeat:-repeat.
retract_all:-retract(dstudent(_)),fail.
retract_all.
menu:-clearwindow,
write(«Main menu»),nl,
write(«1-Add students to database»),nl,
write(«2-View list of students by average mark»),nl,
write(«3-View list of students sorted by alphabet with marks higher average mark»),nl,
write(«4-View list of students with bad marks»),nl,
write(«5-View database»),nl,
write(«6-About program»),nl,
write(«0-Exit from program»),nl,
write(«Your choice is: «),readchar(X),point(X),!,fail.
point('1'):-clearwindow,write(«Input student's surname: «),
readln(Surname),write(«Input first mark: «),readint(Mark1),
write(«Input second mark:»),readint(Mark2),
write(«Input third mark: «),readint(Mark3),
write(«Input fourth mark: «),readint(Mark4),
assertz(dstudent(st(Surname,Mark1,Mark2,Mark3,Mark4))),fail.
point('2'):-clearwindow,write(«Surname \t Average mark»),nl,
findall(S,dstudent(S),List1),preobr(List1,List),print_av_down(List),
nl,nl,write(«Press any key»),readchar(_).
point('3'):-clearwindow,write(«Surname \t Average mark»),nl,
findall(S,dstudent(S),List1),preobr(List1,List),av_mark(List,Sum,N),
sort(List,List2),
AvMark=Sum/N,print_al_down(List2,AvMark),nl,nl,
write(«Average mark is:»,AvMark),nl,nl,
write(«Press any key»),
readchar(_).
point('4'):-clearwindow,write(«Surname \t marks»),nl,print_bad,nl,nl,
write(«Press any key»),readchar(_).
point('5'):-clearwindow,save(«Database»),file_str(«Database»,Str),
write(«Surname \t Average marks»),nl,write(Str),nl,nl,
write(«Press any key»),readchar(_).
point('6'):-clearwindow,
write(«This program has been made by student of BSPA Khramtsov V.V. group 107219»),
nl,nl,write(«Press any key»),readchar(_).
point('0'):-save(«Database»),retract_all,removewindow,exit.
print_bad:-dstudent(st(Surname,Mark1,Mark2,Mark3,Mark4)),Mark1=2,
write(Surname,»\t»,Mark1,» «,Mark2,» «,Mark3,» «,Mark4),nl,fail.
print_bad:-dstudent(st(Surname,Mark1,Mark2,Mark3,Mark4)),Mark2=2,
write(Surname,»\t»,Mark1,» «,Mark2,» «,Mark3,» «,Mark4),nl,fail.
print_bad:-dstudent(st(Surname,Mark1,Mark2,Mark3,Mark4)),Mark3=2,
write(Surname,»\t»,Mark1,» «,Mark2,» «,Mark3,» «,Mark4),nl,fail.
print_bad:-dstudent(st(Surname,Mark1,Mark2,Mark3,Mark4)),Mark4=2,
write(Surname,»\t»,Mark1,» «,Mark2,» «,Mark3,» «,Mark4),nl,fail.       
print_bad.
print_av_down([]).
print_av_down(List):-max_el(List,El),del_el(List,El,List1),
El=st1(Surname,AvMark),write(Surname,»   «,AvMark),nl,
print_av_down(List1).
max_el([H],H).
max_el([H|T],El):-max_el(T,El1),El1=st1(_,AvMark),H=st1(_,AvMark1),
AvMark>AvMark1,El=El1.
max_el([H|T],El):-max_el(T,El1),El1=st1(_,AvMark),H=st1(_,AvMark1),
AvMark<=AvMark1,El=H.
del_el([],_,[]):-!.
del_el([H|T],El,T):-H=El,!.
del_el([H|T],El,[H|T1]):-del_el(T,El,T1).
preobr([],[]).
preobr([H|T],[H1|T1]):-preobr(T,T1),H=st(Surname,Mark1,Mark2,Mark3,Mark4),
AvMark=(Mark1+Mark2+Mark3+Mark4)/4,H1=st1(Surname,AvMark).
av_mark([],0,0).
av_mark([H|T],Sum,N):-av_mark(T,Sum1,N1),N=N1+1,H=st1(_,AvMark),
Sum=Sum1+AvMark.
print_al_down([],_).
print_al_down([H|T],AvMark):-H=st1(Surname,AvMark1),AvMark1>AvMark,
write(Surname,»\t»,AvMark1),nl,print_al_down(T,AvMark).
print_al_down([_|T],AvMark):-print_al_down(T,AvMark).
sort([],[]).
sort([H|T],After):-sort(T,Before),ins(H,Before,After).
ins(E,[],[E]).
ins(E,[H|T],[H|T1]):-H=st1(Surname,_),E=st1(Surname1,_),
Surname<Surname1,ins(E,T,T1).
ins(E,[H|T],[E,H|T]).
result:-existfile(«Database»),consult(«Database»),
makewindow(1,7,7,»Database»,0,0,25,80),repeat,menu.
result:-makewindow(1,7,7,»Database»,0,0,25,80),repeat,menu.
goal
result.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2016, 15:05
Ответы с готовыми решениями:

Пожалуйста, помоите переделать программу с Turbo Prolog на Visual Prolog
DOMAINS l_i=integer* l_s=string* i=integer s=string c=char structura=str(i,s) %Структура Порода-Параметры и его список ...

Перевести код из turbo prolog в visual prolog
не подскажите плиз как будет выглядеть код turbo prolog в Visual Prologe 7.3 turbo prolog: predicates for(integer,integer) ...

Перевести код из turbo prolog в visual prolog
не подскажите плиз как будет выглядеть код turbo prolog в Visual Prologe 5.2 turbo prolog: domains int=integer intl=int* ...

8
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
19.04.2016, 18:38
Будьте любезны, запустите проект и приведите список ошибок.

Для начала, вероятно, надо будет убрать все обращения к устаревшим предикатам: makewindow() и clearwindow

Добавлено через 55 минут
Еще забыл removewindow

Вы из Word копировали? Все кавычки побились.. Меняйте вордовские кавычки на обычные

Всем предикатам, на которые компилятор ругается, поставить nondeterm

Вместо раздела database написать раздел global database

Вынести st из раздела domains в новый раздел global domains
1
0 / 0 / 0
Регистрация: 18.01.2011
Сообщений: 8
20.04.2016, 14:36  [ТС]
Спасибо, программа запускается, но окно не активно и еще выдает ошибки:
Unused local predicate: menu
Unused local predicate: process и т д
Помогите пожалуйста

Добавлено через 39 минут
Спасибо Вам огромное, ошибок нет, но в заголовке окна запуска пишет Inactive и путь к файлу. Может я что-то не так делаю, помогите пожалуйста
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
21.04.2016, 04:03
У меня не выдаёт. Что-то Вы не так сделали.

Пишите новый код, обязательно окружите его тэгами, для этого используйте кнопочку PROLOG (она прямо над окошком с текстом)

Приложите скрин окна, которое Inactive
0
0 / 0 / 0
Регистрация: 18.01.2011
Сообщений: 8
21.04.2016, 14:26  [ТС]
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
include "student.inc"
 
domains
    st1=st1(string,real)
    List1=st1*
    List=st*
 
global domains
    st=st(string,integer,integer,integer,integer)
 
global database
    dstudent(st)
 
predicates
    nondeterm result
    nondeterm menu
    nondeterm process(char)
    nondeterm repeat
    
    nondeterm print_av_down(List1)
    nondeterm max_el(List1,st1)
    nondeterm del_el(List1,st1,List1)
    nondeterm av_mark(List1,short,integer)
    nondeterm preobr(List,List1)
    nondeterm print_al_down(List1,real)
    nondeterm sort(List1,List1)
    nondeterm ins(st1,List1,List1)
    nondeterm retract_all
    nondeterm print_bad
 
clauses
    repeat.
    repeat:-repeat.
    retract_all:-retract(dstudent(_)),fail.
    retract_all.
    menu:-
        write("Main menu"),nl,
        write("1-Add students to database"),nl,
        write("2-View list of students by average mark"),nl,
        write("3-View list of students sorted by alphabet with marks higher average mark"),nl,
        write("4-View list of students with bad marks"),nl,
        write("5-View database"),nl,
        write("6-About program"),nl,
        write("0-Exit from program"),nl,
        write("Your choice is: "),readchar(X),process(X),!.
    process(1):-
        write("Input student's surname: "),readln(Surname),
        write("Input first mark: "),readint(Mark1),
        write("Input second mark:"),readint(Mark2),
        write("Input third mark: "),readint(Mark3),
        write("Input fourth mark: "),readint(Mark4),
        assertz(dstudent(st(Surname,Mark1,Mark2,Mark3,Mark4))),fail.
        
    process(2):-
        write("Surname \t Average mark"),nl,
        findall(S,dstudent(S),List1),preobr(List1,List),print_av_down(List),nl,nl,
        write("Press any key"),readchar(_).
        
    process(3):-
        write("Surname \t Average mark"),nl,
        findall(S,dstudent(S),List1),preobr(List1,List),av_mark(List,Sum,N),
        sort(List,List2),
        AvMark=Sum/N,print_al_down(List2,AvMark),nl,nl,
        write("Average mark is:",AvMark),nl,nl,
        write("Press any key"),readchar(_).
        
    process(4):-
        write("Surname \t marks"),nl,print_bad,nl,nl,
        write("Press any key"),readchar(_).
        
    process(5):-
        save("Database"),file_str("Database",Str),
        write("Surname \t Average marks"),nl,write(Str),nl,nl,
        write("Press any key"),readchar(_).
        
    process(6):-
        write("This program has been made by student Vladimirova E.A. group 30701112"),
        nl,nl,write("Press any key"),readchar(_).
        
    process(0):-
        save("Database"),retract_all,exit.
    
    print_bad:-
        dstudent(st(Surname,Mark1,Mark2,Mark3,Mark4)),Mark1=2,
        write(Surname,"\t",Mark1," ",Mark2," ",Mark3," ",Mark4),nl,fail.
    print_bad:-
        dstudent(st(Surname,Mark1,Mark2,Mark3,Mark4)),Mark2=2,
        write(Surname,"\t",Mark1," ",Mark2," ",Mark3," ",Mark4),nl,fail.
    print_bad:-
        dstudent(st(Surname,Mark1,Mark2,Mark3,Mark4)),Mark3=2,
        write(Surname,"\t",Mark1," ",Mark2," ",Mark3," ",Mark4),nl,fail.
    print_bad:-
        dstudent(st(Surname,Mark1,Mark2,Mark3,Mark4)),Mark4=2,
        write(Surname,"\t",Mark1," ",Mark2," ",Mark3," ",Mark4),nl,fail.       
    print_bad.
    
    print_av_down([]).
    print_av_down(List):-max_el(List,El),del_el(List,El,List1),
    El=st1(Surname,AvMark),write(Surname,"   ",AvMark),nl,
    print_av_down(List1).
    
    max_el([H],H).
    max_el([H|T],El):-max_el(T,El1),El1=st1(_,AvMark),H=st1(_,AvMark1),
    AvMark>AvMark1,El=El1.
    max_el([H|T],El):-max_el(T,El1),El1=st1(_,AvMark),H=st1(_,AvMark1),
    AvMark<=AvMark1,El=H.
    
    del_el([],_,[]):-!.
    del_el([H|T],El,T):-H=El,!.
    del_el([H|T],El,[H|T1]):-del_el(T,El,T1).
    
    preobr([],[]).
    preobr([H|T],[H1|T1]):-preobr(T,T1),H=st(Surname,Mark1,Mark2,Mark3,Mark4),
    AvMark=(Mark1+Mark2+Mark3+Mark4)/4,H1=st1(Surname,AvMark).
    
    av_mark([],0,0).
    av_mark([H|T],Sum,N):-av_mark(T,Sum1,N1),N=N1+1,H=st1(_,AvMark),
    Sum=Sum1+AvMark.
    
    print_al_down([],_).
    print_al_down([H|T],AvMark):-H=st1(Surname,AvMark1),AvMark1>AvMark,
    write(Surname,"\t",AvMark1),nl,print_al_down(T,AvMark).
    print_al_down([_|T],AvMark):-print_al_down(T,AvMark).
    
    sort([],[]).
    sort([H|T],After):-sort(T,Before),ins(H,Before,After).
    
    ins(E,[],[E]).
    ins(E,[H|T],[H|T1]):-H=st1(Surname,_),E=st1(Surname1,_),
    Surname<Surname1,ins(E,T,T1).
    ins(E,[H|T],[E,H|T]).
    
    result:-existfile("Database"),consult("Database"),repeat,menu.
        
goal
    result.
Миниатюры
Код Turbo Prolog переделать в Visual Prolog 5.2  
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
21.04.2016, 17:13
А куда Вы дели ту строку исходного кода, где файла не существует?
У Вас же было два правила для result, а осталось только одно.
Файла нет - и ничего не срабатывает.

Добавьте после строки 133
Prolog
1
result :- repeat, menu.
1
0 / 0 / 0
Регистрация: 18.01.2011
Сообщений: 8
21.04.2016, 21:27  [ТС]
Добавила, программа заработала, меню появляется, но если выбрать любой пункт меню ничего не происходит.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
21.04.2016, 23:05
Параметрами process должны быть char, то есть '1', '2', '3', как в оригинале.
А у Вас 1, 2, 3 - без апострофов
1
0 / 0 / 0
Регистрация: 18.01.2011
Сообщений: 8
24.04.2016, 12:05  [ТС]
Спасибо Вам огромное. Все получилось, все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2016, 12:05
Помогаю со студенческими работами здесь

Как переделать программу написанную на Turbo-Prolog в SWI-Prolog?
Ребята подскажите пожалуйста как переделать эту программу написанную на Turbo-Prolog в SWI-Prolog? domains i=integer il=i* ...

Из Turbo Prolog в Visual Prolog - где будут отличия в коде?
ребята ,помогите. есть прога на турбо прологе,а нужно отредактировать под visual prolog 7.5. Что изменится? Где отличия?.. ниже...

[Turbo Prolog] [Visual Prolog] Задача на рекурсию
Здравствуйте, помогите, пожалуйста, с такой задачей... Имеется горсть из N Монет C1,C2,....,Cn различного достоинства. Определить,...

Turbo prolog 2.0 - > Visual Prolog 8
Помогите перевести код из турбо в вижуал 8 задачу о козе, волке и капусте domains slist=string* state=wgc(string, slist,...

Turbo Prolog -> Visual Prolog
Всем привет! Помогите переделать маленький код с Turbo Prolog в Visual Prolog. Задача была следующая: Воронов. Панков. Левин и Сахаров...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru