Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 26.06.2010
Сообщений: 23
1

База данных

24.01.2011, 14:04. Показов 1723. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Решаю следующую задачу: В экзаменационной ведомости можно выделить сведения общего назначения (предмет, номер группы, дата экзамена), сведения о человеке (фамилия, номер зачетной книжки, оценка за экзамен). Определите сколько человек не сдали программирование, выдать их списки: фамилия, номер группы. Определите сколько групп сдавали экзамены 11.06.09 и какие, составьте списки студентов, сдавших информатику: фамилия, номер группы, оценка.
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
Domains
name,number_kn,Predmet, data=String
number_group,ozenka=integer
file=f.
Database
Vedomost(name,number_kn,number_group, Predmet,data,ozenka)
Predicates
m(char).
menu.
start.
 
Clauses
start:-
 existfile("Vedomosti.ddb"),!,
 consult("Vedomosti.ddb"),
 menu.
 
start:-
 openwrite(f,"Vedomosti.ddb"),
 closefile(f),
 menu.
  
menu:-
 clearwindow,
 write("1 -"),nl,
 write("2 - "),nl,
 write("3 - Добавление записи"),nl,
 write("4 - Изменение  записи"),nl,
 write("5 - Удаление записи"),nl,
 write("0 - Выход"),nl,
 readchar(C),
 m(C).
 
m('1'):-
 clearwindow,
 
 readchar(_),
 menu.
 
m('2'):-
 
 readchar(_),
 menu.
 
m('3'):-
 clearwindow,
 write("Введите фамилию"),nl,
 readln(name),
 write("Введите номер зачетной книжки"),nl,
 readln(number_kn),
 write("Введите номер групы"),nl,
 readint(number_group),
 write("Введите предмет"),nl,
 readln( Predmet),
 write("Введите дату"),nl,
 readln( data),
 write("Введите оценку "),nl,
 readint(ozenka),
 assert(Vedomost(name,number_kn,number_group, Predmet,data,ozenka)),
 menu.
 
m('4'):-
 clearwindow, 
write("Введите номер зачетной книжки"),nl,
 readln(number_kn),
 write("Введите фамилию"),nl,
 readln(name),
 write("Введите номер групы"),nl,
 readint(number_group),
 write("Введите предмет"),nl,
 readln( Predmet),
 write("Введите дату"),nl,
 readln( data),
 write("Введите оценку "),nl,
 readint(ozenka),
 retract(Vedomost(_,number_kn,_,_,_,_)),
 assertz(Vedomost(name,number_kn,number_group, Predmet,data,ozenka)),
 menu.
 
m('5'):-
 clearwindow,
 write("Введите номер зачетной книжки, запись которой надо удалить"),nl,
 readln(number_kn),
 retract(Vedomost(_,number_kn,_,_,_,_)),
 menu. 
 
m('0'):-
 save("Vedomosti.ddb"),
 retractall(_).
 
m(_):-
 menu.
   
GOAL
Start
Выдает ошибку в следующем месте:
assert(Vedomost(name,number_kn,number_group, Predmet,data,ozenka)),
От 2 переменных работает нормально.
Подскажите как исправить?
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2011, 14:04
Ответы с готовыми решениями:

База данных
Здравствуйте, помогите пожалуйста с данной задачей. Реализуйте программу на языке Пролог. Имеется...

База данных
Некоторое разведывательное управление имеет досье на своих агентов, в котором предусмотрены ...

База данных
Не могу понять как работать с составными объектами можете помочь вот дан вот такой файл уже...

База Данных
Надо создать БД с расписанием движения самолетов: Номер рейса, Пункт отправления, Пункт...

9
1 / 1 / 0
Регистрация: 26.06.2010
Сообщений: 23
25.01.2011, 14:21  [ТС] 2
Подскажите, пожалуйста! Выдает ошибку какую-то дурацкую:ожидается "," или ")".
Что это такое?
0
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
25.01.2011, 14:37 3
Вообще предикаты стоит с маленькой буквы называть, а переменные с большой. Может в турбо на это и не жалуется, но глюки какие-то вызывает. Вот так все компилиться, по крайней мере на визуал
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
Domains
name,number_kn,predmet, data=string
number_group,ozenka=integer
file=f.
Database
vedomost(name,number_kn,number_group, predmet,data,ozenka)
Predicates
m(char).
menu.
start.
 
Clauses
start:-
 existfile("Vedomosti.ddb"),!,
 consult("Vedomosti.ddb"),
 menu.
 
start:-
 openwrite(f,"Vedomosti.ddb"),
 closefile(f),
 menu.
  
menu:-
 write("1 -"),nl,
 write("2 - "),nl,
 write("3 - Äîáàâëåíèå çàïèñè"),nl,
 write("4 - Èçìåíåíèå  çàïèñè"),nl,
 write("5 - Óäàëåíèå çàïèñè"),nl,
 write("0 - Âûõîä"),nl,
 readchar(C),
 m(C).
 
m('1'):-
 
 readchar(_),
 menu.
 
m('2'):-
 
 readchar(_),
 menu.
 
m('3'):-
 write("Ââåäèòå ôàìèëèþ"),nl,
 readln(Name),
 write("Ââåäèòå íîìåð çà÷åòíîé êíèæêè"),nl,
 readln(Number_kn),
 write("Ââåäèòå íîìåð ãðóïû"),nl,
 readint(Number_group),
 write("Ââåäèòå ïðåäìåò"),nl,
 readln( Predmet),
 write("Ââåäèòå äàòó"),nl,
 readln( Data),
 write("Ââåäèòå îöåíêó "),nl,
 readint(Ozenka),
 assert(vedomost(Name,Number_kn,Number_group, Predmet,Data,Ozenka)),
 menu.
 
m('4'):-
write("Ââåäèòå íîìåð çà÷åòíîé êíèæêè"),nl,
 readln(Number_kn),
 write("Ââåäèòå ôàìèëèþ"),nl,
 readln(Name),
 write("Ââåäèòå íîìåð ãðóïû"),nl,
 readint(Number_group),
 write("Ââåäèòå ïðåäìåò"),nl,
 readln( Predmet),
 write("Ââåäèòå äàòó"),nl,
 readln( Data),
 write("Ââåäèòå îöåíêó "),nl,
 readint(Ozenka),
 retract(vedomost(_,Number_kn,_,_,_,_)),
 assertz(vedomost(Name,Number_kn,Number_group, Predmet,Data,Ozenka)),
 menu.
 
m('5'):-
 write("Ââåäèòå íîìåð çà÷åòíîé êíèæêè, çàïèñü êîòîðîé íàäî óäàëèòü"),nl,
 readln(Number_kn),
 retract(vedomost(_,Number_kn,_,_,_,_)),
 menu. 
 
m('0'):-
 save("Vedomosti.ddb"),
 retractall(_).
 
m(_):-
 menu.
   
GOAL
start.
1
1 / 1 / 0
Регистрация: 26.06.2010
Сообщений: 23
26.01.2011, 10:25  [ТС] 4
Спасибо, все работает! БУду дальше делать!

Добавлено через 19 часов 25 минут
Скажите пожалуйста, а можно сделать так чтобы просмотреть все записи БД? В инете посмотрела, ничего похожего не нашла
1
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
26.01.2011, 10:52 5
Можно использовать findall, а можно, если только просмотреть надо
Prolog
1
2
3
all:-vedomost(Name,Number_kn,Number_group, Predmet,Data,Ozenka),
write(Name," ",Number_kn," ",Number_group," ",Predmet," ",Data," ",Ozenka,"\n"),fail.
all.
1
1 / 1 / 0
Регистрация: 26.06.2010
Сообщений: 23
27.01.2011, 09:37  [ТС] 6
Огромное спасибо, что бы я без вас делала!
Еще вопрос: как сделать, что бы выдавалось, что все студенты сдали программирование.
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
m('1'):-
  makewindow(2,7,7,"‘в㤥*вл, *Ґ б¤*ўиЁҐ ЇаҐ¤¬Ґв",4,5,15,65),
 write("‚ўҐ¤ЁвҐ ЇаҐ¤¬Ґв"),
 readln(Predmet),
 p_Predmet(Predmet),
 readchar(_),
 removewindow,
 menu.
 
p_Predmet(Predmet):-
    vedomost(Name,Number_kn,Number_group,Predmet,Data,2),
    write(Name," ",Number_group,"\n"),fail.  
p_Predmet(Predmet).
0
Заблокирован
27.01.2011, 10:45 7
Marisha-Angel, надо попробовать найти студента который программирование не сдал и в случае если такого студента нету - выдать что все сдали

Добавлено через 8 минут
как-то так, например:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
    vedomost(string, integer)
    all
clauses  
    vedomost(ivanov,1).
    vedomost(petrov,1).
    vedomost(sidorov,1).
    
    all:-
        vedomost(_,0),!.
 
goal
    all,write("kto-to ne sdal");
        write("vse sdali").
1
1 / 1 / 0
Регистрация: 26.06.2010
Сообщений: 23
09.02.2011, 14:18  [ТС] 8
Все сделала, но нужно записи базы выводить по блокам. Как это можно реализовать.
0
2 / 2 / 0
Регистрация: 02.02.2011
Сообщений: 13
12.02.2011, 10:50 9
присоединяюсь к ТС! помогите с постраничным, поблочным выводом всей БД.
в обработке пункта меню у меня заносится ФИО например в список и подсчитывается длина списка. так я знаю сколько всего записей, далее я делю целочисленно допустим на 10, и узнаю сколько страничек будет у меня выводится. потом вызываю write_all иии вот в этом правиле не очень работает вывод ( только когда число страниц = 0.

Prolog
1
2
3
4
5
6
7
8
9
      write_all(0,Fio):-
                  duchenik(Fio,Klass,Kuda,Post),
         nl,write(Fio," ",Klass," ",Kuda," ",Post),fail.
      write_all(0,Fio).
      write_all(K,Fio):-
         K<>0,         
         duchenik(Fio,Klass,Kuda,Post),
         nl,write(Fio,Klass,Kuda,Post),fail.
      write_all(K,Fio):- readchar(_),clearwindow.
1
Заблокирован
13.02.2011, 11:29 10
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
domains     
    element=integer
    list=element*
predicates
    outLst(list,integer,integer)
clauses          
    outLst([],_,_):-!.
    outLst(L,0,C):-
        readchar(_),
        clearwindow,
        outLst(L,C,C),!.
    outLst([H|T],V,C):-
        write(H),nl,
        B=V-1,
        outLst(T,B,C).
goal
    L=[1,2,3,4,5,6,7,8,9,0,1,2,3,4,3,2,1,2,3,4,5,6,1,2,3,4,3,5,6,8,7,6,5,4,5,6,7,4,1],
    write(L),nl,outLst(L,10,10),readchar(_).
вывод вывод списка, на страницу выводится 10 элементов списка.

Добавлено через 1 минуту
для вывода аналогично БД, ИМХО надо использовать findall чтобы информацию из БД записать в список.
1
13.02.2011, 11:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2011, 11:29
Помогаю со студенческими работами здесь

База данных в прологе.
Есть база данных семьи. roditel(illy,marina). roditel(marina,ira). roditel(olena,ivan)....

База данных самолетов
Написал программу, для хранения инфы о самолетах, в конце работы сохраняет бд в фаил. Не знаю как...

Динамическая база данных
&quot;Информационно-справочная библиотечная сисетма&quot;. Характеристики книги: ID, автор, название, год...

База данных в Пролог
Ребят, есть текстовый документ,хранящий инфу о студентах. Суть программы в том, чтобы она...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru