Помощь в написании студенческих работ
Антистрессовый сервис

Моделирование палаты больницы

Курсовая Купить готовую Узнать стоимостьмоей работы

Блок определения очередного особого состояния ——————————————————; Статистическая обработка результатов ——————————————————————-; Обработка особого состояния ———————————————————————————; Блок моделирования ———————————————————————————————-; Блок инициализации ———————————————————————————————-; Sprintf (buf," %d", hf_from); // инициализаци ввода пределов показателя здоровья. Sprintf (buf," %d… Читать ещё >

Моделирование палаты больницы (реферат, курсовая, диплом, контрольная)

Содержание

  • Цель работы
  • 2. Вариант задания
  • 3. Показатели эффективности функционирования системы
  • 4. Представление системы в виде Q-схемы
  • 5. Концептуальная модель (моделирующий алгоритм)
  • 6. Иерархическая структура программных модулей
  • 7. Результаты моделирования
  • 8. Выводы
  • 9. Программная реализация модели
  • Список литературы
  • Приложение 1. Результаты моделирования
  • Приложение 2. Текст программы

SetWindowText (logtext);

// инициализация ввода диапазона моделирования

m_Horiz.SetValidChar (_T («123 456 789»));

sprintf (buf," %.0f", horizon);

m_Horiz.SetWindowText (buf);

sprintf (buf," %.1f", density); // инициализация ввода интенсивности потока

m_Dens.SetWindowText (buf);

m_Density.SetRangeMin (1);

m_Density.SetRangeMax (40);

m_Density.SetPos ((int)(density*10.));

sprintf (buf," %d", occupied); // инициализация ввода количества коек, занятых

m_Occ.SetWindowText (buf); // на момент начала моделирования

m_Occupied.SetRangeMin (0);

m_Occupied.SetRangeMax (25);

m_Occupied.SetPos (occupied);

sprintf (buf," %d", h_from) // инициализаци ввода пределов показателя здоровья

m_hfrom.SetWindowText (buf); // пациентов, находящихся в палате на момент

m_h_from.SetRangeMin (0); // начала моделирования

m_h_from.SetRangeMax (50);

m_h_from.SetPos (h_from);

sprintf (buf," %d", h_to);

m_hto.SetWindowText (buf);

m_h_to.SetRangeMin (0);

m_h_to.SetRangeMax (50);

m_h_to.SetPos (h_to);

sprintf (buf," %d", hf_from); // инициализаци ввода пределов показателя здоровья

m_hffrom.SetWindowText (buf); // пациентов, поступающих на лечение

m_hf_from.SetRangeMin (0);

m_hf_from.SetRangeMax (50);

m_hf_from.SetPos (hf_from);

sprintf (buf," %d", hf_to);

m_hfto.SetWindowText (buf);

m_hf_to.SetRangeMin (0);

m_hf_to.SetRangeMax (50);

m_hf_to.SetPos (hf_to);

sprintf (buf," %.2f", g_from/1000.); // инициализаци ввода пределов суточного

m_gfrom.SetWindowText (buf); // улучшения показателя здоровья

m_g_from.SetRangeMin (0);

m_g_from.SetRangeMax (5000);

m_g_from.SetPos (g_from);

sprintf (buf," %.2f", g_to/1000.);

m_gto.SetWindowText (buf);

m_g_to.SetRangeMin (0);

m_g_to.SetRangeMax (5000);

m_g_to.SetPos (g_to);

sprintf (buf," %d", h_enough); // инициализаци ввода показателя здоровья,

m_heno.SetWindowText (buf); // достаточного для выписки

m_h_eno.SetRangeMin (0);

m_h_eno.SetRangeMax (50);

m_h_eno.SetPos (h_enough);

sprintf (buf," %d", h_sat1); // инициализаци ввода показателя здоровья, при

m_hsat1.SetWindowText (buf); // котором можно отказать при отсутствии мест

m_h_sat1.SetRangeMin (0);

m_h_sat1.SetRangeMax (50);

m_h_sat1.SetPos (h_sat1);

sprintf (buf," %d", h_sat2); // инициализаци ввода показателя здоровья, при

m_hsat2.SetWindowText (buf); // котором можно выписать при отсутствии мест

m_h_sat2.SetRangeMin (0);

m_h_sat2.SetRangeMax (50);

m_h_sat2.SetPos (h_sat2);

int i;

for (i=0; i < 54; i++){

sprintf (buf," %d", n_st[i]);

m_Combo1.AddString (buf); // инициализируем выбор числа прогонов

}

m_Combo1.SetCurSel (N);

for (i=0; i < 8; i++)

m_Combo2.AddString (p_st[i]); // инициализируем выбор вероятности

m_Combo2.SetCurSel (P);

double e=t_gamma (0,0)/sqrt ((double)n_st[0]);

sprintf (buf," %.4f", e);

m_Edit3.SetWindowText (buf);

return TRUE; // return TRUE unless you set the focus to a control

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CWardDlg: OnPaint ()

{

if (IsIconic ())

{

CPaintDC dc (this); // device context for painting

SendMessage (WM_ICONERASEBKGND, (WPARAM) dc. GetSafeHdc (), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics (SM_CXICON);

int cyIcon = GetSystemMetrics (SM_CYICON);

CRect rect;

GetClientRect (&rect);

int x = (rect.Width () — cxIcon + 1) / 2;

int y = (rect.Height () — cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon (x, y, m_hIcon);

}

else

{

CDialog:OnPaint ();

}

}

HCURSOR CWardDlg: OnQueryDragIcon ()

{

return (HCURSOR) m_hIcon;

}

BOOL CWardDlg: PreTranslateMessage (MSG* pMsg)

{

// TODO: Add your specialized code here and/or call the base class

if (pMsg->message == WM_KEYDOWN) // запрет выхода по Enter и Esc

if (pMsg->wParam == VK_RETURN — pMsg->wParam == VK_ESCAPE){

:DispatchMessage (pMsg);

return TRUE;

}

return CDialog: PreTranslateMessage (pMsg);

}

void CWardDlg: OnHScroll (UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

// TODO: Add your message handler code here and/or call default

// Отработка перемещений слайдеров

// это слайдер

if (pScrollBar->IsKindOf (RUNTIME_CLASS (CSliderCtrl))){

UpdateData ();

// это слайдер номер два — количество занятых мест

if ((CScrollBar *)GetDlgItem (IDC_SLIDER2) == pScrollBar){

occupied=m_Occupied.GetPos (); // считываем позицию

sprintf (buf," %d", occupied); // формируем текстовое представление

m_Occ.SetWindowText (buf); // и выводим его

}

// остальные слайдеры обрабатываются аналогично

if ((CScrollBar *)GetDlgItem (IDC_SLIDER3) == pScrollBar){

h_from=m_h_from.GetPos ();

sprintf (buf," %d", h_from);

m_hfrom.SetWindowText (buf); // контролируем и корректируем связанный параметр

if (h_from > h_to){

h_to=h_from;

m_h_to.SetPos (h_to);

sprintf (buf," %d", h_to);

m_hto.SetWindowText (buf);

}

}

if ((CScrollBar *)GetDlgItem (IDC_SLIDER4) == pScrollBar){

h_to=m_h_to.GetPos ();

sprintf (buf," %d", h_to);

m_hto.SetWindowText (buf);

if (h_from > h_to){

h_from=h_to;

m_h_from.SetPos (h_from);

sprintf (buf," %d", h_from);

m_hfrom.SetWindowText (buf);

}

}

if ((CScrollBar *)GetDlgItem (IDC_SLIDER5) == pScrollBar){

density=(double)m_Density.GetPos ()/10.;

sprintf (buf," %.1f", density);

m_Dens.SetWindowText (buf);

}

if ((CScrollBar *)GetDlgItem (IDC_SLIDER6) == pScrollBar){

hf_from=m_hf_from.GetPos ();

sprintf (buf," %d", hf_from);

m_hffrom.SetWindowText (buf);

if (hf_from > hf_to){

hf_to=hf_from;

m_hf_to.SetPos (hf_to);

sprintf (buf," %d", hf_to);

m_hfto.SetWindowText (buf);

}

}

if ((CScrollBar *)GetDlgItem (IDC_SLIDER7) == pScrollBar){

hf_to=m_hf_to.GetPos ();

sprintf (buf," %d", hf_to);

m_hfto.SetWindowText (buf);

if (hf_from > hf_to){

hf_from=hf_to;

m_hf_from.SetPos (hf_from);

sprintf (buf," %d", hf_from);

m_hffrom.SetWindowText (buf);

}

}

if ((CScrollBar *)GetDlgItem (IDC_SLIDER8) == pScrollBar){

g_from=m_g_from.GetPos ();

sprintf (buf," %.2f", g_from/1000.);

m_gfrom.SetWindowText (buf);

if (g_from > g_to){

g_to=g_from;

m_g_to.SetPos (g_to);

sprintf (buf," %.2f", g_to/1000.);

m_gto.SetWindowText (buf);

}

}

if ((CScrollBar *)GetDlgItem (IDC_SLIDER9) == pScrollBar){

g_to=m_g_to.GetPos ();

sprintf (buf," %.2f", g_to/1000.);

m_gto.SetWindowText (buf);

if (g_from > g_to){

g_from=g_to;

m_g_from.SetPos (g_from);

sprintf (buf," %.2f", g_from/1000.);

m_gfrom.SetWindowText (buf);

}

}

if ((CScrollBar *)GetDlgItem (IDC_SLIDER10) == pScrollBar){

h_enough=m_h_eno.GetPos ();

sprintf (buf," %d", h_enough);

m_heno.SetWindowText (buf);

}

if ((CScrollBar *)GetDlgItem (IDC_SLIDER11) == pScrollBar){

h_sat1=m_h_sat1.GetPos ();

sprintf (buf," %d", h_sat1);

m_hsat1.SetWindowText (buf);

}

if ((CScrollBar *)GetDlgItem (IDC_SLIDER12) == pScrollBar){

h_sat2=m_h_sat2.GetPos ();

sprintf (buf," %d", h_sat2);

m_hsat2.SetWindowText (buf);

}

UpdateData (FALSE);

}

CDialog:OnHScroll (nSBCode, nPos, pScrollBar);

}

typedef struct sick{

double date; // время

double health; // уровень здоровья

} sick;

void CWardDlg: OnButton1() // запуск моделирования

{

// TODO: Add your control notification handler code here

vector bed[25]; // койки палаты

vector:iterator cur; // итератор для работы с векторами

vector flow; // поток больных

srand ((unsigned)time (NULL)); // инициализация генератора случайных чисел

vector avg_adm; // среднее число поступивших в палату больных

vector avg_time; // среднее время пребывания больного в палате

vector avg_load; // средняя загрузка палаты

vector:iterator d;

N=m_Combo1.GetCurSel ();

P=m_Combo2.GetCurSel ();

m_Progr.SetRange (0,n_st[N]-1);

logtext="" ;

m_Log.SetWindowText (logtext);

for (int j=0; j < n_st[N]; j++){

// блок инициализации ———————————————————————————————-;

int total_adm=0; // общее количество поступивших больных

int total_dis=0; // общее количество выписанных больных

double total_time_dis=0.; // общее время пребывания больных в палате

double aver=0.; // средняя загрузка палаты

sick state; // буфер состояния больного

int i;

for (i=0; i < 25; i++)

bed[i]. clear ();

flow.clear ();

for (i=0; i < occupied; i++){ // задание начальных условий

// больной со здоровьем в заданном диапазоне

while ((state.health=rand ()%h_to) < h_from);

// дата поступления (для начальных условий — 0)

state.date=0.;

bed[i]. push_back (state); // принимаем больного на койку

do{ // заполняем историю выздоровления

int gain;

// улучшение за день в указанном диапазоне

while ((gain=rand ()%g_to) < g_from);

state.health += (double)gain/1000.; // улучшаем здоровье

state.date++; // продвигаем время на сутки

bed[i]. push_back (state); // добавляем новое состояние в историю

}while (state.health < h_enough); // пока здоровье недостаточно для выписки и

} // не исчерпан диапазон моделирования

state.date=0.; // обнуляем дату

while (state.date < horizon){ // заполняем историю потока заявок

// интервал определяется интенсивностью потока

state.date += -1./density*log ((double)(rand ()%1000+1)/1000.);

// начальное состояние поступившего больного в заданных пределах

while ((state.health=rand ()%hf_to) < hf_from);

flow.push_back (state); // добавляем больного в поток

}

// блок моделирования ———————————————————————————————-;

double time=0.; // системное время

enum{admission, discharge} type; // тип особого состояния

int bednum; // номер койки выписываемого больного

vector:iterator admit; // итератор, указывающий на поступающего больного

for (;;){ // цикл моделирования

// блок определения очередного особого состояния ——————————————————;

double next=horizon;

for (cur=flow.begin (); cur ≠ flow. end (); cur++) // просматриваем поток заявок

// время поступления следует за текущим временем

if ((*cur).date > time){

next=(*cur).date; // фиксируем время

type=admission; // тип события — прием больного

admit=cur; // фиксируем поступающего больного

break;

}

if (cur == flow. end ()) // поток больных исчерпан,

break; // заканчиваем моделирование

int total_bed=0; // количество занятых коек в текущем интервале

for (i=0; i < 25; i++) // просматриваем койки

if (bed[i]. size () ≠ 0){ // койка занята

// смотрим последнее состояние в истории выздоровления

cur=bed[i]. end ();

cur—;

// время меньше, чем время следующего поступления больного

if ((*cur).date > time && (*cur).date < next){

next=(*cur).date; // фиксируем время

type=discharge; // тип события — выписка больного

bednum=i; // фиксируем номер койки

}

total_bed++;

}

aver += total_bed*(next-time); // накапливаем количество занятых коек

time=next; // определено время очередного особого состояния

if (n_st[N] <= 25){

if (n_st[N] <= 25){

sprintf (buf," rn%6.2f", time); // выводим время в протокол

logtext += buf;

}

}

// обработка особого состояния ———————————————————————————;

switch (type){

case discharge: // выписка

cur=bed[bednum]. end ();

cur—;

if (n_st[N] <= 25){

sprintf (buf," Выписка %.1f" ,(*cur).health);

logtext += buf;

}

total_dis++;

total_time_dis += (*cur).date-(*bed[bednum]. begin ()).date;

bed[bednum]. clear ();

break;

case admission: // поступление

for (i=0; i < 25; i++) // ищем свободную койку

if (bed[i]. size () == 0){ // свободная койка найдена

state.health=(*admit).health; // помещаем на нее поступившего

state.date=(*admit).date;

bed[i]. push_back (state);

do{ // заполняем историю выздоровления

int gain;

while ((gain=rand ()%g_to) < g_from);

state.health += (double)gain/1000.;

state.date++;

bed[i]. push_back (state);

}while (state.health < h_enough);

break;

}

if (i < 25){ // больного удалось разместить на свободную койку

total_adm++;

if (n_st[N] <= 25){

sprintf (buf," Поступление (на свободную койку) %.1f" ,

(*admit).health);

logtext += buf;

}

break;

}

// состояние вновь поступившего удовлетворительное

if ((*admit).health > h_sat1){

if (n_st[N] <= 25){

sprintf (buf," Отказ (мест нет, здоровье удовлетворительное) %.1f" ,

(*admit).health); // отказать в приеме

logtext += buf;

}

break;

}

else{

for (i=0; i < 25; i++){ // просматриваем список больных

for (cur=bed[i]. begin (); cur ≠ bed[i]. end (); cur++)

if ((*cur).date > time)

break;

if (cur ≠ bed[i]. end ()) // нашли время больше текущего

// на это время больной готов к выписке

if ((*cur).health >= h_sat2){

state.health=(*cur).health;

state.date=(*cur).date;

if (cur ≠ bed[i]. begin ()){

cur—;

// определяем состояние больного на момент поступленя

// нового больного

double h_int=state.health+

((*cur).health-state.health)/

((*cur).date-state.date)*

((*admit).date-state.date);

// на момент поступления нового старый больной

// готов к выписке

if (h_int >= h_sat2){

if (n_st[N] <= 25){

sprintf (buf," Выписка (по необходимости) %.1f" ,

h_int);

logtext += buf;

}

total_dis++;

total_time_dis += (*admit).date-(*bed[i]. begin ()).date;

bed[i]. clear (); // выписываем его

state.health=(*admit).health; // помещаем поступившего

state.date=(*admit).date;

bed[i]. push_back (state);

do{ // заполняем историю выздоровления

int gain;

while ((gain=rand ()%g_to) < g_from);

state.health += (double)gain/1000.;

state.date++;

bed[i]. push_back (state);

}while (state.health < h_enough);

total_adm++;

if (n_st[N] <= 25){

sprintf (buf," Прием (на место выписанного) %.1f" ,

(*admit).health);

logtext += buf;

}

break;

}

}

}

}

if (i == 25){

if (n_st[N] <= 25){

sprintf (buf," Отказ (мест нет, выписать некого) %.1f" ,

(*admit).health); // отказать в приеме

logtext += buf;

}

}

}

break;

}

}

logtext += «rn» ;

sprintf (buf," rnВсего поступило больных: %d", total_adm);

logtext +=buf;

sprintf (buf," rnСреднее время пребывания больных в палате: %.2f" ,

total_time_dis/total_dis);

logtext +=buf;

sprintf (buf," rnСредняя загрузка палаты: %.2f", aver/time);

logtext +=buf;

logtext += «rn» ;

avg_adm.push_back (total_adm); // накопление статистики

avg_time.push_back (total_time_dis/total_dis);

avg_load.push_back (aver/time);

m_Progr.SetPos (j);

UpdateData (FALSE);

}

// статистическая обработка результатов ——————————————————————-;

double x=0.;

for (d=avg_adm.begin (); d ≠ avg_adm.end (); d++)

x += *d;

x /= n_st[N];

double s=0.;

double x1, x2;

if (n_st[N] ≠ 1){

for (d=avg_adm.begin (); d ≠ avg_adm.end (); d++)

s += (*d-x)*(*d-x);

s /= n_st[N]-1.;

s=sqrt (s);

x1=x-t_gamma (N, P)*s/sqrt ((double)n_st[N]);

x2=x+t_gamma (N, P)*s/sqrt ((double)n_st[N]);

}

sprintf (buf," rnКоличество прогонов модели: %drn", n_st[N]);

logtext +=buf;

sprintf (buf," rnСреднее количество поступивших больных: rn");

logtext +=buf;

sprintf (buf," tматематическое ожидание: %.2frn", x);

logtext +=buf;

if (n_st[N] ≠ 1){

sprintf (buf," tисправленная дисперсия: %.2frn", s);

logtext +=buf;

sprintf (buf," tдоверительный интервал: %.2f — %.2frn", x1, x2);

logtext +=buf;

}

x=0.;

for (d=avg_time.begin (); d ≠ avg_time.end (); d++)

x += *d;

x /= n_st[N];

if (n_st[N] ≠ 1){

s=0.;

for (d=avg_time.begin (); d ≠ avg_time.end (); d++)

s += (*d-x)*(*d-x);

s /= n_st[N]-1.;

s=sqrt (s);

x1=x-t_gamma (N, P)*s/sqrt ((double)n_st[N]);

x2=x+t_gamma (N, P)*s/sqrt ((double)n_st[N]);

}

sprintf (buf," rnСреднее время пребывания больных в палате: rn");

logtext +=buf;

sprintf (buf," tматематическое ожидание: %.2frn", x);

logtext +=buf;

if (n_st[N] ≠ 1){

sprintf (buf," tисправленная дисперсия: %.2frn", s);

logtext +=buf;

sprintf (buf," tдоверительный интервал: %.2f — %.2frn", x1, x2);

logtext +=buf;

}

x=0.;

for (d=avg_load.begin (); d ≠ avg_load.end (); d++)

x += *d;

x /= n_st[N];

if (n_st[N] ≠ 1){

s=0.;

for (d=avg_load.begin (); d ≠ avg_load.end (); d++)

s += (*d-x)*(*d-x);

s /= n_st[N]-1.;

s=sqrt (s);

x1=x-t_gamma (N, P)*s/sqrt ((double)n_st[N]);

x2=x+t_gamma (N, P)*s/sqrt ((double)n_st[N]);

}

sprintf (buf," rnСредняя загрузка палаты: rn");

logtext +=buf;

sprintf (buf," tматематическое ожидание: %.2frn", x);

logtext +=buf;

if (n_st[N] ≠ 1){

sprintf (buf," tисправленная дисперсия: %.2frn", s);

logtext +=buf;

sprintf (buf," tдоверительный интервал: %.2f — %.2frn", x1, x2);

logtext +=buf;

logtext += «rn» ;

}

m_Log.SetWindowText (logtext);

:SendMessage (m_Log.m_hWnd, WM_VSCROLL, SB_BOTTOM, 0);

}

void CWardDlg: OnButton2() // Сохранение протокола

{

// TODO: Add your control notification handler code here

CFileDialog fd (FALSE," txt" ," model. txt");

fd.m_ofn.lpstrFilter="txt-файл*.txt" ;

fd.m_ofn.nFilterIndex=1;

fd.m_ofn.lpstrInitialDir="c:" ;

fd.m_ofn.lpstrTitle="Сохранить протокол" ;

fd.DoModal (); // запускаем диалог сохранения файла

if (strlen (fd.m_ofn.lpstrFileTitle) ≠ 0){

FILE *logfile;

if ((logfile=fopen (fd.m_ofn.lpstrFile," w")) ≠ NULL){

fprintf (logfile," %s", logtext);

fclose (logfile);

}

else

MessageBox (fd.m_ofn.lpstrFile," Ошибка открытия файла");

}

}

void CWardDlg: OnKillfocusEdit2() // контроль введенного диапазона

{

// TODO: Add your control notification handler code here

UpdateData ();

m_Horiz.GetWindowText (buf, 20);

horizon=atof (buf);

if (horizon > 365.) // ограничиваем диапазон 365 сутками

horizon=365.;

sprintf (buf," %.0f", horizon);

m_Horiz.SetWindowText (buf);

UpdateData (FALSE);

}

void CWardDlg: OnSelchangeCombo2()

{

// TODO: Add your control notification handler code here

UpdateData (FALSE);

int N=m_Combo1.GetCurSel ();

int P=m_Combo2.GetCurSel ();

double e=t_gamma (N, P)/sqrt ((double)n_st[N]);

sprintf (buf," %.4f", e);

m_Edit3.SetWindowText (buf);

UpdateData (FALSE);

}

void CWardDlg: OnSelchangeCombo1()

{

// TODO: Add your control notification handler code here

UpdateData (FALSE);

int N=m_Combo1.GetCurSel ();

int P=m_Combo2.GetCurSel ();

double e=t_gamma (N, P)/sqrt ((double)n_st[N]);

sprintf (buf," %.4f", e);

m_Edit3.SetWindowText (buf);

UpdateData (FALSE);

}

FilterEdit.h

#if !defined (AFX_FILTEREDIT_H__36 1702DF_B444_4C40_A297_85D46FDFFCFC__INCLUDED_)

#define AFX_FILTEREDIT_H__36 1702DF_B444_4C40_A297_85D46FDFFCFC__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

// FilterEdit. h: header file

// CFilterEdit window

class CFilterEdit: public CEdit

{

// Construction

public:

CFilterEdit ();

// Attributes

public:

// Operations

public:

void SetValidChar (char* pChar) // Set the array with valid characters

{

if (m_nValidChar)

delete [] m_nValidChar;

m_nValidChar = new char[_tcsclen (pChar) + 1];

_tcscpy (m_nValidChar, pChar);

};

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL (CFilterEdit)

//}}AFX_VIRTUAL

// Implementation

public:

virtual ~CFilterEdit ();

// Generated message map functions

protected:

//{{AFX_MSG (CFilterEdit)

// NOTE — the ClassWizard will add and remove member functions here.

afx_msg void OnChar (UINT nChar, UINT nRepCnt, UINT nFlags);

//}}AFX_MSG

DECLARE_MESSAGE_MAP ()

protected:

char * m_nValidChar;

};

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined (AFX_FILTEREDIT_H__36 1702DF_B444_4C40_A297_85D46FDFFCFC__INCLUDED_)

FilterEdit.cpp

// FilterEdit. cpp: implementation file

#include «stdafx.h»

#include «FilterEdit.h»

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

// CFilterEdit

CFilterEdit:CFilterEdit ()

{

m_nValidChar = NULL;

}

CFilterEdit:~CFilterEdit ()

{

if (m_nValidChar ≠ NULL)

delete [] m_nValidChar;

}

BEGIN_MESSAGE_MAP (CFilterEdit, CEdit)

//{{AFX_MSG_MAP (CFilterEdit)

// NOTE — the ClassWizard will add and remove mapping macros here.

ON_WM_CHAR ()

//}}AFX_MSG_MAP

END_MESSAGE_MAP ()

// CFilterEdit message handlers

void

CFilterEdit:OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)

{

// контроль вводимых символов непосредственно на этапе ввода

CString s;

if (m_nValidChar == NULL — // таблица допустимых не задана

m_nValidChar ≠ NULL && _tcschr (m_nValidChar, nChar) ≠ NULL)

// или символ допустимый

CEdit:OnChar (nChar, nRepCnt, nFlags); // отдаем базовому классу для обработки

else{

if (!_istprint (nChar))

CEdit:OnChar (nChar, nRepCnt, nFlags);// непечатные — тоже

else

:MessageBeep (-1);

}

}

Севастьянов Б. А. Курс теории вероятностей и математической статистики. — М.: Наука. Главная редакция физико-математической литературы, 1982. — 256 с., стр.

Советов Б.Я., Яковлев С. А. Моделирование систем: Учеб. для вузов — 3-е изд., перераб. и доп. — М.: Высш. шк., 2001. — 343 с., ил., стр.

Советов Б.Я., Яковлев С. А. Моделирование систем: Учеб. для вузов — 3-е изд., перераб. и доп. — М.: Высш. шк., 2001. — 343 с., ил., стр.

Советов Б.Я., Яковлев С. А. Моделирование систем: Учеб. для вузов — 3-е изд., перераб. и доп. — М.: Высш. шк., 2001. — 343 с., ил., стр.

Бусленко Н. П. Метод статистического моделирования: Математическая статистика для экономистов — М.: Статистика, 1970. — 112 с., стр.

Бусленко Н. П. Метод статистического моделирования: Математическая статистика для экономистов — М.: Статистика, 1970. — 112 с., стр.

Советов Б.Я., Яковлев С. А. Моделирование систем: Учеб. для вузов — 3-е изд., перераб. и доп. — М.: Высш. шк., 2001. — 343 с., ил., стр.

Советов Б.Я., Яковлев С. А. Моделирование систем: Учеб. для вузов — 3-е изд., перераб. и доп. — М.: Высш. шк., 2001. — 343 с., ил., стр.

268−269

там же, стр.

278−279

Шеннон Р. Имитационное моделирование систем — искусство и наука/ Пер. с англ. под ред. Е. К. Масловского — М.: Мир, 1978. — 212 с., ил., стр.

нет

поступл.

больного

да

да

есть свободная койка

нет

окончание прогона

определение момента и состояния

установка начальных условий

нет

окончание моделир.

ввод данных

начало

естественная выписка больного конец

да

да

обработка результатов моделирования

вывод результатов

здоровье удовлетворит.

нет

да

да

есть готовый к вып.

нет

нет

досрочная выписка больного

размещение больного

отказ в обслуживании

Показать весь текст

Список литературы

  1. .Я., Яковлев С. А. Моделирование систем: Учеб. для вузов — 3-е изд., перераб. и доп. — М.: Высш. шк., 2001. — 343 с., ил.
  2. Н.П. Метод статистического моделирования: Математическая статистика для экономистов — М.: Статистика, 1970. — 112 с.
  3. Р. Имитационное моделирование систем — искусство и наука/ Пер. с англ. под ред. Е. К. Масловского — М.: Мир, 1978. — 212 с., ил.
  4. В.Г., Лыгина Н. И. Моделирование систем: Методические указания к выполнению лабораторных работ для студентов III курса дневного отделения АВТФ. — Новосибирск: Новосибирский государственный технический университет, 2010. — 44 с.
  5. C++ для начинающих. Электронное пособие по языку С++. [электронный ресурс]: http://www.find-info.ru/doc/cpp/001/index.htm
  6. Таблица значний функции распределения Стьюдента (для интервальных оценок). [электронный ресурс]: http://main.rudn.ru/_new/russian/win/library/UEM_Farmacy/t_interval.htm
Заполнить форму текущей работой
Купить готовую работу

ИЛИ