Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Орловский Дмитрий
Статус: Профессор
Рейтинг: 3375
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2602
∙ повысить рейтинг »
Евгений/Genia007/
Статус: Профессионал
Рейтинг: 1203
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Delphi и Lazarus

Номер выпуска:1576
Дата выхода:23.12.2010, 15:00
Администратор рассылки:Калашников О.А. (Руководитель)
Подписчиков / экспертов:273 / 185
Вопросов / ответов:1 / 1

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


Вопрос № 181425:

Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос:
код программы почти остается тот же
см. этот вопрос
Задание:
Задание
Тема:
Моделирование законов распределения случайных чисел.
Моделирование одноканальной СМО с неограниченной очередью

и вроде легко и непойму как реализовать.

Отправлен: 18.12.2010, 14:30
Вопрос задал: novij2011 (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Сергей Бендер (Практикант) :
Здравствуйте, novij2011!

Ещё раз извиняюсь -- конец семестра, должники идут косяком. Так что без комментариев в тексте программы. Чуть-чуть примечаний:
1)Пора уже сделать то, что надо было с самого начала: генерирование случайных чисел вынести в функции. Не по нажатию кнопки, а при каждом обращении к функции. Кроме того, нет никакой нужды количество суммируемых чисел выносить на пользовательский интерфейс – это внутреннее дело программы. (Кстати, в заготовке ошибка: в ch считывается 12, суммирование-то делается «for it := 1 to 10 do»).
2)Один общий совет: никогда не делайте глобальную переменную индексом цикла for; в самой процедуре надо делать «var it:integer;»
3)Слишком много randomize делать не надо. На всю работу программы достаточно одного раза.

Код:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, Grids;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label6: TLabel;
Edit6: TEdit;
Label7: TLabel;
Edit7: TEdit;
Label8: TLabel;
Edit8: TEdit;
Button2: TButton;
Edit9: TEdit;
Edit10: TEdit;
Label4: TLabel;
Label5: TLabel;
Label9: TLabel;
StringGrid1: TStringGrid;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
K,maxK,p,i,io,n,chas,m:integer;
Potk,Pbo,tz,bTz,tobsl,Tzvezda,Tfree,STfree:real;
landa,Toc,T,Tk,Mi,Trazg:real;
Tin: array [0..3000] of real;
Tout: array [0..3000] of real;
implementation

{$R *.dfm}

const nnorm=12;
var xsr,deltax,mx,bx:real;

function GetR:real;
var R:real;
begin
R:=random;
GetR:=xsr+deltax*(2*R-1)
end;

function GetNorm:real;
var R:real;
it:integer;
begin
R:=0;
for it := 1 to nnorm do R:=R+Random;
GetNorm:=(sqrt(12/nnorm))*(R-nnorm/2)*bx+mx;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
mx:=strtoint(Edit1.Text);
bx:=strtoint(Edit2.Text);
xsr:=Strtoint(Edit6.Text);
deltax:=strtoint(edit7.Text);
Tk:=Strtofloat(Edit8.Text);
T := 0;
Tzvezda := 0;
Tfree:=0;
STfree:=0;
chas:=0;
K := 0;
maxK:=0;
n := 0; // обслужено
m := 0; // отказано
Pbo:=0;
i:=0;
io:=0;
Randomize;

tz :=GetR;
bTz:=T+tz;
while T < Tk do
begin
if Tzvezda > bTz then
begin
T := bTz;
K := K+1;
if K>maxK then maxK:=K;
{if p+1 >= k then
begin}
n := n+1;
{end
else
begin
m := m+1;
k := k-1;
end;}
if K = 1 then
begin
tobsl := GetNorm;
Tzvezda := bTz+tobsl;
Pbo:=Pbo+1;
STfree:=STfree + (T-Tfree);
end
else
begin
Tin[i] := T;
i := i+1;
end;
if K > 0 then
begin
tobsl := GetNorm;
Tzvezda := bTz+tobsl;
end;
tz :=GetR;
bTz := bTz+tz;
end
else begin
T := Tzvezda;
if K > 0 then
begin
K := K-1;
end;
if K = 0 then
begin
Tzvezda := Tk;
Tfree:=0;
end
else
begin
Tout[io]:=T;
i o:=io+1;
tobsl := GetNorm;
Tzvezda := T+Tobsl;
end;
end;

if T - chas*60 > 60 then
begin
chas:=chas+1;
StringGrid1.Cells[chas,2]:=inttostr(K);
StringGrid1.Cells[chas,3]:=inttostr(maxK);
StringGrid1.Cells[chas,4]:=floattostrf(STfree,ffFixed,5,3);
StringGrid1.Cells[chas,5]:=floattostrf(Pbo/(Pbo+io),ffFixed,5,3);
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;// клиентов прибыло
//вероятность того, что в системе нет запросов
Edit3.Text:=floattostr(STfree/Tk);
//максимальное число запросов в очереди
Edit4.Text:=inttostr(maxK);
//Edit6.Text:=
// вероятность что будет обслужена без очереди
Pbo := Pbo/(Pbo+io);
Edit9.Text:=floattostr(Pbo);
// время ожидания
Edit10.Text:=floattostr(Toc);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.ColCount:=11;
StringGrid1.Cells[1,0]:='1 час';
StringGrid1.Cells[2,0]:='2 час';
Str ingGrid1.Cells[3,0]:='3 час';
StringGrid1.Cells[4,0]:='4 час';
StringGrid1.Cells[5,0]:='5 час';
StringGrid1.Cells[6,0]:='6 час';
StringGrid1.Cells[7,0]:='7 час';
StringGrid1.Cells[8,0]:='8 час';
StringGrid1.Cells[9,0]:='9 час';
StringGrid1.Cells[10,0]:='10 час';

StringGrid1.RowCount:=8;
StringGrid1.Cells[0,0]:='характеристика';
StringGrid1.Cells[0,1]:='приш.заявки';
StringGrid1.Cells[0,2]:='длина очереди';
StringGrid1.Cells[0,3]:='max длина очерели';
StringGrid1.Cells[0,4]:='t простоя';
StringGrid1.Cells[0,5]:='P(простоя нет запросов)';
StringGrid1.Cells[0,6]:='cр время ожидания';
StringGrid1.Cells[0,7]:='вер-ть не ждет обслуж-я';
end;

end.

Ответ отправил: Сергей Бендер (Практикант)
Ответ отправлен: 23.12.2010, 00:39
Номер ответа: 265019

Оценка ответа: 5
Комментарий к оценке:
спасибочки

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 265019 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFPRO.RU, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.25 от 13.12.2010

    В избранное