Лабораторные работы (2010) (Лабораторная работа №1)

Посмотреть архив целиком

Московский Энергетический Институт

Технический Университет













Лабораторная работа №1

Проектирование с помощью инструментального комплекса СИМПР.















Присадков Александр

А-13-06






Москва, 2010 г.

  1. Содержание.



Содержание -------------------------------------------------------------------------------------------------- 2

Постановка задачи ----------------------------------------------------------------------------------------- 3

Общее описание предметной области ----------------------------------------------------------------- 4

Описание табличной модели ----------------------------------------------------------------------------- 5

Приложение. Выдержки из программного кода с комментариями ---------------------------- 8

      • Процедура-функция WinProc() ---------------------------------------------------------- 8

      • Класс Submarine --------------------------------------------------------------------------- 12

Используемые источники и программное обеспечение ----------------------------------------- 16





































  1. Постановка задачи.

Проектирование с помощью инструментального комплекса СИМПР задачи принятия решения на примере поведения подводной лодки.


Пример выполнения программы:

Управляемый объект подводная лодка (желтым). Враг - корабль.

Слева – база подводной лодки, где производится пополнение боеприпасов.

На скриншоте подводная лодка запускает торпеду в корабль.






















  1. Общее описание предметной области.

Подводная лодка появляется с левой стороны на базе. Может нести на борту 4 торпеды.

При появлении вражеского корабля подводная лодка должна переместиться к врагу на расстояние дальнобойности орудий и запустить в него торпеду.

Если торпеды закончились или врага нет на границе, то подводная лодка должна приплыть обратно на базу.

Отплыв от берега, подводная лодка должна погрузиться под воду.

У берега подводная лодка должна всплывать, чтобы не врезаться в берег.



При старте программы вражеский корабль не запущен (картинка мигает).

Чтобы запустить корабль необходимо кликнуть на нем.

После уничтожения корабля, его мигающее изображение вновь появляется справой стороны для повторного запуска.



Начальное состояние программы:

















  1. Описание табличной модели.

В процессе разработки модели принятия решения подводной лодки была составлена

таблица:

  • Таблица 1 (Подводная лодка):

Данная таблица выполняет роль командира подводной лодки.

Таблица содержит 15 условий 9 действий и 18 правил.













Данная таблица полна и непротиворечива. Проверка выполнена в программно-инструментальном комплексе СИМПР.

Имеются логические следующие отношения:

c1->!c2

c1->!c3

c2->!c3

c2->!c12

c3->!c12

c4->!c5

c6->!c7

c8->!c10

c9->!c10


Трансляция последовательная:

Трансляция оптимизированная:











































  1. Приложение. Выдержки из программного кода с комментариями.

  1. Процедура-функция WinProc().


protected override void WndProc(ref Message m) // в эту функцию приходят все сообщения от СИМПРА

{


int wparamhi,wparamlo,wparam;

int lParam = Convert.ToInt32("" + m.LParam);

// Form1.ActiveForm.Text = "!!!";

if (m.Msg == simpr)

{


wparam = Convert.ToInt32("" + m.WParam);

wparamhi = wparam / 65536;

wparamlo = wparam - wparamhi * 65536;


if (wparamhi == 0)//условия

{

if (wparamlo == 1)// таблица 1

{

// int iss = Convert.ToInt32(true);

switch(lParam)

{

case 1:

m.Result = Form1.Subm.OnTop; // вернуть условие 1

break;

case 2:

m.Result = Form1.Subm.OnMiddle; // вернуть условие 2

break;

case 3:

m.Result = Form1.Subm.OnDown ; // вернуть условие 3

break;

case 4:

m.Result = Form1.Subm.Alive; // вернуть условие 4

break;

case 5:

m.Result = Form1.Subm.Dead; // вернуть условие 5

break;

case 6:

m.Result = Form1.Subm.RotOnE; // вернуть условие 6

break;

case 7:

m.Result = Form1.Subm.RotOnB; // вернуть условие 7

break;

case 8:

m.Result = Form1.Subm.OnDone; // вернуть условие 8

break;

case 9:

m.Result = Form1.Subm.EnougAmmo; // вернуть условие 9

break;

case 10:

m.Result = Form1.Subm.NEnougAmmo; // вернуть условие 10

break;

case 11:

m.Result = Form1.Subm.OnReload; // вернуть условие 11

break;

case 12:

m.Result = Form1.Subm.OnBase; // вернуть условие 12

break;

case 13:

m.Result = Form1.Subm.Far; // вернуть условие 13

break;

case 14:

m.Result = new IntPtr(Convert.ToInt32(Form1.ShipExists)); // вернуть условие 14

break;

case 15:

m.Result = Form1.Subm.NearBase; // вернуть условие 15

break;

default:

m.Result = new IntPtr(1);

break;


}

}

}

else if (wparamhi == 1)//действия

{

if (wparamlo == 1)// таблица 1

{

switch (lParam)

{

case 1:

Form1.Subm.down();

break;

case 2:

Form1.Subm.up();

break;

case 3:

Form1.Subm.fire();

break;

case 4:

Form1.Subm.rotateB();

break;

case 5:

Form1.Subm.rotateE();

break;

case 6:

Form1.Subm.reload();

break;

case 7:

Form1.Subm.pickup();

break;

case 8:

Form1.Subm.go();

break;

case 9:

Form1.Subm.stop();

break;

default:

break;


}

}


Application.DoEvents();

Thread.Sleep(300); // если у нас есть визуальное отображение, то задержку можно установить здесь

m.Result = new IntPtr(1); // ответом на запрос действия со стороны СИМПР должна быть единица


Случайные файлы

Файл
90854.rtf
167.rtf
180114.rtf
12517.rtf
115037.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.