Разработка модели, алгоритма и программы для определения технического состояния объекта по его признакам

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость новой

Детальная информация о работе

Выдержка из работы

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

Целью курсовой работы является приобретение навыков системного подхода к решению задач по принятию решений, разработке нечетких моделей на основе дедуктивного логического вывода. При решении многих прикладных задач приходиться сталкиваться с неопределенностью, недостаточностью информации о системе. В связи с этим возникает необходимость применения теории нечетких множеств.

Типовой темой курсовой работы является разработка модели, алгоритма и программы для определения технического состояния объекта по его признакам.

Разработать систему диагностики станка с ЧПУ, использующую дедуктивный логический вывод для принятия решения. Самостоятельно определить названия входных и выходных параметров системы, матрицу бинарных отношений. Система диагностики должна определять по значениям выходных параметров В=6 значения входных параметров А=5.

ВВЕДЕНИЕ

Системный анализ — научный метод познания, представляющий собой последовательность действий по установлению структурных связей между переменными или элементами исследуемой системы. Опирается на комплекс общенаучных, экспериментальных, естественнонаучных, статистических, математических методов.

Системный анализ возник в эпоху разработки компьютерной техники. Успех его применения при решении сложных задач во многом определяется современными возможностями информационных технологий. Н. Н. Моисеев приводит, по его выражению, довольно узкое определение системного анализа: «Системный анализ — это совокупность методов, основанных на использовании ЭВМ и ориентированных на исследование сложных систем — технических, экономических, экологических и т. д. Результатом системных исследований является, как правило, выбор вполне определенной альтернативы: плана развития региона, параметров конструкции и т. д. Поэтому истоки системного анализа, его методические концепции лежат в тех дисциплинах, которые занимаются проблемами принятия решений: теории операций и общей теории управления».

Ценность системного подхода состоит в том, что рассмотрение категорий системного анализа создает основу для логического и последовательного подхода к проблеме принятия решений. Эффективность решения проблем с помощью системного анализа определяется структурой решаемых проблем.

Согласно классификации, все проблемы подразделяются на три класса:

1) хорошо структурированные (well-structured), или количественно сформулированные проблемы, в которых существенные зависимости выяснены очень хорошо;

2) неструктурированные (unstructured), или качественно выраженные проблемы, содержащие лишь описание важнейших ресурсов, признаков и характеристик, количественные зависимости между которыми совершенно неизвестны;

3) слабо структурированные (ill-structured), или смешанные проблемы, которые содержат как качественные элементы, так и малоизвестные, неопределенные стороны, которые имеют тенденцию доминировать.

Для решения хорошо структурированных количественно выражаемых проблем используется известная методология исследования операций, которая состоит в построении адекватной математической модели (например, задачи линейного, нелинейного, динамического программирования, задачи теории массового обслуживания, теории игр и др.) и применении методов для отыскания оптимальной стратегии управления целенаправленными действиями.

Для решения слабо структурированных проблем используется методология системного анализа, системы поддержки принятия решений (СППР). Рассмотрим технологию применения системного анализа к решению сложных задач.

Процедура принятия решений согласно включает следующие основные этапы:

* формулировка проблемной ситуации;

* определение целей;

* определение критериев достижения целей;

* построение моделей для обоснования решений;

* поиск оптимального (допустимого) варианта решения;

* согласование решения;

* подготовка решения к реализации;

* утверждение решения;

* управление ходом реализации решения;

* проверка эффективности решения.

РАЗРАБОТКА МАТЕМАТИЧЕСКОГО АЛГОРИТМА

Выделено полное пространство предпосылок Х из m = 5 факторов (причин), вызывающих неисправность электропривода, и полное пространство заключений Y — из n = 6 симптомов (проявлений) неисправностей электропривода:;.

Между и существуют нечёткие причинные отношения. Все нечёткие отношения можно представить в виде матрицы R c 5 строками и 6 столбцами, т. е. существует матрица нечётких отношений

Конкретные входы (предпосылки) и выходы (заключения) системы можно рассматривать как нечёткие множества, А и В на пространствах Х и Y. Обозначим отношения этих множеств как, где R — матрица, отражающая знания эксперта (экспертов) о влиянии факторов на симптомы; «°» — есть правило композиции нечётких выводов. Направление выводов является обратным к направлению входов для правил. То есть в случае диагностики R (знания эксперта) наблюдаются выходы В (симптомы) и определяются входы, А (факторы).

Знания эксперта имеют вид:

Пусть, например, ,

где первый столбец соответствует симптому; второй столбец — симптому; третий столбец — симптому, четвертый — симптому и т. д.

При этом причиной появления, например, симптома, является первый столбец факторов X (). Значения степеней соответствия напоминают собой вероятности (классические), но при этом не требуется, чтобы, т. е. сумма не должна обязательно равняться единице, как в классической теории вероятностей.

Пусть в результате поверхностного осмотра места аварии на некотором участке коммуникаций ГИК состояние этого участка оценивается экспертом как, т. е. симптом, имеет место со степенью соответствия. Например,

Требуется определить причину такого состояния:

Представим формулы для В и, А в виде строк:

где

Тогда

Формулу можно представить в виде

или

или, транспонируя, в виде нечётких векторов-столбцов

где «» — операция максиминной (max-min) свёртки.

При этом вычисляется «произведение» вектора, А и матрицы R, но вместо операции умножения выполняется операция взятия минимума («» — min), а вместо операции сложения — выполняется операция взятия максимума («» — max) соответственно.

Тогда (1) можно привести к виду:


Решим систему (2)-(5). В уравнении (2):

Из (3) получим:

Из (4) получим:

Из (5) получим:

Таким образом, получаем решение:

т.е. лучше устранить фактор (- параметр, характеризующий проявление фактора — параметр, характеризующий проявление фактора).

Таким образом, задачу диагностики можно рассматривать как моделирование с помощью системы уравнений 1-го порядка, где дизъюнкция заменяется на максимум, а конъюнкция — на минимум.

На практике m и n могут принимать значения от нескольких единиц до нескольких десятков. Можно использовать несколько правил композиции нечётких выводов и могут быть построены 2- и 3-каскадные нечёткие системы принятия решений.

При этом решение будет получено как значение на отрезке (10), в результате чего можно предположить максимальное и минимальное решение.

В общем случае очевидно, что для композиции максимум-минимум существует единственное максимальное и несколько «меньших» решений. Таким образом, решение — это вектор значений, каждое из которых принадлежит некоторому отрезку (лежащему в интервале от 0 до 1).

Аналогичная модель может быть построена и для определения предпосылок, приводящих к появлению факторов (причин) предложенной выше модели диагностики. Например, можно выявить из-за чего возникает коррозия, разрыв трубы, построить соответствующую матрицу бинарных отношений R и снова применить правило композиции нечётких выводов.

Довольно часто из-за проявления субъективного человеческого фактора (незначительных ошибок эксперта) при оценивании состояния участка ГИК не удаётся получить точное решение для системы. В этом случае предлагается найти ближайшее («минимальное по сумме абсолютных отклонений от нуля для каждого из уравнений указанной выше системы) приближённое решение (или решения) системы и принять или отклонить полученное приближённое (одно из приближенных решений).

Очевидно, что приемлемое приближенное решение должно незначительно (на 0. 1−0.3 по сумме абсолютных отклонений) отличаться от точного решения системы. Если суммарное отклонение довольно большое (с точки зрения эксперта), следует предложить самому эксперту снова оценить состояние участка ГИК, так как очевидно, что при первом оценивании он ввёл противоречивые оценки состояния ГИК.

РАЗРАБОТКА АЛГОРИТМА ПРОГРАММЫ

Блок — схема алгоритма работы программы представлена на рисунке 1.

Рисунок 1 — Блок — схема алгоритма работы программы

РАЗРАБОТКА ПРОГРАММЫ

Данная программа написана на языке программирования С++ в среде разработки MFC. MFC — это базовый набор (библиотека) классов, написанных на языке С++ и предназначенных для упрощения и ускорения процесса программирования для Windows. Библиотека содержит многоуровневую иерархию классов, насчитывающую около 200 членов. Они дают возможность создавать Windows-приложения на базе объектно-ориентированного подхода. С точки зрения программиста, MFC представляет собой каркас, на основе которого можно писать программы для Windows.

Одним из основных преимуществ работы с MFC является возможность многократного использования одного и того же кода. Так как библиотека содержит много элементов, общих для всех Windows-приложений, нет необходимости каждый раз писать их заново. Вместо этого их можно просто наследовать (говоря языком объектно-ориентированного программирования). Кроме того, интерфейс, обеспечиваемый библиотекой, практически независим от конкретных деталей, его реализующих. Поэтому программы, написанные на основе MFC, могут быть легко адаптированы к новым версиям Windows (в отличие от большинства программ, написанных обычными методами).

Еще одним существенным преимуществом MFC является упрощение взаимодействия с прикладным программным интерфейсом (API) Windows. Любое приложение взаимодействует с Windows через API, который содержит несколько сот функций. Внушительный размер API затрудняет попытки понять и изучить его целиком. Зачастую даже сложно проследить, как отдельные части API связаны друг с другом! Но поскольку библиотека MFC объединяет (путем инкапсуляции) функции API в логически организованное множество классов, интерфейсом становится значительно легче управлять. Поскольку MFC представляет собой набор классов, написанных на языке С++, поэтому программы, написанные с использованием MFC, должна быть в то же время программами на С++. Для этого необходимо владеть соответствующими знаниями. Для начала необходимо уметь создавать собственные классы, понимать принципы наследования и уметь переопределять виртуальные функции. Хотя программы, использующие библиотеку MFC, обычно не содержат слишком специфических элементов из арсенала С++, для их написания тем не менее требуются солидные знания в данной области.

Программа определяет техническое состояние объекта по его признакам. Текст программы диагностики станка с ЧПУ представлен в приложении А.

СЦЕНАРИЙ ДИАЛОГА

После запуска приложения появится диалоговое окно, через которое осуществляется связь программы с пользователем. Пользователь вводит в нем экспертную матрицу, выбирает один из анализируемых параметров. Исходные величины могут принимать значения от 0 до 1. Виды диалоговых окон представлены на рисунке 2,3.

Рисунок 2 — Вариант диалогового окна № 1

Рисунок 3 — Вариант диалогового окна № 2 икона помощи

ЗАКЛЮЧЕНИЕ

В ходе выполнения данного курсового проекта были разработаны алгоритм и программа для определения технического состояния станка с ЧПУ по его признакам (выходным параметрам). В соответствии с этой моделью был разработан алгоритм её реализации программными средствами, в результате чего написана программа на языке С++ с применением библиотек классов MFC. Разработанная программа соответствует заданным на этапе проектирования требованиям. Выполненный проект может быть модернизирован и использован в производственных целях для анализа и контроля станка с ЧПУ и определения вероятностей причин его возможных повреждений. В ходе проведения вычислительного эксперимента программа сбоев не давала, результаты подтверждались проверочными расчетами. Ехе-файл проекта занимает 184 Кб.

СПИСОК ЛИТЕРАТУРЫ

1. Дэн Гукин С, 2-е издание. — М.: Диалектика, 2006. — 355 с.

2. Каев Артем «MFC. Шаг за шагом» — http: //www. firststeps. ru/

3. Никитин Ю. Р. Методическое пособие к выполнению курсовой работы по дисциплине «Системный анализ и принятие решений»: Учеб. пособие. — Ижевск: Изд-во ИжГТУ, 2009.- 8 с.

4. ГОСТ 19. 504−79 (СТ СЭВ 2095−80). Руководство программиста. Требования к содержанию и оформлению.

5. ГОСТ 19. 701−90 (ИСО 5807−85). Схемы алгоритмов, программ, данных и систем.

ПРИЛОЖЕНИЕ А

Текст программы

программа технический состояние станок

Текст программы определения технического состояния станка с ЧПУ по выходным параметрам.

#include «stdafx. h»

#include «KurszpT. h»

#include «KurszpTDlg. h»

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

class CAboutDlg: public CDialog

{

public:

CAboutDlg ();

enum {IDD = IDD_ABOUTBOX};

protected:

virtual void DoDataExchange (CDataExchange* pDX); // DDX/DDV support

protected:

DECLARE_MESSAGE_MAP ()

};

CAboutDlg: :CAboutDlg (): CDialog (CAboutDlg: :IDD)

{

}

void CAboutDlg: :DoDataExchange (CDataExchange* pDX)

{

CDialog: :DoDataExchange (pDX);

}

BEGIN_MESSAGE_MAP (CAboutDlg, CDialog)

END_MESSAGE_MAP ()

CKurszpTDlg: :CKurszpTDlg (CWnd* pParent /*=NULL*/)

: CDialog (CKurszpTDlg: :IDD, pParent)

, res1(0)

, res2(0)

, res3(0)

, res4(0)

, res5(0)

, r11(0. 9)

, r12(0. 1)

, r13(0. 1)

, r14(0)

, r15(0. 1)

, r16(0. 3)

, r21(0. 4)

, r22(0. 3)

, r23(0. 3)

, r24(0. 1)

, r25(0. 2)

, r26(0. 7)

, r31(0. 1)

, r32(0. 3)

, r33(0. 8)

, r34(0. 5)

, r35(0. 1)

, r36(0. 4)

, r41(0. 2)

, r42(0. 1)

, r43(0. 3)

, r44(0. 6)

, r45(0. 9)

, r46(0. 1)

, r51(0. 5)

, r52(0. 1)

, r53(0. 1)

, r54(0. 8)

, r55(0. 2)

, r56(0. 6)

{

m_hIcon = AfxGetApp ()-> LoadIcon (IDR_MAINFRAME);

}

void CKurszpTDlg: :DoDataExchange (CDataExchange* pDX)

{

CDialog: :DoDataExchange (pDX);

DDX_Text (pDX, IDC_EDIT31, res1);

DDX_Text (pDX, IDC_EDIT32, res2);

DDX_Text (pDX, IDC_EDIT33, res3);

DDX_Text (pDX, IDC_EDIT34, res4);

DDX_Text (pDX, IDC_EDIT35, res5);

DDX_Text (pDX, IDC_EDIT1, r11);

DDX_Text (pDX, IDC_EDIT2, r12);

DDX_Text (pDX, IDC_EDIT3, r13);

DDX_Text (pDX, IDC_EDIT4, r14);

DDX_Text (pDX, IDC_EDIT5, r15);

DDX_Text (pDX, IDC_EDIT6, r16);

DDX_Text (pDX, IDC_EDIT7, r21);

DDX_Text (pDX, IDC_EDIT8, r22);

DDX_Text (pDX, IDC_EDIT9, r23);

DDX_Text (pDX, IDC_EDIT10, r24);

DDX_Text (pDX, IDC_EDIT11, r25);

DDX_Text (pDX, IDC_EDIT12, r26);

DDX_Text (pDX, IDC_EDIT13, r31);

DDX_Text (pDX, IDC_EDIT14, r32);

DDX_Text (pDX, IDC_EDIT15, r33);

DDX_Text (pDX, IDC_EDIT16, r34);

DDX_Text (pDX, IDC_EDIT17, r35);

DDX_Text (pDX, IDC_EDIT18, r36);

DDX_Text (pDX, IDC_EDIT19, r41);

DDX_Text (pDX, IDC_EDIT20, r42);

DDX_Text (pDX, IDC_EDIT21, r43);

DDX_Text (pDX, IDC_EDIT22, r44);

DDX_Text (pDX, IDC_EDIT23, r45);

DDX_Text (pDX, IDC_EDIT24, r46);

DDX_Text (pDX, IDC_EDIT25, r51);

DDX_Text (pDX, IDC_EDIT26, r52);

DDX_Text (pDX, IDC_EDIT27, r53);

DDX_Text (pDX, IDC_EDIT28, r54);

DDX_Text (pDX, IDC_EDIT29, r55);

DDX_Text (pDX, IDC_EDIT30, r56);

}

BEGIN_MESSAGE_MAP (CKurszpTDlg, CDialog)

ON_WM_SYSCOMMAND ()

ON_WM_PAINT ()

ON_WM_QUERYDRAGICON ()

//}}AFX_MSG_MAP

ON_BN_CLICKED (IDOK, & CKurszpTDlg: OnBnClickedOk)

ON_BN_CLICKED (IDC_BUTTON1, & CKurszpTDlg: OnBnClickedButton1)

Рисунок А1 — Продолжение

END_MESSAGE_MAP ()

BOOL CKurszpTDlg: :OnInitDialog ()

{

CDialog: :OnInitDialog ();

// Add «About…» menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.

ASSERT ((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT (IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu (FALSE);

if (pSysMenu ≠ NULL)

{

CString strAboutMenu;

strAboutMenu. LoadString (IDS_ABOUTBOX);

if (!strAboutMenu. IsEmpty ())

{

pSysMenu-> AppendMenu (MF_SEPARATOR);

pSysMenu-> AppendMenu (MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Set the icon for this dialog. The framework does this automatically

// when the application’s main window is not a dialog

SetIcon (m_hIcon, TRUE); // Set big icon

SetIcon (m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

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

}

void CKurszpTDlg: :OnSysCommand (UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout. DoModal ();

}

else

{

CDialog: :OnSysCommand (nID, lParam);

}

}

void CKurszpTDlg: :OnPaint ()

{

if (IsIconic ())

{

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

SendMessage (WM_ICONERASEBKGND, reinterpret_cast< 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

Рисунок А1 — Продолжение

dc. DrawIcon (x, y, m_hIcon);

}

else

{

CDialog: :OnPaint ();

}

}

HCURSOR CKurszpTDlg: :OnQueryDragIcon ()

{

return static_cast< HCURSOR>(m_hIcon);

}

void CKurszpTDlg: :OnBnClickedOk ()

{

// TODO: Add your control notification handler code here

UpdateData (true);

float mas[5], maxim, ee, v[5], max[5];

int a, b, c, d, e, f, i, j;

//Первое состояние

if (IsDlgButtonChecked (IDC_RADIO1))

{

mas[0]=r11; mas[1]=r21;mas[2]=r31;mas[3]=r41;mas[4]=r51;

//Находим а1

max[0]=r11; max[1]=r21;max[2]=r31;max[3]=r41;max[4]=r51;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[0]==maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1> =»));

res1=maxim;

}

if (mas[0]< maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1< =»));

res1=mas[0];

}

if (mas[0]> maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1=»));

res1=mas[0];

}

//Находим а2

max[0]=r12; max[1]=r22;max[2]=r32;max[3]=r42;max[4]=r52;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[1]==maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2> =»));

res2=maxim;

}

if (mas[1]< maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2< =»));

res2=mas[1];

}

if (mas[1]> maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2=»));

res2=mas[1];

}

//Находим а3

max[0]=r13; max[1]=r23;max[2]=r33;max[3]=r43;max[4]=r53;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[2]==maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3> =»));

res3=maxim;

}

if (mas[2]< maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3< =»));

res3=mas[2];

}

if (mas[2]> maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3=»));

res3=mas[2];

}

//Находим а4

max[0]=r14; max[1]=r24;max[2]=r34;max[3]=r44;max[4]=r54;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[3]==maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4> =»));

res4=maxim;

}

if (mas[3]< maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4< =»));

res4=mas[3];

}

if (mas[3]> maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4=»));

res4=mas[3];

}

//Находим а5

max[0]=r15; max[1]=r25;max[2]=r35;max[3]=r45;max[4]=r55;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[4]==maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5> =»));

res5=maxim;

}

if (mas[4]< maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5< =»));

res5=mas[4];

}

if (mas[4]> maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5=»));

res5=mas[4];

}

}

/////////Complete///////////

//Второе состояние

if (IsDlgButtonChecked (IDC_RADIO2))

{

mas[0]=r12; mas[1]=r22;mas[2]=r32;mas[3]=r42;mas[4]=r52;

//Находим а1

max[0]=r11; max[1]=r21;max[2]=r31;max[3]=r41;max[4]=r51;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[0]==maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1> =»));

res1=maxim;

}

if (mas[0]< maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1< =»));

res1=mas[0];

}

if (mas[0]> maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1=»));

res1=mas[0];

}

//Находим а2

max[0]=r12; max[1]=r22;max[2]=r32;max[3]=r42;max[4]=r52;

Рисунок А1 — Продолжение

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[1]==maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2> =»));

res2=maxim;

}

if (mas[1]< maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2< =»));

res2=mas[1];

}

if (mas[1]> maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2=»));

res2=mas[1];

}

//Находим а3

max[0]=r13; max[1]=r23;max[2]=r33;max[3]=r43;max[4]=r53;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[2]==maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3> =»));

res3=maxim;

}

if (mas[2]< maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3< =»));

res3=mas[2];

}

if (mas[2]> maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3=»));

res3=mas[2];

}

//Находим а4

max[0]=r14; max[1]=r24;max[2]=r34;max[3]=r44;max[4]=r54;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[3]==maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4> =»));

res4=maxim;

}

if (mas[3]< maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4< =»));

res4=mas[3];

}

if (mas[3]> maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4=»));

res4=mas[3];

}

//Находим а5

max[0]=r15; max[1]=r25;max[2]=r35;max[3]=r45;max[4]=r55;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[4]==maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5> =»));

res5=maxim;

}

if (mas[4]< maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5< =»));

res5=mas[4];

}

if (mas[4]> maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5=»));

res5=mas[4];

}

}

//Третье состояние

if (IsDlgButtonChecked (IDC_RADIO3))

{

mas[0]=r13; mas[1]=r23;mas[2]=r33;mas[3]=r43;mas[4]=r53;

//Находим а1

max[0]=r11; max[1]=r21;max[2]=r31;max[3]=r41;max[4]=r51;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[0]==maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1> =»));

res1=maxim;

}

if (mas[0]< maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1< =»));

res1=mas[0];

}

if (mas[0]> maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1=»));

res1=mas[0];

}

//Находим а2

max[0]=r12; max[1]=r22;max[2]=r32;max[3]=r42;max[4]=r52;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[1]==maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2> =»));

res2=maxim;

}

if (mas[1]< maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2< =»));

res2=mas[1];

}

if (mas[1]> maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2=»));

res2=mas[1];

}

//Находим а3

max[0]=r13; max[1]=r23;max[2]=r33;max[3]=r43;max[4]=r53;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[2]==maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3> =»));

res3=maxim;

}

if (mas[2]< maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3< =»));

res3=mas[2];

}

if (mas[2]> maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3=»));

res3=mas[2];

}

//Находим а4

max[0]=r14; max[1]=r24;max[2]=r34;max[3]=r44;max[4]=r54;

maxim=max[0];

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

Рисунок А1 — Продолжение

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[3]==maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4> =»));

res4=maxim;

}

if (mas[3]< maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4< =»));

res4=mas[3];

}

if (mas[3]> maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4=»));

res4=mas[3];

}

//Находим а5

max[0]=r15; max[1]=r25;max[2]=r35;max[3]=r45;max[4]=r55;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[4]==maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5> =»));

res5=maxim;

}

if (mas[4]< maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5< =»));

res5=mas[4];

}

if (mas[4]> maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5=»));

res5=mas[4];

}

}

//Четвертое состояние

if (IsDlgButtonChecked (IDC_RADIO4))

{

mas[0]=r14; mas[1]=r24;mas[2]=r34;mas[3]=r44;mas[4]=r54;

//Находим а1

max[0]=r11; max[1]=r21;max[2]=r31;max[3]=r41;max[4]=r51;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[0]==maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1> =»));

res1=maxim;

}

if (mas[0]< maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1< =»));

res1=mas[0];

}

if (mas[0]> maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1=»));

res1=mas[0];

}

//Находим а2

max[0]=r12; max[1]=r22;max[2]=r32;max[3]=r42;max[4]=r52;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[1]==maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2> =»));

res2=maxim;

}

if (mas[1]< maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2< =»));

res2=mas[1];

}

if (mas[1]> maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2=»));

res2=mas[1];

}

//Находим а3

max[0]=r13; max[1]=r23;max[2]=r33;max[3]=r43;max[4]=r53;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[2]==maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3> =»));

res3=maxim;

}

if (mas[2]< maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3< =»));

res3=mas[2];

}

if (mas[2]> maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3=»));

res3=mas[2];

}

//Находим а4

max[0]=r14; max[1]=r24;max[2]=r34;max[3]=r44;max[4]=r54;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[3]==maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4> =»));

res4=maxim;

}

if (mas[3]< maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4< =»));

res4=mas[3];

}

if (mas[3]> maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4=»));

res4=mas[3];

}

//Находим а5

max[0]=r15; max[1]=r25;max[2]=r35;max[3]=r45;max[4]=r55;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[4]==maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5> =»));

res5=maxim;

}

if (mas[4]< maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5< =»));

res5=mas[4];

}

if (mas[4]> maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5=»));

res5=mas[4];

}

}

//Пятое состояние

if (IsDlgButtonChecked (IDC_RADIO5))

{

mas[0]=r15; mas[1]=r25;mas[2]=r35;mas[3]=r45;mas[4]=r55;

//Находим а1

max[0]=r11; max[1]=r21;max[2]=r31;max[3]=r41;max[4]=r51;

Рисунок А1 — Продолжение

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[0]==maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1> =»));

res1=maxim;

}

if (mas[0]< maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1< =»));

res1=mas[0];

}

if (mas[0]> maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1=»));

res1=mas[0];

}

//Находим а2

max[0]=r12; max[1]=r22;max[2]=r32;max[3]=r42;max[4]=r52;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[1]==maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2> =»));

res2=maxim;

}

if (mas[1]< maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2< =»));

res2=mas[1];

}

if (mas[1]> maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2=»));

res2=mas[1];

}

//Находим а3

max[0]=r13; max[1]=r23;max[2]=r33;max[3]=r43;max[4]=r53;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[2]==maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3> =»));

Рисунок А1 — Продолжение

res3=maxim;

}

if (mas[2]< maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3< =»));

res3=mas[2];

}

if (mas[2]> maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3=»));

res3=mas[2];

}

//Находим а4

max[0]=r14; max[1]=r24;max[2]=r34;max[3]=r44;max[4]=r54;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[3]==maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4> =»));

res4=maxim;

}

if (mas[3]< maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4< =»));

res4=mas[3];

}

if (mas[3]> maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4=»));

res4=mas[3];

}

//Находим а5

max[0]=r15; max[1]=r25;max[2]=r35;max[3]=r45;max[4]=r55;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[4]==maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5> =»));

res5=maxim;

}

if (mas[4]< maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5< =»));

res5=mas[4];

}

if (mas[4]> maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5=»));

res5=mas[4];

}

}

//Шестое состояние

if (IsDlgButtonChecked (IDC_RADIO6))

{

mas[0]=r16; mas[1]=r26;mas[2]=r36;mas[3]=r46;mas[4]=r56;

//Находим а1

max[0]=r11; max[1]=r21;max[2]=r31;max[3]=r41;max[4]=r51;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[0]==maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1> =»));

res1=maxim;

}

if (mas[0]< maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1< =»));

res1=mas[0];

}

if (mas[0]> maxim)

{

SetDlgItemText (IDC_EDIT36,_T («a1=»));

res1=mas[0];

}

//Находим а2

max[0]=r12; max[1]=r22;max[2]=r32;max[3]=r42;max[4]=r52;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[1]==maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2> =»));

res2=maxim;

}

if (mas[1]< maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2< =»));

res2=mas[1];

}

if (mas[1]> maxim)

{

SetDlgItemText (IDC_EDIT37,_T («a2=»));

res2=mas[1];

}

//Находим а3

max[0]=r13; max[1]=r23;max[2]=r33;max[3]=r43;max[4]=r53;

maxim=max[0];

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

{

if (max[i]> maxim)

Рисунок А1 — Продолжение

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[2]==maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3> =»));

res3=maxim;

}

if (mas[2]< maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3< =»));

res3=mas[2];

}

if (mas[2]> maxim)

{

SetDlgItemText (IDC_EDIT38,_T («a3=»));

res3=mas[2];

}

//Находим а4

max[0]=r14; max[1]=r24;max[2]=r34;max[3]=r44;max[4]=r54;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[3]==maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4> =»));

res4=maxim;

}

if (mas[3]< maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4< =»));

res4=mas[3];

}

if (mas[3]> maxim)

{

SetDlgItemText (IDC_EDIT39,_T («a4=»));

res4=mas[3];

}

//Находим а5

max[0]=r15; max[1]=r25;max[2]=r35;max[3]=r45;max[4]=r55;

maxim=max[0];

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

{

if (max[i]> maxim)

{

maxim=max[i];

}

}

///////поиск интервала

if (mas[4]==maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5> =»));

res5=maxim;

}

if (mas[4]< maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5< =»));

res5=mas[4];

}

if (mas[4]> maxim)

{

SetDlgItemText (IDC_EDIT40,_T («a5=»));

res5=mas[4];

}

}

UpdateData (false);

}

void CKurszpTDlg: :OnBnClickedButton1()

{

// TODO: Add your control notification handler code here

MessageBox (_T («Программа определения технического состоятиня станка с ЧПУ по его выходным параметрам разработана студентом гр. 7−05−3 Дорогим Владимиром Олеговичем»));

}

ПРИЛОЖЕНИЕ Б

Руководство пользователя

Программа представляет собой приложение, позволяющее анализировать техническое состояние станка с ЧПУ по выходным параметрам, и определять вероятности возможных неполадок. Исполняемый файл называется «Kurszpt. exe». При запуске программы вы наблюдаете диалоговое окно. Окна представлены на рисунках 2,3.

1) Для запуска программы нужно запустить файл Kurszpt. exe.

2) Данные вводятся в поле экспертной матрицы.

3) Далее выбирается один из исследуемых факторов, для этого нужно отметить какой-либо из помеченных слева.

4) Для проведения расчета нужно нажать на кнопку «Raschet».

5) Если все сделано верно, на экране отобразятся результаты.

6) Чтобы узнать информацию о разработчике программы, необходимо нажать на кнопку помощью «Help».

7) Для завершения работы следует нажать кнопку «Cancel».

ПРИЛОЖЕНИЕ В

Руководство программиста

Данная программа предназначена для расчета балок определенно типа. Программа разработана в Microsoft Visual Studio 2008 в среде программирования MFC (Microsoft Foundation Classes), и предназначена для операционной системы Microsoft Windows 98/XP/Vista/ 7, с предустановленной Microsoft. NET Framework 3.0. Программа имеет диалоговый интерфейс.

Описание функций:

OnPaint ();

Создание хендела окна.

Входные параметры: нет

Выходные параметры: нет.

Связи: функции API.

Результат: создание области рисования.

OnBnClickedOk ();

Функция для расчета параметров.

Входные параметры: экспертная матрица.

Выходные параметры: данные о вероятности проявления симптомов.

Связи: нет.

Результат: получение по выходным параметрам входных.

Показать Свернуть
Заполнить форму текущей работой