Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Додаток а
Текст програми системи планування дій робота у обмеженому робочому просторі
// файл Main.h
class CMain: public CFrameWnd {public: void Box(int, bool); CSemaphore Sema; void ImplDecision(); void SetTask(); int GetRobotLoc(); void Robot(CPoint); void Door(int Num, bool State); void EndTraffic(); void OnTimer(UINT id); void StartTraffic(); void Space(); int m_X, m_Y; CDC memDC; CBitmap Bmp, robot; CBrush BkBrush; void OnExit(); void OnPaint(); CMain(); DECLARE_MESSAGE_MAP() };
class CApp: public CWinApp {public: BOOL InitInstance(); };
class CCommandForm: public CDialog {public: void OnShowDecision(); void SetTask(CString, CString, CString); void OnSubmit(); BOOL OnInitDialog(); CCommandForm(UINT id, CWnd *p): CDialog(id, p){} DECLARE_MESSAGE_MAP() private: CComboBox *cb0, *cb1, *cb2; CButton *bt3; };
class CRobotPlan {public: CRobotPlan* Revers(CRobotPlan *); CRobotPlan * delfactall(char *rel, char *n); char *relname, *agent, *sobj1, *sobj2; CRobotPlan *next; CRobotPlan(); CRobotPlan(char *, char *, char *, char *, CRobotPlan *); CRobotPlan(char *, char *, char *, CRobotPlan *); void print(); CRobotPlan *dataformer(); CRobotPlan *addfact(char *, char *, char *, char *); CRobotPlan *delfact(char *, char *, char *, char *); CRobotPlan *delfact(char *, char *, int, char *); int dbtest(char*, char*, char*); int dbtest(char*, char*, char*, char*); int dbtest(char*, int, char*, char*); int dbtest(char*, int, char*, int); CRobotPlan *findfact(char *, char *); CRobotPlan *findfact(char *, char *, char *); CRobotPlan *findfact(char *, char *, char *, char *); CRobotPlan *findfact(char *, int, char *, char *); CRobotPlan *findfact(char *, int, char *, int); CRobotPlan *findfact(char *, char *, char *, int); void deciser(); char *find_action(); void support_action(char*); void old_cleaner(char*); void new_adder(char*); };
// файл Мain.cpp
// Main.cpp: implementation of the CMain class.
#include < afxwin.h> #include < afxmt.h> #include < string.h> #include " Main.h" #include " n7.h" #include " resource.h"
CListBox *desList; UINT FirstThread(LPVOID WinObjPtr); UINT SecondThread(LPVOID WinObjPtr); UINT ThirdThread(LPVOID WinObjPtr); UINT FourthThread(LPVOID WinObjPtr);
CPoint p1, p2;
int maxX, maxY; bool click; CPoint rb, pointR1, pointR2, pointR20, pointR3, pointR4, pointR5, pointD12, pointD23, pointD24, pointD34, pointD45, pointB1, pointB2, pointB3;
CMain:: CMain() {Create(NULL, " Cистема планування дій робота", WS_OVERLAPPEDWINDOW, rectDefault, NULL, MAKEINTRESOURCE(IDR_MENU1)); m_X=m_Y=0; maxX=GetSystemMetrics(SM_CXSCREEN); maxY=GetSystemMetrics(SM_CYSCREEN); CClientDC DC(this); memDC.CreateCompatibleDC(& DC); Bmp.CreateCompatibleBitmap(& DC, maxX, maxY); memDC.SelectObject(& Bmp); BkBrush.CreateStockObject(WHITE_BRUSH); memDC.SelectObject(& BkBrush); memDC.PatBlt(0, 0, maxX, maxY, PATCOPY); robot.LoadBitmap(IDB_BITMAP1); click=false; p1=CPoint(575, 175); rb=CPoint(575, 175); pointR1=CPoint(75, 40); pointR2=CPoint(350, 40); pointR20=CPoint(225, 40); pointR3=CPoint(205, 205); pointR4=CPoint(350, 205); pointR5=CPoint(575, 205); pointD12=CPoint(150, 75); pointD23=CPoint(225, 150); pointD24=CPoint(375, 150); pointD34=CPoint(300, 225); pointD45=CPoint(500, 225); pointB1=CPoint(10, 75); pointB2=CPoint(480, 75); pointB3=CPoint(600, 225); SetTimer(1, 400, NULL); }
BEGIN_MESSAGE_MAP(CMain, CFrameWnd) ON_WM_PAINT() ON_WM_TIMER() ON_COMMAND(ID_EXIT, OnExit) ON_COMMAND(ID_TRAFFIC_START, StartTraffic) ON_COMMAND(ID_TRAFFIC_END, EndTraffic) ON_COMMAND(ID_TASK_SETTASK, SetTask) ON_COMMAND(ID_TASK_IMPLEMENTDECISION, ImplDecision) END_MESSAGE_MAP()
BOOL CApp:: InitInstance() {m_pMainWnd=new CMain; m_pMainWnd-> ShowWindow(m_nCmdShow); SetPriorityClass(m_pMainWnd, REALTIME_PRIORITY_CLASS); m_pMainWnd-> UpdateWindow(); return TRUE; }
CApp App;
void CMain:: OnPaint() {CPaintDC dc(this); dc.BitBlt(0, 0, maxX, maxY, & memDC, 0, 0, SRCCOPY); }
void CMain:: OnExit() {int i=MessageBox(" Quit the program? ", " Exit", MB_YESNO); if(i==IDYES)SendMessage(WM_CLOSE); }
bool State12=false, State23=true, State24=true, State34=true, State45=true;
void CMain:: Space() {int room = GetRobotLoc(); CBrush white(RGB(255, 255, 255)); CPen whitePen(PS_SOLID, 2, RGB(255, 255, 255)); memDC.SelectObject(& white); memDC.SelectObject(& whitePen); memDC.Rectangle(0, 0, 650, 300); CPen redPen(PS_SOLID, 2, RGB(255, 0, 0)); memDC.SelectObject(& redPen); memDC.MoveTo(0, 0); memDC.LineTo(0, 300); memDC.LineTo(650, 300); memDC.LineTo(650, 150); memDC.LineTo(500, 150); memDC.LineTo(500, 0); memDC.LineTo(0, 0); memDC.MoveTo(0, 150); memDC.LineTo(200, 150); memDC.MoveTo(150, 150); memDC.LineTo(150, 100); memDC.MoveTo(150, 50); memDC.LineTo(150, 0);
memDC.MoveTo(250, 150); memDC.LineTo(350, 150); memDC.MoveTo(400, 150); memDC.LineTo(500, 150); memDC.LineTo(500, 200); memDC.MoveTo(500, 250); memDC.LineTo(500, 300); memDC.MoveTo(300, 150); memDC.LineTo(300, 200); memDC.MoveTo(300, 250); memDC.LineTo(300, 300); memDC.TextOut(73, 65, " 1", 1); memDC.TextOut(320, 65, " 2", 1); memDC.TextOut(143, 215, " 3", 1); memDC.TextOut(395, 215, " 4", 1); memDC.TextOut(570, 215, " 5", 1); Door(12, State12); Door(23, State23); Door(24, State24); Door(34, State34); Door(45, State45); Box(1, true); Box(2, true); Box(3, true); InvalidateRect(CRect(0, 0, 650, 300)); }
int t=0, t2=0, t3=0;
void CMain:: StartTraffic() {for (int i=0; i=20; i++){SetTimer(2, 100, NULL); } MessageBeep(MB_OK); }
int kt1=0, kt2=0;
void CMain:: OnTimer(UINT id) {if(id==1) {Space(); Robot(p1); t++; } }
void CMain:: EndTraffic() { KillTimer(1); }
void CMain:: Door(int Num, bool State) {CPen bluePen(PS_SOLID, 2, RGB(0, 0, 255)); CPen whitePen(PS_SOLID, 2, RGB(255, 255, 255)); CPoint p1, p2; switch(Num) { case 12: p1=CPoint(150, 100); p2=CPoint(150, 50); break; case 23: p1=CPoint(200, 150); p2=CPoint(250, 150); break; case 24: p1=CPoint(350, 150); p2=CPoint(400, 150); break; case 34: p1=CPoint(300, 250); p2=CPoint(300, 200); break; case 45: p1=CPoint(500, 250); p2=CPoint(500, 200); break; } if(p1.x==p2.x){if(State) { memDC.SelectObject(& whitePen); memDC.MoveTo(p1.x-3, p1.y+47); memDC.LineTo(p1.x-3, p1.y+1); memDC.SelectObject(& bluePen); memDC.MoveTo(p1.x-3, p1.y-1); memDC.LineTo(p1.x-3, p2.y+1); } else { memDC.SelectObject(& whitePen); memDC.MoveTo(p1.x-3, p1.y-1); memDC.LineTo(p1.x-3, p2.y+1); memDC.SelectObject(& bluePen); memDC.MoveTo(p1.x-3, p1.y+47); memDC.LineTo(p1.x-3, p1.y+1); } } if(p1.y==p2.y){if(State) { memDC.SelectObject(& whitePen); memDC.MoveTo(p2.x+1, p1.y+3); memDC.LineTo(p2.x+47, p1.y+3); memDC.SelectObject(& bluePen); memDC.MoveTo(p1.x+1, p1.y+3); memDC.LineTo(p2.x-1, p1.y+3); } else { memDC.SelectObject(& whitePen); memDC.MoveTo(p1.x+1, p1.y+3); memDC.LineTo(p2.x-1, p1.y+3); memDC.SelectObject(& bluePen); memDC.MoveTo(p2.x+1, p1.y+3); memDC.LineTo(p2.x+47, p1.y+3); } } }
void CMain:: Robot(CPoint pp) { int x=pp.x, y=pp.y; CDC mdc; mdc.CreateCompatibleDC(& memDC); mdc.SelectObject(& robot); BITMAP map; robot.GetBitmap(& map); InvalidateRect(CRect(rb.x, rb.y, rb.x+50, rb.y+50)); memDC.BitBlt(x, y, map.bmWidth, map.bmHeight, & mdc, 0, 0, SRCCOPY); }
int CMain:: GetRobotLoc() { if(rb.x> 0 & & rb.x< 149 & & rb.y> 0 & & rb.y< 149) return 1; if(rb.x> 151 & & rb.x< 500 & & rb.y> 0 & & rb.y< 149) return 2; if(rb.x> 0 & & rb.x< 300 & & rb.y> 151 & & rb.y< 300) return 3; if(rb.x> 301 & & rb.x< 500 & & rb.y> 151 & & rb.y< 300) return 4; if(rb.x> 501 & & rb.x< 650 & & rb.y> 151 & & rb.y< 300) return 5; else return 0; }
void CMain:: SetTask() { CCommandForm cf(IDD_DIALOG1, this); cf.DoModal(); }
BEGIN_MESSAGE_MAP(CCommandForm, CDialog) ON_COMMAND(IDC_BUTTON1, OnSubmit) ON_COMMAND(IDC_BUTTON2, OnShowDecision) END_MESSAGE_MAP()
BOOL CCommandForm:: OnInitDialog() { CDialog:: OnInitDialog(); cb0=(CComboBox*)GetDlgItem(IDC_COMBO0); cb1=(CComboBox*)GetDlgItem(IDC_COMBO1); cb2=(CComboBox*)GetDlgItem(IDC_COMBO2); bt3=(CButton*)GetDlgItem(IDC_BUTTON2); desList=(CListBox*)GetDlgItem(IDC_LIST1); cb0-> AddString(" робот"); cb0-> AddString(" скринька1"); cb0-> AddString(" скринька2"); cb0-> AddString(" скринька3"); cb1-> AddString(" перейти_до"); cb1-> AddString(" штовхати_до"); cb1-> AddString(" відкрити"); cb1-> AddString(" закрити"); cb2-> AddString(" скринька1"); cb2-> AddString(" скринька2"); cb2-> AddString(" скринька3"); cb2-> AddString(" двері12"); cb2-> AddString(" двері23"); cb2-> AddString(" двері24"); cb2-> AddString(" двері34"); cb2-> AddString(" двері45"); cb2-> AddString(" кімната_1"); cb2-> AddString(" кімната_2"); cb2-> AddString(" кімната_3"); cb2-> AddString(" кімната_4"); cb2-> AddString(" кімната_5"); bt3-> EnableWindow(FALSE); return TRUE; }
void CCommandForm:: OnSubmit() { CString a0, a1, a2; int i0, i1; cb0-> GetWindowText(a0); i0=cb0-> GetCurSel(); cb1-> GetWindowText(a1); i1=cb1-> GetCurSel(); cb2-> GetWindowText(a2); int lk=desList-> GetCount(); for(int ik=0; ik< lk; ik++)desList-> DeleteString(0); if(! strlen(a0)||! strlen(a1)||! strlen(a2)) MessageBox(" Запит сформовано невірно", " Помилка", MB_ICONSTOP); else if(i0==0 & & i1==1)MessageBox(" Запит сформовано невірно", " Помилка", MB_ICONSTOP); else if(i0> 0 & & i1! =1) MessageBox(" Запит сформовано невірно", " Помилка", MB_ICONSTOP); else if(! strcmp(a0, a2)) MessageBox(" Запит сформовано невірно", " Помилка", MB_ICONSTOP); else SetTask(a0, a1, a2); }
CRobotPlan *evil=new CRobotPlan; CRobotPlan *sub_evil; CRobotPlan *plan=new CRobotPlan; bool decision=false;
void CCommandForm:: SetTask(CString a, CString b, CString c) { CRobotPlan *goal; evil=evil-> dataformer(); sub_evil=evil; CString d; d=a+b+c; char *a1, *b1, *c1; if(a==" робот") {a=" robot"; a1=" robot"; } if(a==" скринька1") {a=" box1"; a1=" box1"; } if(a==" скринька2") {a=" box2"; a1=" box2"; } if(a==" скринька3") {a=" box3"; a1=" box3"; } if(b==" перейти_до") {b=" go"; } if(b==" штовхати_до"){b=" push"; } if(b==" відкрити") {b=" open"; b1=" opened"; } if(b==" закрити") {b=" close"; b1=" closed"; } if(c==" скринька1") {c=" box1"; c1=" box1"; } if(c==" скринька2") {c=" box2"; c1=" box2"; } if(c==" скринька3") {c=" box3"; c1=" box3"; } if(c==" двері12") {c=" door12"; c1=" door12"; } if(c==" двері23") {c=" door23"; c1=" door23"; } if(c==" двері24") {c=" door24"; c1=" door24"; } if(c==" двері34") {c=" door34"; c1=" door34"; } if(c==" двері45") {c=" door45"; c1=" door45"; } if(c==" кімната_1") {c=" room1"; c1=" room1"; } if(c==" кімната_2") {c=" room2"; c1=" room2"; } if(c==" кімната_3") {c=" room3"; c1=" room3"; } if(c==" кімната_4") {c=" room4"; c1=" room4"; } if(c==" кімната_5") {c=" room5"; c1=" room5"; } if(a==" robot" & & b==" go" & & (c==" room1" || c==" room2" ||c==" room3" ||c==" room4" ||c==" room5")) {goal=new CRobotPlan(" is_in", a1, c1, NULL); // tested goal-> deciser(); } if(a==" robot" & & b==" go" & & (c==" box1" || c==" box2" || c==" box3")) {goal=new CRobotPlan(" is_at", a1, c1, NULL); // tested goal-> deciser(); } if(a==" robot" & & b==" go" & & (c==" door12" || c==" door23" ||c==" door24" ||c==" door34" ||c==" door45")) {goal=new CRobotPlan(" is_at", a1, c1, NULL); // tested goal-> deciser(); } if(a==" robot" & & (b==" close" || b==" open") & & (c==" door12" || c==" door23" ||c==" door24" ||c==" door34" ||c==" door45")) {goal=new CRobotPlan(" stands", c1, b1, NULL); // tested goal-> deciser(); } if(a==" box1" || a==" box2" || a==" box3" & & b==" push") {if(c==" door12" || c==" door23" ||c==" door24" ||c==" door34" ||c==" door45") {goal=new CRobotPlan(" is_at", a1, c1, NULL); // tested goal-> deciser(); } if(c==" room1" || c==" room2" ||c==" room3" ||c==" room4" ||c==" room5") {goal=new CRobotPlan(" is_in", a1, c1, NULL); // tested goal-> deciser(); } if(c==" box1" || c==" box2" || c==" box3") {goal=new CRobotPlan(" is_at", a1, c1, NULL); // tested goal-> deciser(); } } desList-> AddString(" +++ The END +++"); decision=true; bt3-> EnableWindow(); }
void CMain:: ImplDecision() { if(decision) {plan=plan-> Revers(plan); while(plan-> next) {CString ss; ss.Format(_T(" %s %s %s"), plan-> relname, plan-> agent, plan-> sobj1); if(plan-> relname==" stands") {if(plan-> agent==" door12") {if(plan-> sobj1==" opened")State12=false; else State12=true; } if(plan-> agent==" door23") {if(plan-> sobj1==" opened")State23=false; else State23=true; } if(plan-> agent==" door24") {if(plan-> sobj1==" opened")State24=false; else State24=true; } if(plan-> agent==" door34") {if(plan-> sobj1==" opened")State34=false; else State34=true; } if(plan-> agent==" door45") {if(plan-> sobj1==" opened")State45=false; else State45=true; } } if(plan-> relname==" is_in") {if(plan-> agent==" robot") { int r=GetRobotLoc(); if(plan-> sobj1==" room4") {if(r==5){p1=CPoint(pointR5); p2=CPoint(pointR4); AfxBeginThread(FirstThread, this); } if(r==2){p1=CPoint(pointR2); p2=CPoint(pointR4); AfxBeginThread(FourthThread, this); } } if(plan-> sobj1==" room2") {if(r==4){p1=CPoint(pointR4); p2=CPoint(pointR2); AfxBeginThread(ThirdThread, this); } if(r==1){p1=CPoint(pointR1); p2=CPoint(pointR20); AfxBeginThread(SecondThread, this); } if(r==3){p1=CPoint(pointR1); p2=CPoint(pointR20); AfxBeginThread(ThirdThread, this); } } if(plan-> sobj1==" room1") {if(r==2){p1=CPoint(pointR20); p2=CPoint(pointR1); AfxBeginThread(FirstThread, this); } } if(plan-> sobj1==" room3") {if(r==2){p1=CPoint(pointR20); p2=CPoint(pointR3); AfxBeginThread(FourthThread, this); } if(r==4){p1=CPoint(pointR4); p2=CPoint(pointR3); AfxBeginThread(FirstThread, this); } } if(plan-> sobj1==" room5") {if(r==4){p1=CPoint(pointR4); p2=CPoint(pointR5); AfxBeginThread(SecondThread, this); } } } } if(plan-> relname==" is_at") {if(plan-> agent==" robot") { int r=GetRobotLoc(); if(plan-> sobj1==" door12") { if(r==2){p1=CPoint(pointR20); p2=CPoint(pointD12); AfxBeginThread(FirstThread, this); } if(r==1){p1=CPoint(pointR1); p2=CPoint(pointD12); AfxBeginThread(SecondThread, this); } } if(plan-> sobj1==" door24") { if(r==2){p1=CPoint(pointR2); p2=CPoint(pointD24); AfxBeginThread(FourthThread, this); } if(r==4){p1=CPoint(pointR4); p2=CPoint(pointD24); AfxBeginThread(ThirdThread, this); } } if(plan-> sobj1==" door23") { if(r==2){p1=CPoint(pointR20); p2=CPoint(pointD23); AfxBeginThread(FourthThread, this); } if(r==3){p1=CPoint(pointR3); p2=CPoint(pointD23); AfxBeginThread(ThirdThread, this); } } if(plan-> sobj1==" door34") { if(r==3){p1=CPoint(pointR3); p2=CPoint(pointD34); AfxBeginThread(SecondThread, this); } if(r==4){p1=CPoint(pointR4); p2=CPoint(pointD34); AfxBeginThread(FirstThread, this); } } if(plan-> sobj1==" door45") { if(r==4){p1=CPoint(pointR4); p2=CPoint(pointD45); AfxBeginThread(SecondThread, this); } if(r==5){p1=CPoint(pointR5); p2=CPoint(pointD45); AfxBeginThread(FirstThread, this); } } } if(plan-> agent==" box1") {if(plan-> sobj1==" box2"){p1=CPoint(pointR2); p2=CPoint(pointD12); AfxBeginThread(FirstThread, this); }; if(plan-> sobj1==" box3"){p1=CPoint(pointR4); p2=CPoint(pointD24); AfxBeginThread(ThirdThread, this); }; } if(plan-> agent==" box2") {if(plan-> sobj1==" box1"){p1=CPoint(pointR2); p2=CPoint(pointD12); AfxBeginThread(FirstThread, this); }; if(plan-> sobj1==" box3"){p1=CPoint(pointR4); p2=CPoint(pointD24); AfxBeginThread(ThirdThread, this); }; } if(plan-> agent==" box3") {if(plan-> sobj1==" box1"){p1=CPoint(pointR2); p2=CPoint(pointD12); AfxBeginThread(FirstThread, this); }; if(plan-> sobj1==" box2"){p1=CPoint(pointR4); p2=CPoint(pointD24); AfxBeginThread(ThirdThread, this); }; } } plan=plan-> next; MessageBox(ss); } } }
UINT FirstThread(LPVOID WinObjPtr) { CMain *ptr=(CMain*)WinObjPtr; CSingleLock SyncOb(& (ptr-> Sema)); SyncOb.Lock(); while(p1.x> =p2.x){p1.Offset(-t*0.1, 0); Sleep(200); ptr-> Robot(p1); } rb=CPoint(p2); SyncOb.Unlock(); return 0; }
UINT SecondThread(LPVOID WinObjPtr) { CMain *ptr=(CMain*)WinObjPtr; CSingleLock SyncOb(& (ptr-> Sema)); SyncOb.Lock(); while(p1.x< =p2.x){p1.Offset(t*0.1, 0); Sleep(200); ptr-> Robot(p1); } rb=CPoint(p2); SyncOb.Unlock(); return 0; }
UINT ThirdThread(LPVOID WinObjPtr) { CMain *ptr=(CMain*)WinObjPtr; CSingleLock SyncOb(& (ptr-> Sema)); SyncOb.Lock(); while(p1.y> p2.y){p1.Offset(0, -t*0.1); Sleep(200); ptr-> Robot(p1); } rb=CPoint(p2); SyncOb.Unlock(); return 0; }
UINT FourthThread(LPVOID WinObjPtr) { CMain *ptr=(CMain*)WinObjPtr; CSingleLock SyncOb(& (ptr-> Sema)); SyncOb.Lock(); while(p1.y< p2.y){p1.Offset(0, t*0.1); Sleep(200); ptr-> Robot(p1); } rb=CPoint(p2); SyncOb.Unlock(); return 0; }
void CCommandForm:: OnShowDecision() { CMain *wm; wm=(CMain*)GetParent(); wm-> ImplDecision(); }
void CMain:: Box(int num, bool state) {if(state) {CBrush redBrush(RGB(255, 0, 0)); memDC.SelectObject(& redBrush); if(num==1)memDC.Rectangle(10, 75, 30, 95); if(num==2)memDC.Rectangle(480, 75, 500, 95); if(num==3)memDC.Rectangle(630, 225, 650, 245); } else {CBrush whiteBrush(RGB(255, 255, 255)); memDC.SelectObject(& whiteBrush); if(num==1)memDC.Rectangle(10, 75, 30, 95); if(num==2)memDC.Rectangle(480, 75, 500, 95); if(num==3)memDC.Rectangle(630, 225, 650, 245); } }
// файл n7.cpp #include < iostream.h> #include < string.h> #include < conio.h> #include < afxwin.h> #include" n7.h"
extern CRobotPlan *evil; extern CRobotPlan *sub_evil; extern CRobotPlan *plan; extern CListBox *desList;
void CRobotPlan:: deciser() {if(! evil-> dbtest(relname, agent, sobj1, sobj2)) {char *action=find_action(); if (action){ support_action(action); old_cleaner(action); new_adder(action); } } }
void CRobotPlan:: support_action(char *action) {if(! (strcmp(action, " take_box"))) {CRobotPlan *subgoal=new CRobotPlan(" is_at", " robot", sobj1, NULL); subgoal-> deciser(); }
if(! (strcmp(action, " put_box"))) { }
if(! (strcmp(action, " open_door"))) {CRobotPlan *subgoal=new CRobotPlan(" is_at", " robot", agent, NULL); subgoal-> deciser(); }
if(! (strcmp(action, " close_door"))) {CRobotPlan *subgoal=new CRobotPlan(" is_at", " robot", agent, NULL); subgoal-> deciser(); }
if(! (strcmp(action, " goto_door"))) {char *room0=evil-> findfact(" is_in", agent)-> sobj1; char *room1=evil-> findfact(" connects", sobj1)-> sobj1; // where is door char *room2=evil-> findfact(" connects", sobj1, room1, 0)-> sobj2; // where is door if((strcmp(room0, room1)) & & (strcmp(room0, room2))) {CRobotPlan *subgoal=new CRobotPlan(" is_in", " robot", room1, NULL); subgoal-> deciser(); } }
if(! (strcmp(action, " goto_box"))) {char *room=evil-> findfact(" is_in", sobj1)-> sobj1; // where is object CRobotPlan *subgoal=new CRobotPlan(" is_in", " robot", room, NULL); subgoal-> deciser(); }
if(! (strcmp(action, " move_box"))) {CRobotPlan *subgoal02=new CRobotPlan(" is_with", " robot", agent, NULL); subgoal02-> deciser(); CRobotPlan *subgoal03=new CRobotPlan(" is_at", " robot", sobj1, NULL); subgoal03-> deciser(); CRobotPlan *subgoal04=new CRobotPlan(" is_with", " robot", " empty", NULL); subgoal04-> deciser(); }
if(! (strcmp(action, " push_box"))) {CRobotPlan *subgoal02=new CRobotPlan(" is_with", " robot", agent, NULL); subgoal02-> deciser(); CRobotPlan *subgoal03=new CRobotPlan(" is_at", " robot", sobj1, NULL); subgoal03-> deciser(); CRobotPlan *subgoal04=new CRobotPlan(" is_with", " robot", " empty", NULL); subgoal04-> deciser(); }
if(! (strcmp(action, " push_box_other_room"))) { CRobotPlan *subgoal02=new CRobotPlan(" is_with", " robot", agent, NULL); subgoal02-> deciser(); CRobotPlan *subgoal03=new CRobotPlan(" is_in", " robot", sobj1, NULL); subgoal03-> deciser(); CRobotPlan *subgoal04=new CRobotPlan(" is_with", " robot", " empty", NULL); subgoal04-> deciser(); }
if(! (strcmp(action, " go_other_room"))) { char *room=evil-> findfact(" is_in", agent)-> sobj1; //where is robot if(evil-> findfact(" connects", 0, room, sobj1)-> agent) {char *door=evil-> findfact(" connects", 0, room, sobj1)-> agent; //what's door CRobotPlan *subgoal=new CRobotPlan(" is_at", " robot", door, NULL); subgoal-> deciser(); CRobotPlan *subgoal1=new CRobotPlan(" stands", door, " opened", NULL); subgoal1-> deciser(); } }
if(! (strcmp(action, " go_far_room"))) { char *room=evil-> findfact(" is_in", agent)-> sobj1; //where is robot char *room1; int cc; do {cc=1; sub_evil-> findfact(" connects", 0, room, 0); room1=sub_evil-> findfact(" connects", 0, room, 0)-> sobj2; if(evil-> dbtest(" was_in", " robot", room1) ) {sub_evil=sub_evil-> next; } else cc=0; }while(cc); CRobotPlan *subgoal=new CRobotPlan(" is_in", " robot", room1, NULL); subgoal-> deciser(); CRobotPlan *subgoal1=new CRobotPlan(" is_in", " robot", sobj1, NULL); subgoal1-> deciser(); } }
void CRobotPlan:: old_cleaner(char *action) {print(); plan = new CRobotPlan(relname, agent, sobj1, NULL, plan); if(! (strcmp(action, " take_box"))) {evil=evil-> delfact(" is_at", agent, 0, NULL); evil=evil-> delfact(" is_with", agent, 0, NULL); evil=evil-> delfact(" is_in", sobj1, 0, NULL); }
if(! (strcmp(action, " put_box"))) {evil=evil-> addfact(" is_in", evil-> findfact(" is_with", agent)-> sobj1, evil-> findfact(" is_in", agent)-> sobj1, NULL); evil=evil-> delfact(" is_with", agent, 0, NULL); }
if(! (strcmp(action, " open_door"))) {evil=evil-> delfact(" stands", agent, " closed", NULL); }
if(! (strcmp(action, " close_door"))) {evil=evil-> delfact(" stands", agent, " opened", NULL); }
if(! (strcmp(action, " goto_door"))) {evil=evil-> delfact(" is_at", agent, 0, NULL); }
if(! (strcmp(action, " move_box"))) {evil=evil-> delfact(" is_at", " robot", 0, NULL); } // robot is_at some
if(! (strcmp(action, " goto_box"))) {evil=evil-> delfact(" is_at", " robot", 0, NULL); }
if(! (strcmp(action, " push_box"))) {evil=evil-> delfact(" is_at", " robot", 0, NULL); }
if(! (strcmp(action, " go_other_room"))) {char *room=evil-> findfact(" is_in", agent)-> sobj1; evil=evil-> delfact(" is_in", " robot", 0, NULL); evil=evil-> delfact(" is_at", " robot", 0, NULL); evil=evil-> addfact(" was_in", " robot", room, NULL); }
if(! (strcmp(action, " push_box_other_room"))) {evil=evil-> delfact(" is_in", " robot", 0, NULL); evil=evil-> delfact(" is_at", " robot", 0, NULL); evil=evil-> delfact(" is_in", agent, 0, NULL); evil=evil-> delfact(" is_at", agent, 0, NULL); }
if(! (strcmp(action, " go_far_room"))) {evil=evil-> delfact(" is_at", " robot", 0, NULL); evil=evil-> delfactall(" was_in", " robot"); } }
void CRobotPlan:: new_adder(char *action) { if(! (strcmp(action, " take_box"))) evil=evil-> addfact(" is_with", agent, sobj1, NULL);
if(! (strcmp(action, " put_box"))) evil=evil-> addfact(" is_with", agent, " empty", NULL);
if(! (strcmp(action, " open_door"))) evil=evil-> addfact(" stands", agent, " opened", NULL);
if(! (strcmp(action, " close_door"))) evil=evil-> addfact(" stands", agent, " closed", NULL);
if(! (strcmp(action, " goto_door"))) evil=evil-> addfact(" is_at", " robot", sobj1, NULL);
if(! (strcmp(action, " move_box"))) {evil=evil-> addfact(" is_at", " robot", sobj1, NULL); evil=evil-> addfact(" is_at", agent, sobj1, NULL); }
if(! (strcmp(action, " goto_box"))) evil=evil-> addfact(" is_at", " robot", sobj1, NULL);
if(! (strcmp(action, " push_box"))) {evil=evil-> addfact(" is_at", " robot", sobj1, NULL); evil=evil-> addfact(" is_at", agent, sobj1, NULL); }
if(! (strcmp(action, " go_other_room"))) evil=evil-> addfact(" is_in", agent, sobj1, NULL);
if(! (strcmp(action, " push_box_other_room"))) {evil=evil-> addfact(" is_in", agent, sobj1, NULL); evil=evil-> addfact(" is_in", " robot", sobj1, NULL); }
if(! (strcmp(action, " go_far_room"))) {} }
CRobotPlan:: CRobotPlan(){relname=NULL; agent=NULL; sobj1=NULL; sobj2=NULL; next=NULL; }
CRobotPlan:: CRobotPlan(char *rel, char *n, char *n1, char *n2, CRobotPlan *ff) {relname=rel; agent=n; sobj1=n1; sobj2=n2; next=ff; }
CRobotPlan:: CRobotPlan(char *rel, char *n, char *n1, CRobotPlan *ff) {relname=rel; agent=n; sobj1=n1; sobj2=NULL; next=ff; }
void CRobotPlan:: print() { if(this){ if(! strcmp(relname, " is_in") ||! strcmp(relname, " is_at") || ! strcmp(relname, " stands") ||! strcmp(relname, " is_with") ||! strcmp(relname, " was_in") ) {CString des; if(sobj2) des.Format(_T(" %s %s %s %s"), relname, agent, sobj1, sobj2); else des.Format(_T(" %s %s %s"), relname, agent, sobj1); desList-> AddString(des); } next-> print(); }}
CRobotPlan *CRobotPlan:: addfact(char *rel, char *n, char *n1, char *n2) {CRobotPlan *a=new CRobotPlan(rel, n, n1, n2, evil); return a; };
CRobotPlan *CRobotPlan:: delfact(char *rel, char *n, int i, char *n2) {if(next) {if(n2) {if(! strcmp(relname, rel) & &! strcmp(agent, n) & & ! strcmp(sobj2, n2)) return next; if(! strcmp(next-> relname, rel) & &! strcmp(next-> agent, n) & & ! strcmp(next-> sobj2, n2)) next=next-> next; else next-> delfact(rel, n, i, n2); } else {if(! strcmp(relname, rel) & &! strcmp(agent, n)) return next; if(! strcmp(next-> relname, rel) & &! strcmp(next-> agent, n)) next=next-> next; else next-> delfact(rel, n, i, n2); } } return this; }
CRobotPlan *CRobotPlan:: delfact(char *rel, char *n, char *n1, char *n2) {if(next) {if(n2) { if(! strcmp(relname, rel) & &! strcmp(agent, n) & & ! strcmp(sobj1, n1) & &! strcmp(sobj2, n2)) return next; if(! strcmp(next-> relname, rel) & &! strcmp(next-> agent, n) & & ! strcmp(next-> sobj1, n1) & &! strcmp(next-> sobj2, n2)) next=next-> next; else next-> delfact(rel, n, n1, n2); } else {if(! strcmp(relname, rel) & &! strcmp(agent, n) & & ! strcmp(sobj1, n1)) return next; if(! strcmp(next-> relname, rel) & &! strcmp(next-> agent, n) & & ! strcmp(next-> sobj1, n1)) next=next-> next; else next-> delfact(rel, n, n1, n2); } } return this; }
CRobotPlan *CRobotPlan:: dataformer() {CRobotPlan *a1=new CRobotPlan(" is_a", " room1", " room", NULL, NULL); CRobotPlan *a2=new CRobotPlan(" is_a", " room2", " room", NULL, a1); CRobotPlan *a3=new CRobotPlan(" is_a", " room3", " room", NULL, a2); CRobotPlan *a4=new CRobotPlan(" is_a", " room4", " room", NULL, a3); CRobotPlan *a5=new CRobotPlan(" is_a", " room5", " room", NULL, a4); CRobotPlan *a6=new CRobotPlan(" is_a", " door12", " door", NULL, a5); CRobotPlan *a7=new CRobotPlan(" is_a", " door23", " door", NULL, a6); CRobotPlan *a8=new CRobotPlan(" is_a", " door24", " door", NULL, a7); CRobotPlan *a9=new CRobotPlan(" is_a", " door34", " door", NULL, a8); CRobotPlan *a10=new CRobotPlan(" is_a", " door45", " door", NULL, a9); CRobotPlan *a11=new CRobotPlan(" is_a", " box1", " box", NULL, a10); CRobotPlan *a12=new CRobotPlan(" is_a", " box2", " box", NULL, a11); CRobotPlan *a13=new CRobotPlan(" is_a", " box3", " box", NULL, a12); CRobotPlan *a14=new CRobotPlan(" is_in", " robot", " room5", NULL, a13); CRobotPlan *a15=new CRobotPlan(" is_in", " box1", " room1", NULL, a14); CRobotPlan *a16=new CRobotPlan(" is_in", " box2", " room2", NULL, a15); CRobotPlan *a17=new CRobotPlan(" is_in", " box3", " room5", NULL, a16); CRobotPlan *a18=new CRobotPlan(" stands", " door12", " opened", NULL, a17); CRobotPlan *a19=new CRobotPlan(" stands", " door23", " closed", NULL, a18); CRobotPlan *a20=new CRobotPlan(" stands", " door24", " closed", NULL, a19); CRobotPlan *a21=new CRobotPlan(" stands", " door34", " closed", NULL, a20); CRobotPlan *a22=new CRobotPlan(" stands", " door45", " closed", NULL, a21); CRobotPlan *a23=new CRobotPlan(" connects", " door12", " room1", " room2", a22); CRobotPlan *a24=new CRobotPlan(" connects", " door12", " room2", " room1", a23); CRobotPlan *a25=new CRobotPlan(" connects", " door23", " room2", " room3", a24); CRobotPlan *a26=new CRobotPlan(" connects", " door23", " room3", " room2", a25); CRobotPlan *a27=new CRobotPlan(" connects", " door24", " room2", " room4", a26); CRobotPlan *a28=new CRobotPlan(" connects", " door24", " room4", " room2", a27); CRobotPlan *a29=new CRobotPlan(" connects", " door34", " room3", " room4", a28); CRobotPlan *a30=new CRobotPlan(" connects", " door34", " room4", " room3", a29); CRobotPlan *a31=new CRobotPlan(" connects", " door45", " room4", " room5", a30); CRobotPlan *a32=new CRobotPlan(" connects", " door45", " room5", " room4", a31); CRobotPlan *a33=new CRobotPlan(" is_at", " robot", " door45", NULL, a32); CRobotPlan *a34=new CRobotPlan(" is_a", " robot", " robot", NULL, a33); CRobotPlan *a35=new CRobotPlan(" is_with", " robot", " empty", NULL, a34); return a35; }
int CRobotPlan:: dbtest(char *a, char *b, char *c, char *d) {if(this) {if(d){if(! strcmp(relname, a) & &! strcmp(agent, b) & & ! strcmp(sobj1, c) & &! strcmp(sobj2, d)) return 1; else return next-> dbtest(a, b, c, d); } else {if(! strcmp(relname, a) & &! strcmp(agent, b) & &! strcmp(sobj1, c)) return 1; else return next-> dbtest(a, b, c, d); } } return 0; } int CRobotPlan:: dbtest(char *a, char *b, char *c) {if(this) {if(! strcmp(relname, a) & &! strcmp(agent, b) & &! strcmp(sobj1, c)) return 1; else return next-> dbtest(a, b, c); } return 0; }
int CRobotPlan:: dbtest(char *a, int i, char *c, char *d) {if(this) { if(d) {if(! strcmp(relname, a) & &! strcmp(sobj1, c) & &! strcmp(sobj2, d)) return 1; else return next-> dbtest(a, i, c, d); } else {if(! strcmp(relname, a) & &! strcmp(sobj1, c)) return 1; else return next-> dbtest(a, i, c, d); } } return 0; }
int CRobotPlan:: dbtest(char *a, int i, char *c, int j) {if(this) {if(! strcmp(relname, a) & &! strcmp(sobj1, c)) return 1; else return next-> dbtest(a, i, c, j); } return 0; }
CRobotPlan *CRobotPlan:: findfact(char *a, char *b) {if(this) {if(! strcmp(relname, a) & &! strcmp(agent, b)) {CRobotPlan *w=new CRobotPlan(a, b, sobj1, NULL); return w; } else return next-> findfact(a, b); } return NULL; }
CRobotPlan *CRobotPlan:: findfact(char *a, char *b, char *c) {if(this) {if(! strcmp(relname, a) & &! strcmp(agent, b) & &! strcmp(sobj1, c)) {CRobotPlan *w=new CRobotPlan(a, b, c, NULL); return w; } else return next-> findfact(a, b, c); } return NULL; }
CRobotPlan *CRobotPlan:: findfact(char *a, char *b, char *c, char *d) {if(this) {if(! strcmp(relname, a) & &! strcmp(agent, b) & & ! strcmp(sobj1, c) & &! strcmp(sobj2, d)) {CRobotPlan *w=new CRobotPlan(a, b, c, d, NULL); return w; } else return next-> findfact(a, b, c, d); } return NULL; }
CRobotPlan *CRobotPlan:: findfact(char *a, char *b, char *c, int i) {if(this) {if(! strcmp(relname, a) & &! strcmp(agent, b) & & ! strcmp(sobj1, c)) {CRobotPlan *w=new CRobotPlan(a, b, c, sobj2, NULL); return w; } else return next-> findfact(a, b, c, i); } return NULL; }
CRobotPlan *CRobotPlan:: findfact(char *a, int i, char *c, char *d) {if(this) {if(! strcmp(relname, a) & &! strcmp(sobj1, c) & &! strcmp(sobj2, d)) {CRobotPlan *w=new CRobotPlan(a, agent, c, d, NULL); return w; } else return next-> findfact(a, i, c, d); } return NULL; }
CRobotPlan *CRobotPlan:: findfact(char *a, int i, char *c, int j) {if(this) {if(! strcmp(relname, a) & &! strcmp(sobj1, c)) {CRobotPlan *w=new CRobotPlan(a, agent, c, sobj2, NULL); return w; } else return next-> findfact(a, i, c, j); } return NULL; }
char *CRobotPlan:: find_action() {
if(evil-> dbtest(" is_a", agent, " door") & & evil-> dbtest(" stands", agent, " closed")) return " open_door";
if(evil-> dbtest(" is_a", agent, " door") & & evil-> dbtest(" stands", agent, " opened")) return " close_door";
if(! (strcmp(relname, " is_with")) & & evil-> dbtest(" is_a", sobj1, " box") & & evil-> dbtest(" is_with", agent, " empty")) return " take_box";
if(! (strcmp(relname, " is_with")) & &! (strcmp(sobj1, " empty"))) return " put_box";
if(! (strcmp(relname, " is_at")) & & evil-> dbtest(" is_a", agent, " robot") & & evil-> dbtest(" is_a", sobj1, " door")) return " goto_door";
if(! (strcmp(relname, " is_at")) & & evil-> dbtest(" is_a", agent, " box") & & evil-> dbtest(" is_a", sobj1, " door")) return " move_box";
if(! (strcmp(relname, " is_at")) & & evil-> dbtest(" is_a", agent, " robot") & & evil-> dbtest(" is_a", sobj1, " box")) return " goto_box";
if(! (strcmp(relname, " is_at")) & & evil-> dbtest(" is_a", agent, " box") & & evil-> dbtest(" is_a", sobj1, " box")) return " push_box";
if(! (strcmp(relname, " is_in")) & & evil-> dbtest(" is_a", agent, " box") & & evil-> dbtest(" is_a", sobj1, " room")) return " push_box_other_room";
if(! (strcmp(relname, " is_in")) & & evil-> dbtest(" is_a", agent, " robot") & & evil-> dbtest(" is_a", sobj1, " room") & & ! (evil-> dbtest(" connects", 0, evil-> findfact(" is_in", " robot")-> sobj1, sobj1)) ) return " go_far_room";
if(! (strcmp(relname, " is_in")) & & evil-> dbtest(" is_a", agent, " robot") & & evil-> dbtest(" is_a", sobj1, " room") & & evil-> dbtest(" connects", 0, evil-> findfact(" is_in", " robot")-> sobj1, sobj1)) return " go_other_room";
else return " No action expected"; }
CRobotPlan * CRobotPlan:: delfactall(char *rel, char *n) {if(next) {if(! strcmp(relname, rel) & &! strcmp(agent, n)) return next-> delfactall(rel, n); else next=next-> delfactall(rel, n); } if(! strcmp(relname, rel) & &! strcmp(agent, n)) return NULL; else return this; }
CRobotPlan* CRobotPlan:: Revers(CRobotPlan *nr) {CRobotPlan *a=new CRobotPlan; while(nr-> next) {a= new CRobotPlan(nr-> relname, nr-> agent, nr-> sobj1, nr-> sobj2, a); nr=nr-> next; } return a; }
|