06.12.2019, 00:56 [+3 UTC]
в нашей команде: 4 032 чел. | участники онлайн: 5 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.78 (18.11.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
29.11.2019, 17:59

Последний вопрос:
05.12.2019, 11:01
Всего: 151176

Последний ответ:
05.12.2019, 15:20
Всего: 259536

Последняя рассылка:
05.12.2019, 15:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
03.09.2010, 22:33 »
Anjali
Спасибо за подробную консультацию. [вопрос № 179848, ответ № 262962]
09.12.2015, 14:33 »
Kseniia
то, что не проходили не понятно до конца, а так все отлично [вопрос № 188391, ответ № 273039]
17.03.2016, 18:06 »
svrvsvrv
Большое спасибо! До этой задачи я думал, что Карлсон весит килограмм 50)) [вопрос № 188965, ответ № 273485]

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 694
puporev
Статус: Профессионал
Рейтинг: 481
Gluck
Статус: 9-й класс
Рейтинг: 443

Перейти к консультации №:
 

Консультация онлайн # 181114
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: novij2011
Отправлена: 05.12.2010, 16:38
Поступило ответов: 1

Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос:

Помогите пожалуйста правильно написать программу. (блок-схема прилагается)
Ссылка для скачивания задания
Блок-схема

тема:
Моделирование одноканальной СМО с буфером конечной емкости

Приложение:

Состояние: Консультация закрыта

Ответ # 264596 от CradleA (Профессор)

Здравствуйте, novij2011!

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Edit4: TEdit;
    Label6: TLabel;
    Edit5: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    Edit6: TEdit;
    Label9: TLabel;
    Edit7: TEdit;
    Label10: TLabel;
    Edit8: TEdit;
    Label11: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var K,p,n,m:integer;ro,Potk,Pbo,tz,bTz,tobsl,Tzvezda:real;
landa,Toc,T,Tk,Mi,R,Trazg:real;
begin
Landa:=Strtofloat(edit1.Text);//интенсивность автомобилей в час
Trazg:=Strtofloat(Edit2.Text)/60;//среднее время
Mi:=1/Trazg;
Tk:=24;//часов в сутки
P:=Strtoint(Edit3.Text);//емкость накопителя
ro:=  Landa/ Mi;
T := 0;
Tzvezda := 0;
K := 0;
n := 0;
m := 0;
Randomize;
R:=random;
tz := (1/Landa)*Ln(R);
bTz:=T+tz;
while T < Tk do  begin
if Tzvezda > bTz then    begin
T := bTz;
K := K+1;
if p+1 >= K then      begin
n := n+1;
end
else
begin
K := K-1;
m := m+1;
end;
if K = 1 then
begin
R:=random;
tobsl := -(1/Mi)*ln(R);
Tzvezda := bTz+tobsl;
end;

R:=Random;
tz := -(1/Landa)*ln(R);
bTz := bTz+tz;
end
else
begin
T := Tzvezda;
if K > 0 then
begin
K := K-1;
end;
if K = 0 then      begin
Tzvezda := Tk;
end
else
begin
R:=Random;
tobsl := -(1/Mi)*Ln(R);
Tzvezda := T+Tobsl;
end;end;end;
//вычисление характеристик
// клиентов прибыло
Edit4.Text:=inttostr(n);
//количество отказов
Edit5.Text:=inttostr(m);
// n-m количество обслуженных машин
//вероятность отказа
if ro = 1  then Potk := 1/(n-m+2)
else Potk := (Power(ro, (n-m-1))*(1-ro))/(1-(Power(ro, (n-m+2))));
// Potk:=m/n;
Edit6.Text:=floattostr(Potk);
// вероятность что будет обслужена без очереди
if ro = 1  then Pbo := Power(ro, n-m)*(1/(n-m+2))
else Pbo := Power(ro, n-m)*((1-ro)/(1-(Power(ro, n-m-2))))  ;
Edit7.Text:=floattostr(Pbo);
// время ожидания
if ro = 1  then Toc:=( 1/Landa)* ((n-m)*((n-m)+1)/(2*(n-m+2)))
else Toc:=(1/ Landa)*(ro*ro*(1-Power(ro, n-m)*(n-m+1-(n-m)*ro))/((1-Power(ro, n-m+2))*(1-ro))) ;
Edit8.Text:=floattostr(Toc);
end;
end.


Консультировал: CradleA (Профессор)
Дата отправки: 08.12.2010, 20:02

5
спасибо за помощь
-----
Дата оценки: 08.12.2010, 20:09

Рейтинг ответа:

+1

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 181114
неизвестный

# 1

= общий = | 05.12.2010, 19:23

smile smile

CradleA
Профессор

ID: 325460

# 2

= общий = | 06.12.2010, 13:37 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

а в чем у Вас проблема?
так не анализируя с поверхностного взгляда Вы вроде все по алгоритму написали...???
ну вот только лишние
else
begin
end;
можно по убирать
а так вроде все в соответствии с блок-схемой

=====
to live is to die

неизвестный

# 3

= общий = | 06.12.2010, 14:34

в соответствии, да программа то неработает и еще надо дописать формулы из задания

=====
to live is to die

CradleA
Профессор

ID: 325460

# 4

= общий = | 06.12.2010, 14:39 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

ошибки при компиляции?
нет под рукой делфи скомпилировать глянуть.
можете описать что не работает?
и что значит формулы из задания, в задании написано смоделировать, я так понял написать алгоритм, а именно запрограммировать блок-схему.
или поссчитать вероятности и тому подобное, но это надо отдельные алгоритмы?

=====
to live is to die

неизвестный

# 5

= общий = | 06.12.2010, 16:04

там где вычисление характеристик нужно написать формулы из задания.
Прикрепил файл исходника. Пока вылазит ошибка floating point divizion by zero. в строке 89: tz := -(1/Landa)*ln(R);

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

=====
to live is to die

-----
 Прикрепленный файл:  скачать (RAR) » [225.9 кб]

CradleA
Профессор

ID: 325460

# 6

= общий = | 06.12.2010, 19:43 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

эх, чего-то расходится в первом цикле, завтра если не поздно разберемся :)

=====
to live is to die

неизвестный

# 7

= общий = | 06.12.2010, 20:21

smile

=====
to live is to die

Сергей Бендер
Профессионал

ID: 304622

# 8

= общий = | 07.12.2010, 12:24 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
CradleA:

Обратите внимание, это как бы продолжение вопроса 180699 -- другое задание в этом курсе. Там многое было разъяснено.

CradleA
Профессор

ID: 325460

# 9

= общий = | 07.12.2010, 13:46 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Сергей Бендер:

спасибо огромное, я помню этот вопрос, все никак не мог его найти.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 10

= общий = | 07.12.2010, 13:48 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

продолжим разбирать Ваш вопрос?
сейчас найдем почему получается деление на нуль, и приведем Вашу программу к более толковому виду :)

=====
to live is to die

неизвестный

# 11

= общий = | 07.12.2010, 14:23

кстате велечины которые в часах нужно перевести тоже надо будет перевести в минуты, а то я забыл.

© Цитата: CradleA
продолжим разбирать Ваш вопрос?
сейчас найдем почему получается деление на нуль, и приведем Вашу программу к более толковому виду :)


там помойму получается так потому что у рандома выскакивали числа от минуса до плюса. Нужно написать просто random()
т.к. числа random должны получаться от 0 до 1

=====
to live is to die

CradleA
Профессор

ID: 325460

# 12

= общий = | 07.12.2010, 15:03 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

ну вблок-схеме же написано что нужно от 0 до 100
сейчас посмотрим
да действительно от 0 до 1
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Math;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Label5: TLabel;
Edit4: TEdit;
Label6: TLabel;
Edit5: TEdit;
Label7: TLabel;
Label8: TLabel;
Edit6: TEdit;
Label9: TLabel;
Edit7: TEdit;
Label10: TLabel;
Edit8: TEdit;
Label11: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var K,i,p,n,m:integer;
Potk,tz,bTz,tobsl,Tzvezda:real;
landa,T,Tk,Mi,R,Trazg:real;
begin
Landa:=Strtofloat(edit1.Text)/60;//интенсивность автомобилей в мин
trazg:=Strtofloat(Edit2.Text);//среднее время
Mi:=1/Trazg;
Tk:=720;//минут в сутки
P:=Strtoint(Edit3.Text);//емкость накопителя
T := 0;
Tzvezda := 0;
K := 0;
n := 0;
m := 0;
Randomize;
R:=random;
tz := (1/Landa)*Ln(R);
bTz:=T+tz;
while T < Tk do
begin
if Tzvezda > bTz then
begin
T := bTz;
K := K+1;
if p+1 >= K then
begin
n := n+1;
end
else
begin
K := K-1;
m := m+1;
end;
if K = 1 then
begin
R:=random;
tobsl := -(1/Mi)*ln(R);
Tzvezda := bTz+tobsl;
end
else
begin
end;
R:=Random;
tz := -(1/Landa)*ln(R);
bTz := bTz+tz;
end
else
begin
T := Tzvezda;
if K > 0 then
begin
K := K-1;
end
else
begin
end;
if K = 0 then
begin
Tzvezda := Tk;
end
else
begin
R:=Random;
tobsl := -(1/Mi)*Ln(R);
Tzvezda := T+Tobsl;
end;
end;
end;
//вычисление характеристик
Edit5.Text:=inttostr(n);
//вероятность отказа
if p = 1
then Potk := 1/(m+2)
else Potk := (Power(p, (m-1))*(1-p))/(1-(Power(p, (m+2))));
Edit6.Text:=floattostr(Potk);

end;
end.


пример, вот так считает, нам осталось рассчитать
кол-во прибывших автомобилей
вероятность что клиент обслуживается без ожидания
и среднее время ожидания клиента в очереди
так я понимаю?

=====
to live is to die

неизвестный

# 13

= общий = | 07.12.2010, 15:06

© Цитата:
пример, вот так считает, нам осталось рассчитать
кол-во прибывших автомобилей
вероятность что клиент обслуживается без ожидания
и среднее время ожидания клиента в очереди
так я понимаю?

получается осталось только это, если правильно написана программа.

=====
to live is to die

неизвестный

# 14

= общий = | 07.12.2010, 15:13

а за клиентов, получивших откзаз у нас отвечает переменная n ?

=====
to live is to die

CradleA
Профессор

ID: 325460

# 15

= общий = | 07.12.2010, 16:20 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

давайте по порядку.
разберемся с блок-схемой Вы ее сами рисовали?
и я так понимаю что
n- количество отказов (по программе и результатам похоже это количество принятых)
m- количество прибывших автомобилей (количество отказов)
вот К что?

=====
to live is to die

CradleA
Профессор

ID: 325460

# 16

= общий = | 07.12.2010, 16:29 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

M,T,K
это тоже что
в начале их вычитываем?
Landa интенсивность авто
P - ёмкость накопителя
почему к=0? ведь при равенстве k=0 происходит выход из алгоритма?


/вычисление характеристик
// клиентов прибыло
Edit4.Text:=inttostr(n);
//вколичество отказов
Edit5.Text:=inttostr(m);
//вероятность отказа
if p = 1
then Potk := 1/(m+2)
else Potk := (Power(p, (m-1))*(1-p))/(1-(Power(p, (m+2))));
Edit6.Text:=floattostr(Potk);

сейчас с временами разберемся

=====
to live is to die

неизвестный

# 17

= общий = | 07.12.2010, 17:14

bTz- время прихода заявки
Т -текущее время
Тzvezda -время окончания обслуживания
К-количество заявок в системе(в блок схеме ему сначала присваивается ноль)
р-емкость накопителя
landa - интенсивность автомобилей
m- количество обслуженных заявок(если не перепутал)
Mi - среднее время необходимое для обслуживания клиента банкоматом в минуту

=====
to live is to die

CradleA
Профессор

ID: 325460

# 18

= общий = | 07.12.2010, 17:14 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

- среднее время ожидания клиента в очереди. = Tоч
- вероятность того, что прибывающий клиент обслуживается без ожидания Pkk*P0
k=10

=====
to live is to die

неизвестный

# 19

= общий = | 07.12.2010, 17:26

© Цитата: CradleA
вероятность того, что прибывающий клиент обслуживается без ожидания(как-то не придумывается
)
вот это надо подумать. Формылы вроде нет.
© Цитата: CradleA
- среднее время ожидания клиента в очереди. = Tоч

а вот это вычисляется.
Сначала вычислить Nоч(Среднее число заявок в очереди)
А потом Tоч (Среднее число заявок, находящихся в системе (как в очереди, так и под обслуживанием)

сложно написано, трудно написать.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 20

= общий = | 07.12.2010, 18:11 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Math;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Label5: TLabel;
Edit4: TEdit;
Label6: TLabel;
Edit5: TEdit;
Label7: TLabel;
Label8: TLabel;
Edit6: TEdit;
Label9: TLabel;
Edit7: TEdit;
Label10: TLabel;
Edit8: TEdit;
Label11: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var K,i,p,n,m:integer;
ro,Potk,Pbo,tz,bTz,tobsl,Tzvezda:real;
landa,Toc,T,Tk,Mi,R,Trazg:real;
begin
Landa:=Strtofloat(edit1.Text);//интенсивность автомобилей в час
Trazg:=Strtofloat(Edit2.Text)/60;//среднее время
Mi:=1/Trazg;
Tk:=12;//минут в сутки
P:=Strtoint(Edit3.Text);//емкость накопителя
ro:= Landa/ Mi;
T := 0;
Tzvezda := 0;
K := 0;
n := 0;
m := 0;
Randomize;
R:=random;
tz := (1/Landa)*Ln(R);
bTz:=T+tz;
while T < Tk do
begin
if Tzvezda > bTz then
begin
T := bTz;
K := K+1;
if p+1 >= K then
begin
n := n+1;
end
else
begin
K := K-1;
m := m+1;
end;
if K = 1 then
begin
R:=random;
tobsl := -(1/Mi)*ln(R);
Tzvezda := bTz+tobsl;
end
else
begin
end;
R:=Random;
tz := -(1/Landa)*ln(R);
bTz := bTz+tz;
end
else
begin
T := Tzvezda;
if K > 0 then
begin
K := K-1;
end
else
begin
end;
if K = 0 then
begin
Tzvezda := Tk;
end
else
begin
R:=Random;
tobsl := -(1/Mi)*Ln(R);
Tzvezda := T+Tobsl;
end;
end;
end;

//вычисление характеристик
// клиентов прибыло
Edit4.Text:=inttostr(n);
//вколичество отказов
Edit5.Text:=inttostr(m);

//вероятность отказа
if ro = 1
then Potk := 1/(m+2)
else Potk := (Power(p, (m-1))*(1-p))/(1-(Power(p, (m+2))));
Edit6.Text:=floattostr(Potk);




//вероятность отказа
if ro = 1
then Potk := 1/(m+2)
else Potk := (Power(p, (m-1))*(1-p))/(1-(Power(p, (m+2))));
Edit6.Text:=floattostr(Potk);


// вероятность что будет обслужена без очереди
if ro = 1
then Pbo := Power(ro, P)*(1/(m+2))
else Pbo := Power(ro, P)*((1-ro)/(1-(Power(ro, (P)))));
Edit7.Text:=floattostr(Pbo);


// время ожидания
if ro = 1
then Toc:=(1/ Landa)*(ro*ro*(1-Power(ro, m)*(m+1-m*ro))/((1-Power(ro, m+2))*(1-ro)))
else Toc:=( 1/Landa)* (m*(m+1)/(2*(m+2)));
Edit8.Text:=floattostr(Toc);


end;
end.


смотрим проверяем!

=====
to live is to die

CradleA
Профессор

ID: 325460

# 21

= общий = | 07.12.2010, 18:12 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

вы еще не проработали с вычислением ро и не перевели все в одни единицы, вроде все добавил, посмотрите.
Элементы теории массового обслуживания - тут хорошо расписана задача
если все хорошо оформим как ответ :)

=====
to live is to die

неизвестный

# 22

= общий = | 07.12.2010, 18:50

© Цитата: CradleA
вы еще не проработали с вычислением ро и не перевели все в одни единицы, вроде все добавил, посмотрите.
Элементы теории массового обслуживания - тут хорошо расписана задача
если все хорошо оформим как ответ :)

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

=====
to live is to die

неизвестный

# 23

= общий = | 07.12.2010, 18:58

и кстате landa ведь вроде должно быть поделено на 60 а trazg оставлено как есть(т.е. без деления на 60).
Если моделирование в течение суток то почему стало 12, а не 720?

=====
to live is to die

CradleA
Профессор

ID: 325460

# 24

= общий = | 07.12.2010, 19:04 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

все переводим в часы!
поэтому лямду не трогаем а вот время разгрузки надо разделить на 60
а откуда взяли 720? если 720 делить на 60 то получается 12 часов, можно и в сутки за моделировать тогда вместо 12 ставим 24

=====
to live is to die

CradleA
Профессор

ID: 325460

# 25

= общий = | 07.12.2010, 19:09 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

//вероятность отказа
if ro = 1
then Potk := 1/(m+2)
else Potk := (Power(ro, (m-1))*(1-ro))/(1-(Power(ro, (m+2))));
Edit6.Text:=floattostr(Potk);

// вероятность что будет обслужена без очереди
if ro = 1
then Pbo := Power(ro, P)*((1-ro)/(1-(Power(ro, (P)))))
else Pbo := Power(ro, P)*(1/(m+2));
Edit7.Text:=floattostr(Pbo);

// время ожидания
if ro = 1
then Toc:=( 1/Landa)* (m*(m+1)/(2*(m+2)))
else Toc:=(1/ Landa)*(ro*ro*(1-Power(ro, m)*(m+1-m*ro))/((1-Power(ro, m+2))*(1-ro))) ;

была ошибочка со временем ожидания и вероятностью без очереди и в вероятности отказа тоже в формуле ро используется

=====
to live is to die

неизвестный

# 26

= общий = | 07.12.2010, 19:14

© Цитата: CradleA
все переводим в часы!
поэтому лямду не трогаем а вот время разгрузки надо разделить на 60
а откуда взяли 720? если 720 делить на 60 то получается 12 часов, можно и в сутки за моделировать тогда вместо 12 ставим 24


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

Кстате, может подскажешь как решить аналитически вот сдесь (это пример с сайта)

http://s46.radikal.ru/i112/1012/62/f64159389f10.png
нужно аналитически просто еще всо посчитать, чтобы убедиться в правильности ответа.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 27

= общий = | 07.12.2010, 19:18 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

r- это ро в нашем случае 1.2
N+1 - это 10
ну и соответственно P10 надо
вроде все верно теперь :)
т.е. P10=ро*P0

=====
to live is to die

неизвестный

# 28

= общий = | 07.12.2010, 19:22

© Цитата: CradleA
r- это ро в нашем случае 1.2
N+1 - это 10
ну и соответственно P10 надо
вроде все верно теперь :)
т.е. P10=ро*P0

спасибо.

И еще.Как ты формулы изменил очень сильно стали числа давать разброс значений.
smile кстате в сутках то 24 часа smile

=====
to live is to die

неизвестный

# 29

= общий = | 07.12.2010, 19:24

щас только заметил что нет формулы для среднее время ожидания клиента в очереди
формула педпоследняя (называется в задании Среднее время ожидания заявки в очереди)

Огромная(сост.из двух формул) smile

=====
to live is to die

CradleA
Профессор

ID: 325460

# 30

= общий = | 07.12.2010, 19:26 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

 Среднее время ожидания заявки в очереди: T=1/λ*Nоч

цифры начали скакать т.к. все зависит от прибывших машин, я немного перепутал записи местами, да и поправил на 24
Tk:=24;//часов в сутки вроде все верно, цифры похожие.

=====
to live is to die

неизвестный

# 31

= общий = | 07.12.2010, 19:30
CradleA:

вопрос:

Trazg:=Strtofloat(Edit2.Text)/60;//среднее время

если мы считаем в час, то ведь надо умножать на 60?

=====
to live is to die

CradleA
Профессор

ID: 325460

# 32

= общий = | 07.12.2010, 19:34 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

в одном часу - 60 минут
1 минута 1/60 часа
следовательно 6 мин это 6/60 часа
1ч=60 мин
x ч=6 мин

=====
to live is to die

неизвестный

# 33

= общий = | 07.12.2010, 19:41

что то не сходится аналитическ рассчитанная вероятность отказа и программаная.
аналитическая(0,2360) а программная (0,1157)

=====
to live is to die

CradleA
Профессор

ID: 325460

# 34

= общий = | 07.12.2010, 19:48 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

как производили?
к примеру прибыло m=200 маши
тогда
P=(1.2200(1-1.2))/(1-1.2202)
у меня получилось 0.13

=====
to live is to die

неизвестный

# 35

= общий = | 07.12.2010, 19:57

[DCC Hint] Unit1.pas(136): H2077 Value assigned to 'Toc' never used
[DCC Hint] Unit1.pas(137): H2077 Value assigned to 'Toc' never used
[DCC Hint] Unit1.pas(46): H2164 Variable 'i' is declared but never used in 'TForm1.Button1Click'
вот эти сообщения у меня выдает в Message - это серьезные ошибки или нет?

Интенсивность потока обслуживаний автомобилей=1/0,1=10
Приведенная интенсивность потока автомобилей=12/10= =1,2

Вычислим вероятности нахождения п заявок в системе
р0=(1-1,2)/1-1,2^10)==-0,2/-5,1917=0,0385
p10=pотк=0.2383

взял формулы на сайте

=====
to live is to die

CradleA
Профессор

ID: 325460

# 36

= общий = | 08.12.2010, 11:15 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

так отказ это вероятность что машина не будет принята, причем тут P10?
вероятность отказа, если Вы хотите посчитать, так это Вам нужно взять из программы количество не обслуженных машин разделить на количество прибывших!
ошибки а откуда ошибка по Toc? и просто в определении удалить ...

=====
to live is to die

неизвестный

# 37

= общий = | 08.12.2010, 11:31

ну ладно, в приципе можешь оформлять в виде ответа.
Если не считать после закрытия программы [DCC Hint] Unit1.pas(138): H2077 Value assigned to 'Toc' never used

еще у меня говорит что неизвесный идентификатор power в формулах. uses math подключен

=====
to live is to die

CradleA
Профессор

ID: 325460

# 38

= общий = | 08.12.2010, 11:35 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

просто у меня ошибок нет.
хорошо сейчас выложу ответ, все еще раз сверяйте и удачи на сдаче, если будут какие вопросы обращайтесь :)
еще одно замечание, обратите внимание при сдаче, все вероятности и времена рассчитаны аналитически исходя из количества прибывших машин!

=====
to live is to die

неизвестный

# 39

= общий = | 08.12.2010, 11:38

© Цитата: CradleA
просто у меня ошибок нет.
хорошо сейчас выложу ответ, все еще раз сверяйте и удачи на сдаче, если будут какие вопросы обращайтесь :)


наверное у меня копилятор особенный smile

=====
to live is to die

CradleA
Профессор

ID: 325460

# 40

= общий = | 08.12.2010, 11:43 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

есть предложение обсудить еще небольшой вопрос, смотрите у нас все данные на выходе зависят от моделирования процесса, а именно от кол-ва прибывших машин можете пояснить откуда файл с заданиями? в нем что значит m, не ошибаемся ли ы, считая что m- в этом файле это количество прибывших машин?

=====
to live is to die

неизвестный

# 41

= общий = | 08.12.2010, 11:48

файл с заданиями нам скинул преподаватель.
k- количество заявок в системе (получается еаверное количество машин в системе), m - к-во вроде обслуженных машин.

=====
to live is to die

неизвестный

# 42

= общий = | 08.12.2010, 11:49

А что возможно программа не так составлена? Т.е. надо дорабатывать блок схему?

=====
to live is to die

неизвестный

# 43

= общий = | 08.12.2010, 11:54

© Цитата: CradleA
есть предложение обсудить еще небольшой вопрос, смотрите у нас все данные на выходе зависят от моделирования процесса

тк и должно быть. Просто если все время нажимать кнопку решить, то значения в edit-ах не должны сильно меняться. Только сотые, десятые в числе.

Когда я делал первую программу я задавал большое время моделирования, а тут написано всего лишь сутки.

p.s. сейчас мне нужно идти. Вечером отввечу, если будут вопросы.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 44

= общий = | 08.12.2010, 12:04 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

дело в том что у нас в программе n- количество прибывших машин, а m- количество отказов.
поэтому вероятности надо пересчитать.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 45

= общий = | 08.12.2010, 13:15 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

итоговая версия такова

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Edit4: TEdit;
    Label6: TLabel;
    Edit5: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    Edit6: TEdit;
    Label9: TLabel;
    Edit7: TEdit;
    Label10: TLabel;
    Edit8: TEdit;
    Label11: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var K,p,n,m:integer;
ro,Potk,Pbo,tz,bTz,tobsl,Tzvezda:real;
landa,Toc,T,Tk,Mi,R,Trazg:real;
begin
Landa:=Strtofloat(edit1.Text);//интенсивность автомобилей в час
Trazg:=Strtofloat(Edit2.Text)/60;//среднее время
Mi:=1/Trazg;
Tk:=24;//часов в сутки
P:=Strtoint(Edit3.Text);//емкость накопителя
ro:=  Landa/ Mi;
  T := 0;
  Tzvezda := 0;
  K := 0;
  n := 0;
  m := 0;
  Randomize;
  R:=random;
  tz := (1/Landa)*Ln(R);
  bTz:=T+tz;
  while T < Tk do
  begin
    if Tzvezda > bTz then
    begin
      T := bTz;
      K := K+1;
      if p+1 >= K then
      begin
        n := n+1;
      end
      else
      begin
        K := K-1;
        m := m+1;
      end;
      if K = 1 then
      begin
        R:=random;
        tobsl := -(1/Mi)*ln(R);
        Tzvezda := bTz+tobsl;
      end
      else
      begin
      end;
      R:=Random;
      tz := -(1/Landa)*ln(R);
      bTz := bTz+tz;
    end
    else
    begin
      T := Tzvezda;
      if K > 0 then
      begin
        K := K-1;
      end
      else
      begin
      end;
      if K = 0 then
      begin
        Tzvezda := Tk;
      end
      else
      begin
        R:=Random;
        tobsl := -(1/Mi)*Ln(R);
        Tzvezda := T+Tobsl;
      end;
    end;
  end;

//вычисление характеристик
// клиентов прибыло
Edit4.Text:=inttostr(n);
//вколичество отказов
Edit5.Text:=inttostr(m);



// n-m количество обслуженных машин

//вероятность отказа
  if ro = 1
  then Potk := 1/(n-m+2)
  else Potk := (Power(ro, (n-m-1))*(1-ro))/(1-(Power(ro, (n-m+2))));
 // Potk:=m/n;   // я бы написал так
Edit6.Text:=floattostr(Potk);


 // вероятность что будет обслужена без очереди
if ro = 1
  then Pbo := Power(ro, n-m)*(1/(n-m+2))
  else Pbo := Power(ro, n-m)*((1-ro)/(1-(Power(ro, n-m-2))))  ;
Edit7.Text:=floattostr(Pbo);


 // время ожидания
if ro = 1
  then Toc:=( 1/Landa)* ((n-m)*((n-m)+1)/(2*(n-m+2)))
 else Toc:=(1/ Landa)*(ro*ro*(1-Power(ro, n-m)*(n-m+1-(n-m)*ro))/((1-Power(ro, n-m+2))*(1-ro))) ;

Edit8.Text:=floattostr(Toc);


end;
end.

=====
to live is to die

неизвестный

# 46

= общий = | 08.12.2010, 16:04

а кстате если вы посмотрите мой код то там встречаются неубранные begin end без содержимого, но почему то когда их уберешь то программа перестает работать правильно? smile

=====
to live is to die

CradleA
Профессор

ID: 325460

# 47

= общий = | 08.12.2010, 16:17 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

там все нужно аккуратно посмотреть и по убирать else, и ; правильно расставить.

=====
to live is to die

неизвестный

# 48

= общий = | 08.12.2010, 16:37

вроде правильно работает. Убрал begin end

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Edit4: TEdit;
    Label6: TLabel;
    Edit5: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    Edit6: TEdit;
    Label9: TLabel;
    Edit7: TEdit;
    Label10: TLabel;
    Edit8: TEdit;
    Label11: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var K,p,n,m:integer;ro,Potk,Pbo,tz,bTz,tobsl,Tzvezda:real;
landa,Toc,T,Tk,Mi,R,Trazg:real;
begin
Landa:=Strtofloat(edit1.Text);//интенсивность автомобилей в час
Trazg:=Strtofloat(Edit2.Text)/60;//среднее время
Mi:=1/Trazg;Tk:=24;//часов в сутки
P:=Strtoint(Edit3.Text);//емкость накопителя
ro:=  Landa/ Mi;
T := 0;
Tzvezda := 0;
K := 0;
n := 0;
m := 0;
Randomize;
R:=random;
tz := (1/Landa)*Ln(R);
bTz:=T+tz;
while T < Tk do  begin
if Tzvezda > bTz then    begin
T := bTz;
K := K+1;
if p+1 >= K then      begin
n := n+1;
end
else
begin
K := K-1;
m := m+1;
end;
if K = 1 then
begin
R:=random;
tobsl := -(1/Mi)*ln(R);
Tzvezda := bTz+tobsl;
end;

R:=Random;
tz := -(1/Landa)*ln(R);
bTz := bTz+tz;
end
else
begin
T := Tzvezda;
if K > 0 then
begin
K := K-1;
end;
if K = 0 then      begin
Tzvezda := Tk;
end
else
begin
R:=Random;
tobsl := -(1/Mi)*Ln(R);
Tzvezda := T+Tobsl;
end;end;end;
//вычисление характеристик
// клиентов прибыло
Edit4.Text:=inttostr(n);//вколичество отказов
Edit5.Text:=inttostr(m);// n-m количество обслуженных машин
//вероятность отказа
if ro = 1  then Potk := 1/(n-m+2)
else Potk := (Power(ro, (n-m-1))*(1-ro))/(1-(Power(ro, (n-m+2))));
// Potk:=m/n;
// я бы написал так
Edit6.Text:=floattostr(Potk); // вероятность что будет обслужена без очереди
if ro = 1  then Pbo := Power(ro, n-m)*(1/(n-m+2))
else Pbo := Power(ro, n-m)*((1-ro)/(1-(Power(ro, n-m-2))))  ;
Edit7.Text:=floattostr(Pbo); // время ожидания
if ro = 1  then Toc:=( 1/Landa)* ((n-m)*((n-m)+1)/(2*(n-m+2)))
else Toc:=(1/ Landa)*(ro*ro*(1-Power(ro, n-m)*(n-m+1-(n-m)*ro))/((1-Power(ro, n-m+2))*(1-ro))) ;
Edit8.Text:=floattostr(Toc);
end;
end.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 49

= общий = | 08.12.2010, 18:16 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

вот вроде все красиво :)
оформляем ответом?

=====
to live is to die

неизвестный

# 50

= общий = | 08.12.2010, 19:17

оформляй smile

=====
to live is to die

неизвестный

# 51

= общий = | 08.12.2010, 19:23

вот вроде все красиво :)

Иногда красиво, но неправильно. smile
Надеюсь алгоритм программы написан правильно,а то в прошлом вопросе пришлось координально переписывать мой алгоритм програмы.
180699

=====
to live is to die

CradleA
Профессор

ID: 325460

# 52

= общий = | 08.12.2010, 20:00 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

цифры вроде красивые получаются, схожие, если будут какие вопросы дорешаем.
могли чего не так понять в задаче smile smile

=====
to live is to die

неизвестный

# 53

= общий = | 08.12.2010, 20:14
CradleA:

© Цитата:
цифры вроде красивые получаются, схожие, если будут какие вопросы дорешаем.
могли чего не так понять в задаче


Спасибо. Завтра проверю, правильно ли написана программа. Если что вечером отпишусь.
А то ответы то выдает, но вдруг у преподавателя другой ответ. smile smile

=====
to live is to die

Сергей Бендер
Профессионал

ID: 304622

# 54

= общий = | 08.12.2010, 22:43 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
CradleA:

Я вот чего пока не смог понять: зачем отдельно прописано условие "if K = 1"?

CradleA
Профессор

ID: 325460

# 55

= общий = | 09.12.2010, 10:54 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

для ро
проще проверять, правильнее конечно же сделать так
if ro =1 then do
begin
// описываем все что удовлетворяет данное условие
end
else
begin
// описываем все что удовлетворяет данное условие
end;

Вы хорошо заметили, когда приведете к такому виду код станет более правильным, но так как он представлен в данном случае он более наглядный.

а вот с к сложно так сходу сказать, но в блок-схеме модели есть, наверное ж надо, может это связано с обработкой и временем на обработку и поступлением заявки.

=====
to live is to die

неизвестный

# 56

= общий = | 09.12.2010, 11:30
CradleA:

мы же забыливычислить среднее время ожидания клиента в очереди
Сейчас напишу как вычислять.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 57

= общий = | 09.12.2010, 11:32 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

if ro = 1 then Toc:=( 1/Landa)* ((n-m)*((n-m)+1)/(2*(n-m+2)))
else Toc:=(1/ Landa)*(ro*ro*(1-Power(ro, n-m)*(n-m+1-(n-m)*ro))/((1-Power(ro, n-m+2))*(1-ro))) ;
Edit8.Text:=floattostr(Toc);
а это что?

=====
to live is to die

неизвестный

# 58

= общий = | 09.12.2010, 11:36
CradleA:

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

Как то так.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 59

= общий = | 09.12.2010, 11:38 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

о как круто :)
да... так и все остальные параметры надо бы вычислять похожими методами.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 60

= общий = | 09.12.2010, 11:39 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

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

=====
to live is to die

неизвестный

# 61

= общий = | 09.12.2010, 11:42

я сам в шоке smile

=====
to live is to die

неизвестный

# 62

= общий = | 09.12.2010, 11:49

© Цитата:
среднее время ожидания клиента в очереди

а это сложно реализовыается?
Время брать с компьютера.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 63

= общий = | 09.12.2010, 12:04 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

не! время берется с модели реализации с блок-схемы, там когда приходит, уходит заявка, ну надо посидеть...
сейчас нет времени, а это срочно надо?
к примеру вероятность пересчитать - не проблема.
а вот с временами и вероятность без очереди... надо подумать, проработать всю блок-схему, разобрать приход уход и времена.

=====
to live is to die

неизвестный

# 64

= общий = | 09.12.2010, 12:17

я могу подождать,но там время активной консультации осталось немного. Там ведь edit 8 пересчтать только по новому алгоритму нужно.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 65

= общий = | 09.12.2010, 12:22 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

ОБСУЖДЕНИЕ МОЖНО ПРОДОЛЖАТЬ И ПОСЛЕ ЗАВЕРШЕНИЯ КОНСУЛЬТАЦИИ НЕ ПЕРЕЖИВАЙТЕ.
в общем если брать все параметры из модельного процесса то у нас все формулы рассчитаны неправильно.

Так давайте еще раз с заданием, чтобы все верно и правильно.
формулы, которые даны в доковском файле они нужны только для реализации модели?
или по ним нужно произвести вычисления (если этот вариант нужный, то у нас все правильно)?
иначе нужно переделать алгоритм модуляции введя в него несколько параметров, которые покажут сколько автомобилей было обслужено без очереди, сколько времени обслуживался каждый автомобиль.

=====
to live is to die

неизвестный

# 66

= общий = | 09.12.2010, 12:27

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

Извините что так получилось. Сам незнал до сегодняшнего дня.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 67

= общий = | 09.12.2010, 12:35 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

ничего, переделаем :)
не сильно сложно, сейчас придумаем чего.

=====
to live is to die

неизвестный

# 68

= общий = | 09.12.2010, 13:05

Для сверки результата правильности работы программы:
Pотк=0,13 (у нас такой же почти ответ)
P(без отказа) = 0,81
среднее время ожидания заявки в очереди = 0,54

=====
to live is to die

CradleA
Профессор

ID: 325460

# 69

= общий = | 09.12.2010, 13:27 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

теперь берем все из алгоритма, внимательно пересмотрите все, сделал несколько изменений в блок-схеме
теперь все параметры берутся из модели, если что не понятно спрашиваем

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Edit4: TEdit;
    Label6: TLabel;
    Edit5: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    Edit6: TEdit;
    Label9: TLabel;
    Edit7: TEdit;
    Label10: TLabel;
    Edit8: TEdit;
    Label11: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
K,p,i,io,n,m:integer;ro,Potk,Pbo,tz,bTz,tobsl,Tzvezda:real;
landa,Toc,T,Tk,Mi,R,Trazg:real;
Tin: array [0..300] of real;
Tout: array [0..300] of real;
begin
Landa:=Strtofloat(edit1.Text);//интенсивность автомобилей в час
Trazg:=Strtofloat(Edit2.Text)/60;//среднее время
Mi:=1/Trazg;
Tk:=24;//часов в сутки
P:=Strtoint(Edit3.Text);//емкость накопителя
ro:=  Landa/ Mi;
T := 0;
Tzvezda := 0;
K := 0;
n := 0;    // обслужено
m := 0;    // отказано
Pbo:=0;
i:=0;
io:=0;
Randomize;
R:=random;
tz := (1/Landa)*Ln(R);
bTz:=T+tz;
while T < Tk do
begin
  if Tzvezda > bTz then
    begin
       
      T := bTz;
      K := K+1;
      if p+1 >= K then
      begin
      Tin[i]:=T;
       i:=i+1;
       // i:=i-1;
        n := n+1;
        if K=1 then
        begin
          Pbo:=  Pbo+1;
        end;
      end
      else
      begin

        K := K-1;
        m := m+1;
      end;
      if K > 0 then
      begin
        R:=random;
        tobsl := -(1/Mi)*ln(R);
        Tzvezda := bTz+tobsl;
      end;

      R:=Random;
      tz := -(1/Landa)*ln(R);
      bTz := bTz+tz;
    end
  else
  begin
    T := Tzvezda;
    if K > 0 then
    begin
       Tout[io]:=T;
       io:=io+1;
      K := K-1;
    end;
    if K = 0 then
    begin
      Tzvezda := Tk;
    end
    else
    begin
      R:=Random;
      tobsl := -(1/Mi)*Ln(R);
      Tzvezda := T+Tobsl;
    end;
  end;
end;

//вычисление характеристик
n:=n-K;
Toc:=0;
 for i:= 0 to io-1 do
 begin
  Toc:=Toc+Tout[i]-Tin[i];
 end;
  Toc:=Toc/io;

// клиентов прибыло
Edit4.Text:=inttostr(n+m);
//количество отказов
Edit5.Text:=inttostr(m);
// n-m количество обслуженных машин
//вероятность отказа
Potk:=m/(n+m);
Edit6.Text:=floattostr(Potk);
// вероятность что будет обслужена без очереди
Pbo := Pbo/(n+m);
Edit7.Text:=floattostr(Pbo);
// время ожидания
Edit8.Text:=floattostr(Toc);
end;
end.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 70

= общий = | 09.12.2010, 13:30 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

не подгоняем к ответу, а правильно реализовываем.
откуда у Вас блок-схема?
по-моему она не верная.
из нее нельзя получить модель системы.
смотрите выше приведенный код, все вроде должно работать верно, и цифры хорошие получены.

=====
to live is to die

неизвестный

# 71

= общий = | 09.12.2010, 13:34

блок-схему нам дали. Сейчас посмотрю программу.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 72

= общий = | 09.12.2010, 13:44 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

по этой блок-схеме решение получится не может
как может уменьшится количество заявок при постановке машины на очередь?
и K=1 тут имеется ввиду есть хоть ли одна заявка а это условие K>0
если делать так как понял я то и m и n и k принимают значения которые Вы раньше говорили, ничего не надо перекручивать.
надеюсь мы получили окончательный вариант, по всем параметрам сходится.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 73

= общий = | 09.12.2010, 13:47 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

смотрим среднее время ожидания клиента по времени 0.54+- 20 мин это в пределах от 0.8 до 0.3
вероятность что автомобиль будет обслужен без ожидания это не тоже самое что вероятность без отказа!
вероятность без отказа это 1- вероятность отказов.
у вас в задании посчитать вероятность того что не будет очереди, когда прибудет машина.

=====
to live is to die

неизвестный

# 74

= общий = | 09.12.2010, 13:49

Массив до 300. А почему именно 300? Не большее число, не меньшее?


Ладно мучить больше не буду. Думаю, если что не так смогу исправить сам.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 75

= общий = | 09.12.2010, 13:54 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

вообще лучше сделать чуть больше
300 т.к. в сутки в среднем прибывает 12 автомобилей 12*24 = 288 но еще надо учесть разброс 10-15% поэтому максимум 288*1,15=330 больше быть не должно.
вообще-то можно и уменьшить, т.к. количество обслуженных машин мы смотрим а это 10*24=240+10%=270 ну 300 чтобы наверняка :)

спрашивайте если еще что не понятно.

=====
to live is to die

неизвестный

# 76

= общий = | 09.12.2010, 13:58

А что то я не увидел ответа на вопрос что обозначает переменная io?

И еще вы случайно не знаете как сделать результат точнее? (в прошлой программе я просто увеличивал Tk - время моделирования)

=====
to live is to die

CradleA
Профессор

ID: 325460

# 77

= общий = | 09.12.2010, 14:03 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

io мы ввели переменную для подсчета обслуженных заявок

=====
to live is to die

неизвестный

# 78

= общий = | 09.12.2010, 14:06

© Цитата: CradleA
io мы ввели переменную для подсчета обслуженных заявок

спасибо, теперь все понятно.

=====
to live is to die

CradleA
Профессор

ID: 325460

# 79

= общий = | 09.12.2010, 14:07 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

отлично :)
удач при защите работы :)
smile

=====
to live is to die

неизвестный

# 80

= общий = | 09.12.2010, 14:10

© Цитата:
отлично :)
удач при защите работы :)

спасибо. И вам удачи. smile

=====
to live is to die

неизвестный

# 81

= общий = | 09.12.2010, 14:50
CradleA:

Меня только немножко пугает такой разброс ответов
Potk=0.13
0,15
0,09
0,33
0,23

=====
to live is to die

CradleA
Профессор

ID: 325460

# 82

= общий = | 09.12.2010, 18:42 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

да, разброс великоват...
но так генерит, может и нормально, сложно сказать на сколько все хорошо, но где можем ошибаться?
вот если бы 0.33 не было, то результаты в рамки входят.

=====
to live is to die

неизвестный

# 83

= общий = | 09.12.2010, 19:32
CradleA:

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

=====
to live is to die

CradleA
Профессор

ID: 325460

# 84

= общий = | 09.12.2010, 19:38 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

думаю, не стоит.
хотя можно со временем чего-нить помудрить, но вроде тут не плохо получается :)
пробуем защищать :)
главное что все понимаете в задаче, и можете объяснить. Если блок-схему дали, то сложно сказать почему такая, ведь не совсем верная она.
мое мнение такое, что надо пробовать защищать полученный код.
ведь у нас случайные величины, которые имеют определенный разброс. т.к. время моделирования маленькое, то и величины могут быть с таким разбросом (по-моему он вписывается в реальную модель).

=====
to live is to die

неизвестный

# 85

= общий = | 09.12.2010, 19:53
CradleA:

спасибо. Ладно, оставим как есть, раз такие блок-схкмы дают.Пойду пробовать защищать. smile smile

p.s.
Теперь буду думать, как остальные программы без блок -схем писать. smile

=====
to live is to die

Сергей Бендер
Профессионал

ID: 304622

# 86

= общий = | 09.12.2010, 22:10 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
CradleA:

Хм-м. сдаётся мне, что без массивов всё-таки можно было обойтись. Может проверите? Возьмите общее работы, вычтите время когда очередь была пустой и поделите на количество обслуженных машин. У меня такое ощущение, что как раз среднее пребывания в очереди и получите.

CradleA
Профессор

ID: 325460

# 87

= общий = | 10.12.2010, 10:48 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Сергей Бендер:

вполне Ваш вариантможно реализовать, но с массивами мне кажется проще для понимания.

=====
to live is to die

Н.В.

# 88

= общий = | 10.12.2010, 11:40

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

=====
to live is to die

Сергей Бендер
Профессионал

ID: 304622

# 89

= общий = | 10.12.2010, 12:47 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

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

неизвестный

# 90

= общий = | 10.12.2010, 13:09
Сергей Бендер:

Да нет ненужно. Пусть так и останется с массивами. Так мне понятнее, ну и так преподаватель объяснил.

 

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

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.27190 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.78 от 18.11.2019
Версия JS: 1.34 | Версия CSS: 3.35