Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБЫ Роб.docx
Скачиваний:
15
Добавлен:
11.04.2015
Размер:
311.49 Кб
Скачать

Построение и реализация моделирующих алгоритмов q-схем Метод особых состояний

Цель работы: выработка навыков алгоритмизации и программирования имитационных моделей систем массового обслуживания (СМО) методом особых состояний, фиксации и обработки данных в ходе статистических экспериментов с моделью.

Оборудование и программные средства: персональный компьютер, операционная система MS Windows XP/7/8, с системой программирования на языке высокого уровня (C++, С#) в среде MS Visual Studio.

Моделируемая система имеет вид:

Програмная реализация

Скриншот программы:

Код программы:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading;

using System.Windows.Forms;

namespace АняМоделирование

{

public partial class Form1 : Form

{

public List<IOnTickable> ObjsTick = new List<IOnTickable>();

public List<DrawingObj> ObjsDrawing = new List<DrawingObj>();

public List<Terminator> ObjsEnd = new List<Terminator>();

public float T = 0;

public float dt = 1 ;

public int TransactCountTotal;

public int TransactCount;

public Font font = new Font(FontFamily.GenericSansSerif, 6, FontStyle.Regular);

public Form1()

{

InitializeComponent();

DoubleBuffered = true;

}

protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint(e);

Graphics gd = e.Graphics;

gd.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

//-----------------

this.Draw(gd);

//-----------------

}

private void Draw(Graphics g)

{

foreach (DrawingObj item in this.ObjsEnd)

{

item.Draw(g);

}

foreach (DrawingObj item in this.ObjsTick)

{

item.Draw(g);

}

foreach (DrawingObj item in this.ObjsDrawing)

{

item.Draw(g);

}

}

private void button1_Click(object sender, EventArgs e)

{

new Thread(Run).Start();

}

private void Run()

{

int tmp = 0;

if (int.TryParse(this.textBox1.Text, out tmp))

{

this.TransactCountTotal = this.TransactCount = tmp;

while (!this.IsEnd())

{

this.Iterate();

}

this.Invalidate();

}

else

{

MessageBox.Show("вниматильнее!");

}

}

private void Iterate()

{

this.ObjsTick.Sort((a, b) =>

{

if (a.GetEventTime == b.GetEventTime) return 0;

if (a.GetEventTime > b.GetEventTime) return 1;

return -1;

});

if (this.ObjsTick[0].IsWork)

{

T = this.ObjsTick[0].GetEventTime;

this.ObjsTick[0].Iterate();

}

}

private bool IsEnd()

{

int sum = 0;

foreach (var item in this.ObjsEnd)

{

sum += item.Count;

}

return sum == this.TransactCountTotal;

}

private void Form1_Shown(object sender, EventArgs e)

{

Generator g = new Generator(new Point(100,100));

Servis p = new Servis(new Point(300,100));

Terminator t1 = new Terminator(new Point(500,100));

Terminator t2 = new Terminator(new Point(300,200));

g.nextNode = p;

p.nextNode = p.p1.nextNode = p.p2.nextNode = t1;

p.nextNodeOut = t2;

g.Owner = p.Owner = t1.Owner = t2.Owner = p.p1.Owner = p.p2.Owner = this;

this.ObjsTick.Add(g);

this.ObjsTick.AddRange(p.GetListPribors());

this.ObjsDrawing.Add(p);

this.ObjsEnd.Add(t1);

this.ObjsEnd.Add(t2);

}

}

}

}

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]