Вход

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

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 124940
Дата создания 2011
Страниц 46
Источников 7
Мы сможем обработать ваш заказ (!) 25 апреля в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
2 770руб.
КУПИТЬ

Содержание

Цель работы
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<sick> bed[25]; // койки палаты
vector<sick>::iterator cur; // итератор для работы с векторами
vector<sick> flow; // поток больных
srand((unsigned)time(NULL)); // инициализация генератора случайных чисел
vector<double> avg_adm; // среднее число поступивших в палату больных
vector<double> avg_time; // среднее время пребывания больного в палате
vector<double> avg_load; // средняя загрузка палаты
vector<double>::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<sick>::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,"\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
нет
поступл.
больного
да
да
есть свободная койка
нет
окончание
прогона
определение
момента и
состояния
установка
начальных
условий
нет
окончание
моделир.
ввод данных
начало
естественная
выписка
больного
конец
да
да
обработка результатов моделирования
вывод результатов
здоровье удовлетворит.
нет
да
да
есть готовый к вып.
нет
нет
досрочная
выписка
больного
размещение
больного
отказ в обслуживании

Список литературы [ всего 7]

Севастьянов Б.А. Курс теории вероятностей и математической статистики. – М.: Наука. Главная редакция физико-математической литературы, 1982. – 256 с.
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
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00894
© Рефератбанк, 2002 - 2024