Министерство образования РФ
НГТУ
Кафедра ВТ
Расчетно-графическое задание по
математическим методам системного анализа
Факультет:
АВТ
Группа:
АМ-79
Вариант:
19
Студент:
Менжулин С.А.
Преподаватель:
Хачатурова C.M.
Новосибирск
2001г.
Содержание
|
1.
|
Задание
|
2
|
|
2.
|
Общие
сведения
|
2
|
|
3.
|
Исходный
текст программы
|
3
|
|
4.
|
Результат
выполнения программы
|
7
|
|
5.
6.
|
Выводы
Блок-схема
алгоритма программы.
|
15
16
|
1. Задание.
19. Система автоматизации
проектирования состоит из ЭВМ и трех терминалов. Каждый проектировщик формирует
задание на расчет в интерактивном режиме. Набор строки задания занимает 10±5
с. Получение ответа на строку требует 3 с работы ЭВМ и 5 с работы терминала.
После набора десяти строк задание считается сформированным и поступает на
решение, при этом в течение 10±3 с ЭВМ прекращает выработку ответов на вводимые
строки. Вывод результата требует 8 с работы терминала. Анализ результата
занимает у проектировщика 30 с, после чего цикл повторяется.
Смоделировать
работу системы в течение 6 ч. Определить вероятность простоя проектировщика
из-за занятости ЭВМ и коэффициент загрузки ЭВМ.
2. Общие
сведения.
Математическая
модель реализуется на языке программирования С++ в оболочке Borland C++ 3.11. В
программе имитируется 6 часов работы системы. По окончании моделирования
программа выдает анализ полученных результатов:
- вероятность
простоя проектировщика из-за занятости ЭВМ;
- коэффициент
загрузки ЭВМ.
Набор
строки задания и время, когда ЭВМ прекращает выработку ответов на вводимые строки,
распределены по равномерному закону распределения.
Значения
для первых интервалов рассчитываются по формуле:
где
A=2/(a+b), а B=2/(b2- a2), x – случайное
число от 0 до 1.
Значения
для всех последующих интервалов рассчитываются по формуле:
F(x)=M-dt+2*dt*x,
где
M-мат.ожидание, dt – отклонение от
мат.ожидания, x – случайное
число от 0 до 1.
3.
Исходный текст программы.
#include<stdlib.h>
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
FILE *out;
double
event[4];
int a[25];
int a1[25];
int aindex=0;
int
taskcount1=0;
int
taskcount2=0;
int
taskcount3=0;
int
taskret1=0;
int
taskret2=0;
int
taskret3=0;
double wait=0;
double
possibility=0;
double
generate()
{
int
n=rand()%1000;
return
(double)n/(double)1000;
}
int
findmin(double *m,int n)
{
int i=n-2;
double
min=m[n-1];
for(;i>=0;i--)
if(m[i]<min)
min=m[i];
for(i=0;i<n;i++)
if(m[i]==min)
return i;
return -1;
}
void start(int
n)
{
int max=n;
while(event[3]<(double)n)
{
int
k=findmin(event,4);
if(k==-1)
break;
switch(k)
{
case 0:
{
if(taskret1>0)
{
fprintf(out,"время t=%f терминал 1 занят получением ответа на строку %d\n",event[k],taskret1);
event[k]+=(double)5;
event[k]+=(double)5+(double)10*generate();
taskret1=0;
break;
}
if(taskcount1!=10)
{
fprintf(out,"время t=%f строка %d поступила от терминала 1\n",event[k],++taskcount1);
a[aindex]=taskcount1;
possibility-=event[k];
event[k]+=(double)1000;
a1[aindex++]=1;
break;
}
if(taskret1==-1)
{
fprintf(out,"время t=%f на терминале 1 начался вывод результата\n",event[k]);
taskret1=-2;
event[k]+=(double)8;
break;
}
if(taskret1==-2)
{
fprintf(out,"время
t=%f на терминале 1 закончился вывод результата\n",event[k]);
taskret1=0;
taskcount1=0;
event[k]+=(double)30;
break;
}
event[k]=event[3];
break;
}
case 1:
{
if(taskret2>0)
{
fprintf(out,"время
t=%f терминал 2 занят получением ответа на строку
%d\n",event[k],taskret2);
event[k]+=(double)5;
event[k]+=(double)5+(double)10*generate();
taskret2=0;
break;
}
if(taskcount2!=10)
{
fprintf(out,"время t=%f строка %d поступила от терминала 2\n",event[k],++taskcount2);
a[aindex]=taskcount2;
a1[aindex++]=2;
possibility-=event[k];
event[k]+=(double)1000;
break;
}
if(taskret2==-1)
{
fprintf(out,"время
t=%f на терминале 2 начался вывод результата\n",event[k]);
taskret2=-2;
event[k]+=(double)8;
break;
}
if(taskret2==-2)
{
fprintf(out,"время
t=%f на терминале 2 закончился вывод результата\n",event[k]);
taskret2=0;
taskcount2=0;
event[k]+=(double)30;