Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Моё / ТИИК2_old.doc
Скачиваний:
17
Добавлен:
30.04.2013
Размер:
284.16 Кб
Скачать

Блок-схема алгоритма работы программы расчёта

SS=0, SP=0

Rn=random

Po=P

Po=Po+P

a=i+1

Pl[a,j]=1

Na[a,j]= Na[a,j]+1

SP=SP+1

Pl[i,j]=1

Na[i,j]= Na[i,j]-1

SS=SS+1

Pl[i,r+2-j]=Pl[i,r+1-j]

Pl[i,1]=0

SS=SS/10000

SP=SP/10000

ВЫВОД

SS,SP

Программа

unit TIIK;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

btEx: TButton;

btGo: TButton;

GroupBox3: TGroupBox;

lbe_r: TLabeledEdit;

lbe_h: TLabeledEdit;

GroupBox1: TGroupBox;

ed_L_beg: TEdit;

ed_L_end: TEdit;

GroupBox2: TGroupBox;

ed_m_end: TEdit;

ed_m_beg: TEdit;

lbe_t: TLabeledEdit;

lbe_d: TLabeledEdit;

GroupBox4: TGroupBox;

st_out: TMemo;

Label1: TLabel;

procedure btExClick(Sender: TObject);

procedure btGoClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btExClick(Sender: TObject);

begin

form1.Close;

end;

procedure TForm1.btGoClick(Sender: TObject);

var

SP,SS,P,Po,Rn: real; //задаём переменные типа real

i,j,L,m,t,k,r,h,d: integer; //задаём переменные целочисленного диапазона

Pl:array [1..30,1..10] of integer; //массив состояний платформ

Na:array [1..30,1..10] of integer; //массив состояний накопителей

SSstr,SPstr:string; //текстовые переменные

begin

h:=strtoint(lbe_h.text); //загружаем иисходные данные с формы

r:=strtoint(lbe_r.text);

P:=1/r;

st_out.Lines.Clear; //очищаем окно вывода

//образуем цикл для L и m

for L:=strtoint(ed_L_beg.Text) to strtoint(ed_L_end.Text) do for m:=strtoint(ed_m_beg.Text) to strtoint(ed_m_end.Text) do

begin

//Обнуляем переменные

SS:=0; SP:=0;

for i:=1 to 30 do for j:=1 to 10 do

begin

Pl[i,j]:=0; Na[i,j]:=0;

end;

//Задаём число тактов загрузочного конвейера

for t:=1 to strtoint(lbe_t.Text) do //задаём время процесса

for d:=1 to strtoint(lbe_d.Text) do //задаём производительность загрузочного конвейера

begin

for j:=1 to r do //осуществляем переход от одной загрузочной линии к другой

begin

Rn:=random; //используем генератор псевдослучайных чисел

i:=1; //присваиваем счётчику сортировочных линий значение 1

Po:=P;

if Rn>Po Then //Сравниваем значение Rn со значением Po, которое для каждой

begin //сортировочной линии равно сумме вероятностей попадания груза на предыдущие линии

Po:=Po+P;

i:=i+1;

// end;

//Таким образом выясняем, куда идет груз

//Далее узнаём, что происходит с грузом в узле

if Pl[i,j]=0 Then Pl[i,j]:=1 else if Na[i,j]=m Then SP:=SP+1 else inc(Na[i,j]);

end; //!!!

//если к узлу i,j подходит пустая платформа то она заполняется, если нет,

//то проверяем полный ли накопитель, если да то число повторов

//увеличивается на 1, если нет то в накопителе прибавляется груз

end;

//Выполняем процессы, протекающие в узлах при движении сортировочных линий

for k:=1 to L do

begin

//Производим перегрузку грузов из накопителей на сортировочные платформы

for i:=1 to h do for j:=1 to r do if Pl[i,j]=0 then if Na[i,j]>0 then

//на всех узлах проверяем состояние сортировочных платформ

begin

Pl[i,j]:=1; //если они пусты и в накопителе есть грузы, то платформа загружается

Na[i,j]:=Na[i,j]-1; //а в накопителе становится на 1 груз меньше

end;

//Осуществляем сдвиг платформ сортировочного конвейера на 1 позицию

for i:=1 to h do

begin

if Pl[i,r]=0 Then SS:=SS+1;

//если платформа в последнем узле была пуста, то число

//свободных платформ становится на 1 больше

for j:=2 to r do Pl[i,r+2-j]:=Pl[i,r+1-j]; //сдвигаем платформы на 1 позицию, начиная с конца

Pl[i,1]:=0; //платформы в первом узле пусты

end;

end;

end;

SS:=SS/strtoint(lbe_t.Text); //получаем интенсивность свободных платформ

SP:=SP/strtoint(lbe_t.Text); //получаем интенсивность повторов

//Выводим результат

st_out.lines.Add('L='+inttostr(l)+', m='+inttostr(m));

str(SS:0:0,SSstr); str(SP:0:6,SPstr);

st_out.lines.Add('Iс='+SSstr+', '+'Iп='+SPstr);

end;

st_out.Lines.Add('Готово!');

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

randomize;

end;

end.

Соседние файлы в папке Моё