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

Делаю лабораторные работы по прологу. Имею вот такой код изначально. Задача состоит:
Модифицируйте программу, добавив в меню пункты:
1) Вывод списка игроков.
2) Сохранение данных в файл.
3) Выборка данных по 1 из трех критериев.
У меня получилось сразу сделать охранение бд в файл.

Visual Prolog Код:
Domains
p_name,k_name, pos, college = string p_number, height, weight, nfl_exp = integer
Database
dplayer(p_name, k_name,p_number,pos, height,weight,nfl_exp, college)
Predicates repeat do_mbase
assert_database menu process(integer) clear_database
player(p_name, k_name,p_number,pos, height,weight,nfl_exp, college) error
Goal
do_mbase.
Clauses
repeat.
repeat:-repeat.
/*База данных футбол*/
player("Иванов Иван","Спартак",13,"з", 205,90,3, "ГГПИ").
player("Петров Петр","Динамо",96,"пз", 185,78,4, "ГТК").
player("Сидоров Денис","Локомотив",69,"в", 190,88,2, "ГТУ").
player("Васечкин Илья","Торпедо",5,"в", 195,80,5, "ГГПИ").
player("Алексеев Дима","ЦСКА",1,"н", 165,67,2, "ГТК").
player("Карпов Павел","Зенит",12,"н",170,74,1, "ГКК").
/*конец начальных данных*/ assert_database:-
player(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp,College), assertz(dplayer(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp,
College)),
fail. assert_database:-!.
 
clear_database:-
retract(dplayer(_,_,_,_,_,_,_,_)), fail.
clear_database:-!. do_mbase :-
assert_database,
makewindow(1,7,7," FOOTBALL DATABASE ",0,0,25,80),
menu, clear_database.
menu :-
repeat, clearwindow, nl,
write(" ************************************* "),nl, write(" * 1. Добавление нового игрока в БД * "),nl, write(" * 2. Удаление игрока из БД   * "),nl, write(" * 3. Просмотр данных * "),nl,
write(" * 4. Выход из программы * "),nl, write(" ************************************* "),nl, write(" Пожалуйста, сделайте свой выбор 1, 2, 3 or 4 : "),
readint(Vibor),nl,process(Vibor),Vibor = 4,!.
/* Добавление информации об игроке в БД */ process(1) :-
makewindow(2,7,7,"Добавление данных",2,20,18,58),shiftwindow(2), write("Введите, пожалуйста:"),nl,
write("Имя игрока: "), readln(P_name), write("Название клуба: "), readln(K_name), write("Номер игрока: "), readint(P_num), write("Позицию: "), readln(Pos),
 
write("Рост: "), readint(Ht),
write("Вес: "), readint(Wt),
write("Стаж выступлений: "), readint(Exp), write("Название учебного заведения: "), readln(College),
assertz(dplayer(P_name, K_name, P_num,Pos,Ht,Wt,Exp, College)), write(P_name," добавлен в БД"), nl,!,
write("Press space bar. "), readchar(_), removewindow, shiftwindow(1).
/* Удаление */ process(2) :-
makewindow(3,7,7,"Удаление данных",10,30,7,40),shiftwindow(3), write("Введите имя удаляемого игрока: "), readln(P_name), retract(dplayer(P_name,_,_,_,_,_,_,_)),
write(P_name," удален из БД "), nl, !,
write("Press space bar."), readchar(_), removewindow, shiftwindow(1).
/* Просмотр данных об игроке*/ process(3) :-
makewindow(4,7,7," Просмотр ", 7,30,16,47), shiftwindow(4), write("Введите имя для просмотра: "), readln(P_name), dplayer(P_name,T_name,P_number,Pos,Ht,Wt,Exp,College),nl, write(" Имя игрока  : ",P_name),nl,
write(" Название клуба  : ",T_name),nl, write(" Номер игрока    : ",P_number),nl, write(" Позиция   : ",Pos),nl,
write(" Рост    : ",Ht), nl,
write(" Вес : ",Wt),nl, write(" Стаж выступлений    : ",Exp), nl,
write(" Учебное заведение   : ",College),nl, nl,!, write("Press space bar"), readchar(_), removewindow, shiftwindow(1).
process(3) :-
makewindow(5,7,7," Неудача ",14,7,5,60), shiftwindow(5), write("К сожалению, данных нет."),nl,
write("Извините, пока!"),nl,!, write("Press space bar."),readchar(_), removewindow,shiftwindow(1).
/* Выход */ process(4) :-
write("До новых встреч! "),readchar(_),exit.
/*Обработка ошибки*/ process(Vibor):-
Vibor<1, error; Vibor>5, error. error:-
write("Пожалуйста выберите число от 1 до 4"), write("(Press the spase bar to continue)"),readchar(_).

Visual Prolog Код:
Domains
  p_name, k_name, pos, college = string
  p_number, height, weight, nfl_exp = integer
Database
  dplayer(p_name, k_name, p_number, pos, height, weight, nfl_exp, college)
 
  Predicates
    repeat
    do_mbase
    assert_database
    menu
    process(integer)
    clear_database
    player(p_name, k_name, p_number,pos,height,weight,nfl_exp,college)
    error
  Goal  
  do_mbase.
Clauses
  repeat.
  repeat if repeat.
      player("Ivanov Ivan", "Spartak",13,"centerdf",205,90,3,"GGPI").
      player("Petrov Petr", "Dinamo",96,"dfright",185,78,4,"GTK").
      player("Sidorov Denis","Locomotiv",69,"V",190,88,2,"GTU").
      player("Vasechkin Ilya","Torpedo",5,"V",195,80,5,"GGPI").
      player("Alekseev Dima","CKA",1,"n",165,67,2,"GTK").
      player("Karpov Pavel","Zenit",12,"n",170,74,1,"GKK").
     
        assert_database if
        player(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp,College),
        assertz(dplayer(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp,College)),fail.
        assert_database if !.
       
         clear_database if !.
          do_mbase if
            assert_database,
            makewindow(1,7,7," FOOTBALL DATABASE ",0,0,25,80),
            menu,
            clear_database.
        menu if
             repeat,clearwindow,nl,
             write(" *********************************** "),nl,
             write(" * 1. Add new player in database   * "),nl,
             write(" * 2. Delete player of database    * "),nl,
             write(" * 3. Watching database            * "),nl,
             write(" * 4. Save Database                * "),nl,
             write(" * 5. Exit programm                * "),nl,
             write(" *********************************** "),nl,
             write(" Please, make your choice 1, 2, 3,4 or 5 : "),
             readint(Vibor),nl,process(Vibor),Vibor = 5,!.
             
                process(1) if
                          makewindow(2,7,7,"Dobavlenie dannix",2,20,18,58),shiftwindow(2),
                          write("Write, please:"),nl,
                          write("Player name: "), readln(P_name),
                          write("Name of club: "), readln(K_name),
                          write("Player number: "), readint(P_num),
                          write("Position: "), readln(Pos),
                          write("Height: "), readint(Ht),
                          write("Weight: "), readint(Wt),
                          write("Game years: "), readint(Exp),
                          write("Name of college: "), readln(College),
                          assertz(dplayer(P_name, K_name, P_num,Pos,Ht,Wt,Exp,College)),
                          write(P_name," Added in database"), nl,!,
                          write("Press space bar. "), readchar(_),
                          removewindow, shiftwindow(1).
                              process(2) if
                                        makewindow(3,7,7,"Delete databaase",10,30,7,40),shiftwindow(3),
                                        write("Write a delete player name: "), readln(P_name),
                                        retract(dplayer(P_name,_,_,_,_,_,_,_)),
                                        write(P_name," Deleted in database "), nl, !,
                                        write("Press space bar."), readchar(_), removewindow,
                                        shiftwindow(1).
                                       
                process(3) if makewindow(4,7,7," Watching ",7,30,16,47), shiftwindow(4),
                write(" Name for wattching: "), readln(P_name),
                dplayer(P_name,T_name,P_number,Pos,Ht,Wt,Exp,College),nl,
                write(" Player name   : ",P_name),nl,
                write(" Name of club  : ",T_name),nl,
                write(" Player number : ",P_number),nl,
                write(" Position      : ",Pos),nl,
                write(" Height        : ",Ht),nl,
                write(" Weight        : ",Wt),nl,
                write(" Game years    : ",Exp),nl,
                write(" University    : ",College),nl,nl,!,
                write(" Press space bar"), readchar(_),
                removewindow, shiftwindow(1).                  
     process(3) if
       makewindow(5,7,7," Unluck ",14,7,5,60), shiftwindow(5),
       write("Nope Database "),nl,
       write("Goodbuy "),nl,!,
       write("Press the space bar,"),readchar(_),
       removewindow,shiftwindow(1).
     process(4) if
     write("Enter filename: "), readln(Fname), save(Fname),menu.
       
     process(5) if
         write(" See comeback "), readchar(_),exit.
         
           process(Vibor) if
             Vibor < 1, error; Vibor>6, error.
      error if
          write("Please take a nubmer 1 to 5"),
          write(" (Press the space bar to continue)"),readchar(_).

Последний раз редактировалось Винитарх; 12.11.2017 в 20:43
Ответить с цитированием
  (#2 (permalink)) Старый
Jumi17 Jumi17 вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.11.2017
По умолчанию 12.11.2017, 15:53

А вот с остальным возникли проблемы. В итоге получила вот такой код, выводит ошибку 415 перед Process5, Clauses for the same predicate should be grouped.
Visual Prolog Код:
Domains
  p_name, k_name, pos, college = string
  p_number, height, weight, nfl_exp = integer
  list = int*
 
Database
  dplayer(p_name, k_name, p_number, pos, height, weight, nfl_exp, college)
 
  Predicates
    repeat
    do_mbase
    assert_database
    menu
    process(integer)
    clear_database
    player(p_name, k_name, p_number,pos,height,weight,nfl_exp,college)
    error
    typerec(char)
    findquation4(char)
    findPos(symbol)
    findUnik(symbol)
    findYear(integer)
   
   
   
    find(string)
  Goal  
  do_mbase.
Clauses
  repeat.
  repeat if repeat.
      player("Ivanov Ivan", "Spartak",13,"centerdf",205,90,3,"GGPI").
      player("Petrov Petr", "Dinamo",96,"dfright",185,78,4,"GTK").
      player("Sidorov Denis","Locomotiv",69,"V",190,88,2,"GTU").
      player("Vasechkin Ilya","Torpedo",5,"V",195,80,5,"GGPI").
      player("Alekseev Dima","CKA",1,"n",165,67,2,"GTK").
      player("Karpov Pavel","Zenit",12,"n",170,74,1,"GKK").
     
        assert_database if
        player(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp,College),
        assertz(dplayer(P_name,K_name,P_number,Pos,Height,Weight,Nfl_exp,College)),fail.
        assert_database if !.
       
         clear_database if !.
          do_mbase if
            assert_database,
            makewindow(1,7,7," FOOTBALL DATABASE ",0,0,25,80),
            menu,
            clear_database.
        menu if
             repeat,clearwindow,nl,
             write(" *********************************** "),nl,
             write(" * 1. Add new player in database   * "),nl,
             write(" * 2. Delete player of database    * "),nl,
             write(" * 3. Watching database            * "),nl,
             write(" * 4. Find player                  * "),nl,
             write(" * 5. All players list             * "),nl,
             write(" * 6. Save Database                * "),nl,
             write(" * 7. Exit programm                * "),nl,
             write(" *********************************** "),nl,
             write(" Please, make your choice 1, 2, 3, 4, 5, 6 or 7 : "),
             readint(Vibor),nl,process(Vibor),Vibor = 7,!.
             
                process(1) if
                          makewindow(2,7,7,"Dobavlenie dannix",2,20,18,58),shiftwindow(2),
                          write("Write, please:"),nl,
                          write("Player name: "), readln(P_name),
                          write("Name of club: "), readln(K_name),
                          write("Player number: "), readint(P_num),
                          write("Position: "), readln(Pos),
                          write("Height: "), readint(Ht),
                          write("Weight: "), readint(Wt),
                          write("Game years: "), readint(Exp),
                          write("Name of college: "), readln(College),
                          assertz(dplayer(P_name, K_name, P_num,Pos,Ht,Wt,Exp,College)),
                          write(P_name," Added in database"), nl,!,
                          write("Press space bar. "), readchar(_),
                          removewindow, shiftwindow(1).
                              process(2) if
                                        makewindow(3,7,7,"Delete databaase",10,30,7,40),shiftwindow(3),
                                        write("Write a delete player name: "), readln(P_name),
                                        retract(dplayer(P_name,_,_,_,_,_,_,_)),
                                        write(P_name," Deleted in database "), nl, !,
                                        write("Press space bar."), readchar(_), removewindow,
                                        shiftwindow(1).
                                       
                process(3) if makewindow(4,7,7," Watching ",7,30,16,47), shiftwindow(7),
                write(" Name for wattching: "), readln(P_name),
                dplayer(P_name,T_name,P_number,Pos,Ht,Wt,Exp,College),nl,
                write(" Player name   : ",P_name),nl,
                write(" Name of club  : ",T_name),nl,
                write(" Player number : ",P_number),nl,
                write(" Position      : ",Pos),nl,
                write(" Height        : ",Ht),nl,
                write(" Weight        : ",Wt),nl,
                write(" Game years    : ",Exp),nl,
                write(" University    : ",College),nl,nl,!,
                write(" Press space bar"), readchar(_),
                removewindow, shiftwindow(1).                  
     process(3) if
       makewindow(5,7,7," Unluck ",14,7,5,60), shiftwindow(5),
       write("Nope Database "),nl,
       write("Goodbuy "),nl,!,
       write("Press the space bar,"),readchar(_),
       removewindow,shiftwindow(1).
       process(4) if
       clearwindow, typerec(N),findquation4(N),menu.
       typerec(N):- clearwindow, write("Information about Football players"),nl,readint(N).
             findquation4('1'):-clearwindow, write(" 1- Find player on position"),nl,readint(N), find(N).
             
              find(1):- clearwindow, write("Write player position"), readchar(pos),
                dplayer(p_name, k_name, p_number, pos, height, weight, nfl_exp, college), write("Football player: "),
                write(P_name),nl, write(" Play in club: "),write(k_name),nl, write("Playing:"),write(Exp),nl,
                write("Height:"),write(Ht),nl,write("Weight:"),write(Wt),nl,write("Player number:"),write(P_number).
               find(1):- write("Not founded").
               find(2)if clearwindow,write(" Write game years for find player:"),readint(Exp),
               dplayer(p_name, k_name, p_number, pos, height, weight, nfl_exp, college), write("Football player: "),
                write(P_name),nl, write(" Play in club: "),write(k_name),nl,write("Position:"),write(Pos),nl,
                write("Height:"),write(Ht),nl,write("Weight:"),write(Wt),nl,write("Player number:"),write(P_number).
               find(2) if write("Not founded").
               find(3) if clearwindow, write(" Write University player:"),readchar(College),
               dplayer(p_name, k_name, p_number, pos, height, weight, nfl_exp, college),
                write("Football player: "),
                write(P_name),nl, write(" Play in club: "),write(k_name),nl,write("Position:"),write(Pos),nl,
                write("Height:"),write(Ht),nl,write("Weight:"),write(Wt),nl,write("Player number:"),write(P_number),nl,
                write("University:"),write(college).
               find(3) if write("Not founded").
       findPos(pos) if dplayer(_,_,_,pos,_,_,_,_).
       findYear(Exp) if dplayer(_,_,_,_,_,_,Exp,_).
       findUnik(College) if dplayer(_,_,_,_,_,_,_,College).  
               
 
      process(5) if
     makewindow(2,7,7,"List of all players",2,20,18,58),shiftwindow(1),
    findall(_,player,(_,_,_,_,_,_,_,_),_),
     readchar(_),removewindow,shiftwindow(1).
       
     process(6) if
     makewindow(2,7,7,"Save a database",2,20,18,59),shiftwindow(1),
     write("Enter filename: "), readln(Fname), save(Fname),removewindow,shiftwindow(7).
       
     process(7) if
         write(" See comeback "), readchar(_),exit.
         
           process(Vibor) if
             Vibor < 1, error; Vibor>8, error.
      error if
          write("Please take a nubmer 1 to 7"),
          write(" (Press the space bar to continue)"),readchar(_).
Помогите,пожалуйста, очень долго сижу уже за этой работой...:281

Последний раз редактировалось Винитарх; 12.11.2017 в 20:45
Ответить с цитированием
  (#3 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,892
Сказал(а) спасибо: 2
Поблагодарили 294 раз(а) в 294 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 12.11.2017, 20:48

Цитата:
Сообщение от Jumi17 Посмотреть сообщение
В итоге получила вот такой код, выводит ошибку 415 перед Process5, Clauses for the same predicate should be grouped.
Предложения одного предиката должны быть сгруппированы. А у Вас между предложением process(4) и предложением process(5) расположена целая группа предикатов, которую надо перенести в другое место так, чтобы между предложениями process() ничего лишнего не было.

И ещё, пользуйтесь пожалуйста при выделении исходного Пролог-кода тегами не prolog, а VIP (это Ваш Турбо-Пролог и все его потомки).
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Внешние базы данных в Visual Prolog 7.4 Colonel Prolog 15 19.06.2013 20:14
создание базы данных SadPhantom Задания за деньги 3 12.10.2011 10:35
Создание базы данных Butch Вопросы начинающих программистов 0 10.06.2011 15:48
Циклический выбор фактов из динамической базы данных на Прологе snarkbird Prolog 6 28.10.2010 22:35
базы данных в Visual Prolog alexfilippov1 Prolog 2 12.10.2009 22:57
Prolog и базы данных Centurion Prolog 9 03.06.2009 14:18
Создание базы данных на С++ Builder Vitek_22 C++ Builder 4 25.05.2009 14:40
Создание сетевой базы данных Sinyak C++ Builder 15 20.05.2006 18:33
Создание базы данных в Prolog через стуктуру Darzen Вопросы начинающих программистов 1 13.05.2006 21:36
Создание многопользовательской базы данных imported_Alpha C++ Builder 7 21.03.2006 12:58
Создание базы данных на С++ vanderlind Visual C++ 14 20.06.2004 00:25
Создание VFP базы данных DBC в Delphi Bobin13 Delphi 0 25.03.2004 12:27



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