Otchet (990470)
Текст из файла
Отчет к лабораторной работе № 1
по дисциплине Теория Игр
Проектирование с помощью инструментального комплекса СИМПР
Программа имитирующая «Парк»
Выполнила студентка Группы А-05-03
Чуброва Н.Е
Приняли Гречкина П.В.
Еремеев А.П.
18.04.2007
МЭИ. 2007 г.
Содержание.
-
Постановка задачи.
-
Общее описание предметной области.
-
Описание табличной модели.
-
Приложение.
-
Постановка задачи.
Разработать табличную модель принятия решений в среде СИМПР для модели парка, и разработать имитационный модуль программы модели «Парк» с тремя людьми.
-
Общее описание предметной области.
Цель модели: Пройти заданное расстояние каждым человеком.
Человек 1 должен пройти по часовой стрелке 3 круга в парке, при этом, если встречает человека 2, он должен его пропустить, а если человека 3 – обойти.
Человек 2 проходит один раз парк из одного угла в противоположный, при этом, если он встречает человека 1, он проходит мимо, если человека 3, тоже, а если обоих, то пропускает человека 3.
Человек 3 должен пройти 3 круга против часовой стрелки, если встречает человека 1 – проходит мимо, человека 2 пропускает, а если обоих – проходит.
Вид программы:
-
Описание табличной модели.
Для реализации игры потребовалось 5 таблиц.
Таблица 1: Начало
Создает людей в начале игры
Таблица 2: Распределительная таблица
Принимает решение кому отдать ход.
Таблица 3: Стратегия человека 1
Принимает решение на очередной ход.
Таблица 4: Стратегия человека 2
Принимает решение на очередной ход.
Таблица 5: Стратегия человека 3
Принимает решение на очередной ход.
Приложение. Модуль исходных текстов программы. Разработано в среде Borland Developer Studio 2006.
unit ParkU1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, ExtCtrls, StdCtrls;
const
MESSAGE_STR='MyMessage';
No=0;
Yes=1;
type
TForm1 = class(TForm)
Image1: TImage;
ImageList1: TImageList;
Image2: TImage;
Image3: TImage;
Image4: TImage;
ListBox1: TListBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure FormCreate(Sender: TObject);
Procedure WNDProc ( var Message: Tmessage); override;
private
{ Private declarations }
public
msgSIMPR: UINT;
{ Public declarations }
end;
Type TMen = record
Edge : byte; //сторона квадрата, на которой человек [1,2,3,4]
PosM : byte; //точка на которой сейчас находится [1..107]
beg : boolean; //начал ли игрок
act : boolean; //присутствует ли сейчал в парке
obh : boolean; //обходит ли кого либо
PosO : byte; //номер шага обхода
Prop : boolean; //пропускаем ли кого то
PosP : byte; // шаг пропуска
IndE : array [1..4] of byte; //Номер картинки на стороне 1,2,3,4
SmX : Integer; // Смещение по Х
SmY : Integer; // Смещение по У
colK : byte; // количество пройденных кругов
NE : byte; // начальная сторона
NP : byte; // Начальная точка
end;
Type TPeople = array [1..3] of TMen;
var
Form1: TForm1;
mens : TPeople;
stor : byte; //задание начальной стороны человека
mp : byte; //задание случайной позиции человека
hod : byte; // кто последний ходил
met12 : Integer; // Метрики, для сохранения
Omet12 : Integer; // расстояния между людьми
met13 : Integer; // Если они уменьшаются, то люди приближаются
Omet13 : Integer; // --//--
met23 : Integer; // --//--
Omet23 : Integer; // --//--
flag : boolean; //просто флаг
last : integer; //кто последний ходил
count : integer; //сколько раз подряд
implementation
{$R *.dfm}
//процедура задержки
procedure Delay(msecs : Longint);
var FirstTick : longint;
begin FirstTick:=GetTickCount;
repeat Application.ProcessMessages;
until GetTickCount-FirstTick >= msecs;
end;
procedure TForm1.WndProc (var Message : TMessage);
var
res: boolean;
begin // of proc wnd
res:= false;
If message.Msg=msgSIMPR then
begin //2begin
//------------------------------------------------------------------------------
// Условия
//------------------------------------------------------------------------------
If message.WParamHi=0 then
begin
case message.WParamLo of //Выбор таблиц условий
//------------------------------Таблица № 1 Условия---------------------------
1: begin // 1
case message.LParam of
1: begin
if ((mens[1].beg=false )and
(mens[2].beg=false )and
(mens[3].beg=false)) then res := true;
end;
2: begin
res := mens[1].beg;
end;
3: begin
res := mens[2].beg;
end;
4: begin
res := mens[3].beg;
end;
end; //case Таблица 1 (условия)
end; //end таблицы 1 (условия)
//
//-------------(Условия)Таблица №2 - Распределитель парка-----------------------
2: begin // 2
case message.LParam of //c2
1: begin
if hod=0 then res := true;
if count>=30 then begin
mens[1].Prop:= false;
mens[2].Prop:= false;
mens[3].Prop:= false;
mens[1].PosP:=0;
mens[2].PosP:=0;
mens[3].PosP:=0;
end;
end;
2: begin
if hod=1 then res := true;
if count>=30 then begin
mens[1].Prop:= false;
mens[2].Prop:= false;
mens[3].Prop:= false;
mens[1].PosP:=0;
mens[2].PosP:=0;
mens[3].PosP:=0;
end;
end;
3: begin
if hod=2 then res := true;
if count>=30 then begin
mens[1].Prop:= false;
mens[2].Prop:= false;
mens[3].Prop:= false;
mens[1].PosP:=0;
mens[2].PosP:=0;
mens[3].PosP:=0;
end;
end;
4: begin
if hod=3 then res := true;
if count>=30 then begin
mens[1].Prop:= false;
mens[2].Prop:= false;
mens[3].Prop:= false;
mens[1].PosP:=0;
mens[2].PosP:=0;
mens[3].PosP:=0;
end;
end;
5: begin
if mens[1].act=true then res := true;
if count>=30 then begin
mens[1].Prop:= false;
mens[2].Prop:= false;
mens[3].Prop:= false;
mens[1].PosP:=0;
mens[2].PosP:=0;
mens[3].PosP:=0;
end;
end;
6: begin
if mens[2].act=true then res := true;
if count>=30 then begin
mens[1].Prop:= false;
mens[2].Prop:= false;
mens[3].Prop:= false;
mens[1].PosP:=0;
mens[2].PosP:=0;
mens[3].PosP:=0;
end;
end;
7: begin
if mens[3].act=true then res := true;
if count>=30 then begin
mens[1].Prop:= false;
mens[2].Prop:= false;
mens[3].Prop:= false;
mens[1].PosP:=0;
mens[2].PosP:=0;
mens[3].PosP:=0;
end;
end;
8: begin
if ((mens[1].act=false)and
(mens[2].act=false)and
(mens[3].act=false))then res := true;
ListBox1.Items.Clear;
label1.Caption:=IntToStr(met12);
label2.Caption:=IntToStr(met13);
label3.Caption:=IntToStr(met23);
label4.Caption:=IntToStr(omet12);
label5.Caption:=IntToStr(omet13);
label6.Caption:=IntToStr(omet23);
if count>=30 then begin
mens[1].Prop:= false;
mens[2].Prop:= false;
mens[3].Prop:= false;
mens[1].PosP:=0;
mens[2].PosP:=0;
mens[3].PosP:=0;
end;
end;
end; //case Таблица 2 (условия)
end; // end таблицы 2 (условия)
//
//-------------Таблица №3(Условия) Человек1 ------------------------------------
3: begin // 3
case message.LParam of //c3
1: begin
if ((met12>30)and((met13>40)or(mens[1].Edge<>mens[3].Edge) ))then res := true;
if (((met12<30)and(Omet12-met12<0))and
((met13>40)or (Omet13-met13<0))) then res := true;
if (((met13<40)and(Omet13-met13<0))and
((met12>30)or (Omet12-met12<0))) then res := true;
ListBox1.Items.Add('ч1 у1 ='+BoolToStr(res));
end;
2: begin
if (met12<=30) then res := true;
ListBox1.Items.Add('ч1 у2 ='+BoolToStr(res));
end;
3: begin
if (((met13<=40)and(mens[1].PosM+mens[3].PosM<107)and
(mens[1].Edge=mens[3].Edge))) then res := true;
ListBox1.Items.Add('ч1 у3 ='+BoolToStr(res));
label1.Caption:=IntToStr(met12);
label2.Caption:=IntToStr(met13);
label3.Caption:=IntToStr(met23);
label4.Caption:=IntToStr(omet12);
label5.Caption:=IntToStr(omet13);
label6.Caption:=IntToStr(omet23);
end;
4: begin
if met12<met13 then res := true;
ListBox1.Items.Add('ч1 у4 ='+BoolToStr(res));
end;
5: begin
if met13<met12 then res := true;
ListBox1.Items.Add('ч1 у5 ='+BoolToStr(res));
end;
6: begin
res := Mens[1].obh;
ListBox1.Items.Add('ч1 у6 ='+BoolToStr(res));
end;
7: begin
res := Mens[1].Prop;
ListBox1.Items.Add('ч1 у7 ='+BoolToStr(res));
end;
8: begin
if ((Mens[1].NE = Mens[1].Edge) and
(Mens[1].NP = Mens[1].PosM)) then res := true;
ListBox1.Items.Add('ч1 у8 ='+BoolToStr(res));
end;
9: begin
if Mens[1].colK=4 then res := true;
ListBox1.Items.Add('ч1 у9 ='+BoolToStr(res));
end;
end; //case Таблица 3 (условия)
end; // end таблицы 3 (условия)
//
//-------------Таблица №4(Условия) - Человек 2 ---------------------------------
4: begin // 4
case message.LParam of //c4
1: begin
if ((met12>30)and(met23>30))then res := true;
if (((met12<30)and(Omet12-met12<0))and
((met23>30)or (Omet23-met23<0))) then res := true;
if (((met23<30)and(Omet23-met23<0))and
((met12>30)or (Omet12-met12<0))) then res := true;
ListBox1.Items.Add('ч2 у1 ='+BoolToStr(res));
end;
2: begin
if (met12<=30) then res := true;
ListBox1.Items.Add('ч2 у2 ='+BoolToStr(res));
end;
3: begin
if (met23<=30) then res := true;
ListBox1.Items.Add('ч2 у3 ='+BoolToStr(res));
end;
4: begin
case mens[2].NE of
1: begin
if Image3.Top<33 then res:= true;
end;
2: begin
if Image3.Top>247 then res := true;
end;
3: begin
if Image3.Left<90 then res := true;
end;
4: begin
if Image3.Left>520 then res := true;
end;
end;
ListBox1.Items.Add('ч2 у4 ='+BoolToStr(res));
end;
end; //case Таблица 4 (условия)
end; // end таблицы 4 (условия)
//
//-------------Таблица №5(Условия) - Человек 3----------------------------------
5: begin // 5
case message.LParam of //c5
1: begin
if (((met13>40)or(mens[1].Edge<>mens[3].Edge) )and(met23>30))then res := true;
if (((met13<40)and(Omet13-met13<0))and
((met23>30)or (Omet23-met23<0))) then res := true;
if (((met13<40)and(Omet13-met13<0))and
((met23>30)or (Omet23-met23<0))) then res := true;
ListBox1.Items.Add('ч3 у1 ='+BoolToStr(res));
end;
2: begin
if ((met13<=40)and(mens[1].Edge=mens[3].Edge)) then res := true;
ListBox1.Items.Add('ч3 у2 ='+BoolToStr(res));
label1.Caption:=IntToStr(met12);
label2.Caption:=IntToStr(met13);
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















