Моделирование палаты больницы
Заказать уникальную курсовую работу- 46 46 страниц
- 7 + 7 источников
- Добавлена 03.07.2011
- Содержание
- Часть работы
- Список литературы
- Вопросы/Ответы
2. Вариант задания
3. Показатели эффективности функционирования системы
4. Представление системы в виде Q-схемы
5. Концептуальная модель (моделирующий алгоритм)
6. Иерархическая структура программных модулей
7. Результаты моделирования
8. Выводы
9. Программная реализация модели
Список литературы
Приложение 1. Результаты моделирования
Приложение 2. Текст программы
SetWindowText(logtext);
// инициализация ввода диапазона моделирования
m_Horiz.SetValidChar(_T("0123456789"));
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
vector
vector
srand((unsigned)time(NULL)); // инициализация генератора случайных чисел
vector
vector
vector
vector
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
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,"\r\n%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 += "\r\n";
sprintf(buf,"\r\nВсего поступило больных: %d",total_adm);
logtext +=buf;
sprintf(buf,"\r\nСреднее время пребывания больных в палате: %.2f",
total_time_dis/total_dis);
logtext +=buf;
sprintf(buf,"\r\nСредняя загрузка палаты: %.2f",aver/time);
logtext +=buf;
logtext += "\r\n";
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,"\r\nКоличество прогонов модели: %d\r\n",n_st[N]);
logtext +=buf;
sprintf(buf,"\r\nСреднее количество поступивших больных:\r\n");
logtext +=buf;
sprintf(buf,"\tматематическое ожидание: %.2f\r\n",x);
logtext +=buf;
if(n_st[N] != 1){
sprintf(buf,"\tисправленная дисперсия: %.2f\r\n",s);
logtext +=buf;
sprintf(buf,"\tдоверительный интервал: %.2f - %.2f\r\n",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,"\r\nСреднее время пребывания больных в палате:\r\n");
logtext +=buf;
sprintf(buf,"\tматематическое ожидание: %.2f\r\n",x);
logtext +=buf;
if(n_st[N] != 1){
sprintf(buf,"\tисправленная дисперсия: %.2f\r\n",s);
logtext +=buf;
sprintf(buf,"\tдоверительный интервал: %.2f - %.2f\r\n",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,"\r\nСредняя загрузка палаты:\r\n");
logtext +=buf;
sprintf(buf,"\tматематическое ожидание: %.2f\r\n",x);
logtext +=buf;
if(n_st[N] != 1){
sprintf(buf,"\tисправленная дисперсия: %.2f\r\n",s);
logtext +=buf;
sprintf(buf,"\tдоверительный интервал: %.2f - %.2f\r\n",x1,x2);
logtext +=buf;
logtext += "\r\n";
}
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-файл\0*.txt\0\0";
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__361702DF_B444_4C40_A297_85D46FDFFCFC__INCLUDED_)
#define AFX_FILTEREDIT_H__361702DF_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__361702DF_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 с., стр.237
Советов Б.Я., Яковлев С.А. Моделирование систем: Учеб. для вузов – 3-е изд., перераб. и доп. – М.: Высш. шк., 2001. – 343 с., ил., стр.230
Советов Б.Я., Яковлев С.А. Моделирование систем: Учеб. для вузов – 3-е изд., перераб. и доп. – М.: Высш. шк., 2001. – 343 с., ил., стр.65
Советов Б.Я., Яковлев С.А. Моделирование систем: Учеб. для вузов – 3-е изд., перераб. и доп. – М.: Высш. шк., 2001. – 343 с., ил., стр.69
Бусленко Н.П. Метод статистического моделирования: Математическая статистика для экономистов – М.: Статистика, 1970. – 112 с., стр.59
Бусленко Н.П. Метод статистического моделирования: Математическая статистика для экономистов – М.: Статистика, 1970. – 112 с., стр.66
Советов Б.Я., Яковлев С.А. Моделирование систем: Учеб. для вузов – 3-е изд., перераб. и доп. – М.: Высш. шк., 2001. – 343 с., ил., стр.265
Советов Б.Я., Яковлев С.А. Моделирование систем: Учеб. для вузов – 3-е изд., перераб. и доп. – М.: Высш. шк., 2001. – 343 с., ил., стр.268-269
там же, стр.278-279
Шеннон Р. Имитационное моделирование систем – искусство и наука/ Пер. с англ. под ред. Е.К. Масловского – М.: Мир, 1978. – 212 с., ил., стр.211
37
нет
поступл.
больного
да
да
есть свободная койка
нет
окончание
прогона
определение
момента и
состояния
установка
начальных
условий
нет
окончание
моделир.
ввод данных
начало
естественная
выписка
больного
конец
да
да
обработка результатов моделирования
вывод результатов
здоровье удовлетворит.
нет
да
да
есть готовый к вып.
нет
нет
досрочная
выписка
больного
размещение
больного
отказ в обслуживании
2. Советов Б.Я., Яковлев С.А. Моделирование систем: Учеб. для вузов – 3-е изд., перераб. и доп. – М.: Высш. шк., 2001. – 343 с., ил.
3. Бусленко Н.П. Метод статистического моделирования: Математическая статистика для экономистов – М.: Статистика, 1970. – 112 с.
4. Шеннон Р. Имитационное моделирование систем – искусство и наука/ Пер. с англ. под ред. Е.К. Масловского – М.: Мир, 1978. – 212 с., ил.
5. Мамонова В.Г., Лыгина Н.И. Моделирование систем: Методические указания к выполнению лабораторных работ для студентов III курса дневного отделения АВТФ. – Новосибирск: Новосибирский государственный технический университет, 2010. – 44 с.
6. C++ для начинающих. Электронное пособие по языку С++. [электронный ресурс]: http://www.find-info.ru/doc/cpp/001/index.htm
7. Таблица значний функции распределения Стьюдента (для интервальных оценок). [электронный ресурс]: http://main.rudn.ru/_new/russian/win/library/UEM_Farmacy/t_interval.htm
Вопрос-ответ:
Какие цели работы рассматриваются в статье о моделировании палаты больницы?
Цели работы в статье о моделировании палаты больницы заключаются в анализе и оптимизации функционирования системы больницы. Конкретные цели могут включать в себя улучшение качества обслуживания пациентов, сокращение времени ожидания, оптимизацию использования ресурсов и другие аспекты.
Какие показатели эффективности функционирования системы рассматриваются в статье?
В статье рассматриваются различные показатели эффективности функционирования системы больницы. Это может включать в себя время ожидания пациентов, затраты на обслуживание, загруженность персонала, удовлетворенность пациентов и другие показатели, которые могут быть важными для оценки эффективности работы больницы.
Как представляется система в виде Q схемы?
Система больницы может быть представлена в виде Q-схемы, что является удобным способом визуального описания ее структуры и взаимосвязей между элементами. Q-схема включает в себя блоки, представляющие различные компоненты системы (например, палаты, персонал, оборудование), и стрелки, обозначающие потоки информации или объектов между блоками. Это помогает в понимании работы системы и может быть использовано для анализа и оптимизации функционирования.
Что такое концептуальная модель моделирующего алгоритма?
Концептуальная модель моделирующего алгоритма в данной статье представляет собой абстрактное описание алгоритма, который используется для моделирования системы. Это включает в себя определение шагов, операций и условий, которые необходимы для достижения целей моделирования. Концептуальная модель служит основой для разработки программной реализации модели и позволяет проводить эксперименты и анализировать результаты моделирования.
Какие модули входят в иерархическую структуру программных модулей системы моделирования?
Иерархическая структура программных модулей системы моделирования может включать в себя различные модули в зависимости от конкретной реализации. Это могут быть модули для ввода и обработки данных, модули для создания и управления моделью, модули для анализа результатов и другие модули, необходимые для работы системы моделирования. Иерархическая структура помогает организовать работу моделирования и упростить разработку и сопровождение программного обеспечения.
Какая цель работы при моделировании палаты больницы?
Целью работы при моделировании палаты больницы является изучение и анализ эффективности функционирования системы, а также разработка моделирующего алгоритма для данной системы.
Какие показатели используются для оценки эффективности функционирования системы палаты больницы?
Для оценки эффективности функционирования системы палаты больницы могут использоваться такие показатели, как время ожидания пациентов, время, затрачиваемое медицинским персоналом на обслуживание пациентов, количество пациентов, обслуживаемых системой за определенный период времени и др.
Как представляется система палаты больницы в виде Q-схемы?
Система палаты больницы может быть представлена в виде Q-схемы, где каждый блок схемы отображает определенную функцию или процесс в системе. Например, блоки могут представлять прием пациентов, осмотр пациентов медицинским персоналом, назначение лечения и т.д.
Какой моделирующий алгоритм разрабатывается для системы палаты больницы?
Для системы палаты больницы может быть разработан моделирующий алгоритм, который позволяет смоделировать процессы, происходящие в палате. Например, алгоритм может включать шаги приема пациента, назначения лечения, обслуживания пациента медицинским персоналом и т.д.
Какие модули включает иерархическая структура программной реализации модели системы палаты больницы?
В иерархической структуре программной реализации модели системы палаты больницы могут включаться такие модули, как модуль приема пациентов, модуль назначения лечения, модуль обслуживания пациентов медицинским персоналом и т.д. Каждый модуль выполняет определенные функции в системе.