Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Додаток а






    Текст програми системи планування дій робота

    у обмеженому робочому просторі

     

    // файл 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;

    }

     


     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.