Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otchet.docx
Скачиваний:
5
Добавлен:
26.03.2015
Размер:
1.27 Mб
Скачать

2.4 Опис класів та методів

При реалізації задачі в якості об’єктів розглядаємо форми для обчислення тих чи інших змінних. Для заданих об’єктів в проекті розроблені наступні класи Czz1, Czz2, Czz3 з наступними інтерфейсними частинами представлених у підрозділу 2.5 і наступною реалізацію представленою у підрозділу 2.5.

Клас CFox1Dlg (головна форма програми) створений шляхом додавання до базового класу членів змінних та методів.

Клас CFox1Dlg має наступний інтерфейс:

class CFox1Dlg : public CDialog

{

// Construction

public:

CFox1Dlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data

//{{AFX_DATA(CFox1Dlg)

enum { IDD = IDD_FOX1_DIALOG };

// NOTE: the ClassWizard will add data members here

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CFox1Dlg)

protected:

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

//}}AFX_VIRTUAL

// Implementation

protected:

HICON m_hIcon;

// Generated message map functions

//{{AFX_MSG(CFox1Dlg)

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void On1();

afx_msg void On2();

afx_msg void On3();

afx_msg void OnMenuitem32775();

afx_msg void OnAppExit();

afx_msg void OnMenuitem32774();

afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);

afx_msg void OnRadio1();

afx_msg void OnRadio2();

afx_msg void OnRadio3();

afx_msg void OnButton1();

afx_msg void OnButton2();

afx_msg void OnButton3();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

Клас Czz1 (форма для розв’язування лінійних процесів) створений шляхом додавання до базового класу членів змінних та методів.

Клас Czz1 має наступний інтерфейс:

class Czz1 : public CDialog

{

// Construction

public:

Czz1(CWnd* pParent = NULL); // standard constructor

// Dialog Data

//{{AFX_DATA(Czz1)

enum { IDD = IDD_DIALOG1 };

double m_z;

float m_s;

float m_x;

float m_y;

float m_b;

//}}AFX_DATA

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(Czz1)

protected:

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

//}}AFX_VIRTUAL

// Implementation

protected:

// Generated message map functions

//{{AFX_MSG(Czz1)

afx_msg void OnRadio1();

afx_msg void OnRadio2();

virtual void OnOK();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

Методи є обробниками подій кнопок. Члени змінних додаються до класу за допомогою майстра ClassWizard, шляхом зв’язування об’єктів для вводу значень змінних та заданих ідентифікаторів для змінних, це представлено у таблиці 2.5

Таблиця 2.5 – змінні - члена класу Czz1

Ідентифікатор об’єкта

Ідентифікатор змінної - члена класу

Тип змінної

IDC_EDIT1

m_x

float

IDC_EDIT2

m_y

float

IDC_EDIT3

m_z

double

IDC_EDIT4

m_b

float

Клас Czz2 (форма для розв’язування розгалужених процесів) створений шляхом додавання до базового класу членів змінних та методів.

Клас Czz2 має наступний інтерфейс:

class Czz2 : public CDialog

{

// Construction

public:

Czz2(CWnd* pParent = NULL); // standard constructor

// Dialog Data

//{{AFX_DATA(Czz2)

enum { IDD = IDD_DIALOG2 };

float m_x;

float m_f;

//}}AFX_DATA

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(Czz2)

protected:

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

//}}AFX_VIRTUAL

// Implementation

protected:

// Generated message map functions

//{{AFX_MSG(Czz2)

afx_msg void OnButton1();

afx_msg void OnButton2();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

Методи є обробниками подій кнопок. Члени змінних додаються до класу за допомогою майстра ClassWizard, шляхом зв’язування об’єктів для вводу значень змінних та заданих ідентифікаторів для змінних, це представлено у таблиці 2.6

Таблиця 2.6 – змінні - члена класу Czz2

Ідентифікатор об’єкта

Ідентифікатор змінної - члена класу

Тип змінної

IDC_EDIT1

m_x

float

IDC_EDIT2

m_f

float

Клас Czz3 (форма для розв’язування циклічних процесів) створений шляхом додавання до базового класу членів змінних та методів.

Клас Czz3 має наступний інтерфейс:

class Czz3 : public CDialog

{

// Construction

public:

Czz3(CWnd* pParent = NULL); // standard constructor

// Dialog Data

//{{AFX_DATA(Czz3)

enum { IDD = IDD_DIALOG3 };

CListBox m_q;

float m_xn;

float m_xk;

float m_h;

float m_b;

float m_a;

//}}AFX_DATA

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(Czz3)

protected:

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

//}}AFX_VIRTUAL

// Implementation

protected:

// Generated message map functions

//{{AFX_MSG(Czz3)

afx_msg void OnButton1();

virtual void OnOK();

afx_msg void OnButton2();

afx_msg void OnButton3();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

Методи є обробниками подій кнопок. Члени змінних додаються до класу за допомогою майстра ClassWizard, шляхом зв’язування об’єктів для вводу значень змінних та заданих ідентифікаторів для змінних, це представлено у таблиці 2.7

Таблиця 2.7– змінні - члена класу Czz3

Ідентифікатор об’єкта

Ідентифікатор змінної - члена класу

Тип змінної

IDC_EDIT1

m_xn

float

IDC_EDIT2

m_xk

float

IDC_EDIT3

m_h

float

IDC_EDIT4

m_a

float

IDC_EDIT6

m_b

float

IDC_LIST3

m_q

CListBox

2.5 Програмний код

//Блок 1 – метод по обробці кнопки Button1 на головній формі

void CFox1Dlg::OnButton1()

{ Czz1 dsa;

dsa.DoModal(); }

//Блок 2 – метод по обробці кнопки Button2 на головній формі

void CFox1Dlg::OnButton2()

{ Czz2 asd;

asd.DoModal(); }

//Блок 3 – метод по обробці кнопки Button3 на головній формі

void CFox1Dlg::OnButton3()

{ Czz3 ads;

ads.DoModal(); }

//Блок 4 – метод по обробці кнопки Radio1 на формі лінійних процесів

void Czz1::OnRadio1()

{ UpdateData();

if (m_x==0) {

CString Message = " X не может равняться 0" ;

CString Title = "Ошибка";

UINT nType = MB_ICONSTOP | MB_DEFBUTTON2 ;

int anser = MessageBox ( Message , Title , nType ) ;} else

if (m_y<0) {

CString Message = " Нельзя взять логарифм из отрицательного числа, возьмите положительный Y" ;

CString Title = "Ошибка";

UINT nType = MB_ICONSTOP | MB_DEFBUTTON2 ;

int anser = MessageBox ( Message , Title , nType ) ; } else

m_z=(m_x+6*m_y)/(sin(m_x)+log(m_y));

UpdateData(false);

} //Блок 5 – метод по обробці кнопки Radio2 на формі лінійних процесів

void Czz1::OnRadio2()

{ UpdateData();

m_s=m_x+m_y;

m_b=sqrt(abs(m_y)*(pow(exp(1),m_s)))-pow(cos(m_z),3);

UpdateData(false);

}

//Блок 6 – метод по обробці кнопки OnOK на формі лінійних процесів

void Czz1::OnOK()

{CString Message = " Вы действительно хотите завершить работу?" ;

CString Title = "Завершение работы";

UINT nType = MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2 ;

int anser = MessageBox ( Message , Title , nType ) ;

if (anser==IDYES) CDialog:: OnOK();

}

//Блок 8– метод по обробці кнопки Button1 на формі розгалужених процесів

void Czz2::OnButton1()

{ UpdateData();

if (m_x==2) m_f=(cos(3*m_x)+pow(m_x,3))/(pow(sin(m_x),3)-3*m_x);

if (m_x>2) m_f=pow(sin(m_x),2)+sqrt(pow(m_x,2)+2);

if (m_x<2) m_f=pow(m_x,3)*(log(3)/log(2))*fabs(1/atan(m_x)-exp(-m_x));

UpdateData(false); }

//Блок 9– метод по обробці кнопки Button2 на формі розгалужених процесів

void Czz2::OnButton2()

{ CString Message = " Вы действительно хотите завершить работу?" ;

CString Title = "Завершение работы";

UINT nType = MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2 ;

int anser = MessageBox ( Message , Title , nType ) ;

if (anser==IDYES) CDialog:: OnOK(); }

//Блок 10 – метод по обробці кнопки Button1 на формі циклічних процесів

void Czz3::OnButton1()

{ CString q,w;

UpdateData();

m_q.ResetContent();

double r; float x; float y;

r=(pow(m_a,1.0/2.0));

if (m_xn<=0&&m_xk>=0) MessageBox("Сделайте промежуток в положительном или отрицательном промежутке "); else

if (m_xn>=0&&m_a<=0) MessageBox("Сделайте отрицательное Х нач или положительное значение А"); else

if (m_xn<=0.4&&m_a>=0) MessageBox("Сделайте положительное Х нач или отрицательное значение А "); else

if (m_b<=0&&m_b>=-1.2) MessageBox("'В' нельзя взять в промежутке

0...-1.2"); else

if (m_xn<=0&&m_b<=0) MessageBox("'В' не может быть отрицательным при отрицательной 'X' начальной или 'X'=0"); else

if (m_xn>m_xk) MessageBox("X начальная не может быть больше Х конечной"); else

for(x=m_xn;x<=m_xk;x+=m_h)

{ if (x>=r)

y=pow(exp(m_a*x)-1/atan(m_b*m_b*x),1.0/3.0); else

y=2.5*pow(sin(pow(m_b,2))*x,2)+log(pow(m_a*m_b,5)*x);

q.Format("%15.2f",y);

w.Format("%15.2f",x);

q=q+" | | "+w;

m_q.AddString(q); }

UpdateData(false); }

//Блок 11 – метод по обробці кнопки Button2 на формі циклічних процесів

void Czz3::OnButton2()

{ CString q,w;

UpdateData();

m_q.ResetContent();

double r; float x; float y;

r=(pow(m_a,1.0/2.0));

x=m_xn;

if (m_xn<=0&&m_xk>=0) MessageBox("Сделайте промежуток в положительном или отрицательном промежутке "); else

if (m_xn>=0&&m_a<=0) MessageBox("Сделайте отрицательное Х нач или положительное значение А"); else

if (m_xn<=0.4&&m_a>=0) MessageBox("Сделайте положительное Х нач или отрицательное значение А "); else

if (m_b<=0&&m_b>=-1.2) MessageBox("'В' нельзя взять в промежутке

0...-1.2"); else

if (m_xn<=0&&m_b<=0) MessageBox("'В' не может быть отрицательным при отрицательной 'X' начальной или 'X'=0"); else

if (m_xn>m_xk) MessageBox("X начальная не может быть больше Х конечной"); else

while(x<=m_xk) { if (x>=r)

y=pow(exp(m_a*x)-1/atan(m_b*m_b*x),1.0/3.0); else y=2.5*pow(sin(pow(m_b,2))*x,2)+log(pow(m_a*m_b,5)*x);

q.Format("%15.2f",y);

w.Format("%15.2f",x);

q=q+" | | "+w;

m_q.AddString(q);

x+=m_h; }

UpdateData(false); }

//Блок 12 – метод по обробці кнопки Button3 на формі циклічних процесів

void Czz3::OnButton3()

{ CString q,w;

UpdateData();

m_q.ResetContent();

double r; float x; float y;

r=(pow(m_a,1.0/2.0));

x=m_xn;

if (m_xn<=0&&m_xk>=0) MessageBox("Сделайте промежуток в положительном или отрицательном промежутке "); else

if (m_xn>=0&&m_a<=0) MessageBox("Сделайте отрицательное Х нач или положительное значение А"); else

if (m_xn<=0.4&&m_a>=0) MessageBox("Сделайте положительное Х нач или отрицательное значение А "); else

if (m_b<=0&&m_b>=-1.2) MessageBox("'В' нельзя взять в промежутке

0...-1.2"); else

if (m_xn<=0&&m_b<=0) MessageBox("'В' не может быть отрицательным при отрицательной 'X' начальной или 'X'=0"); else

if (m_xn>m_xk) MessageBox("X начальная не может быть больше Х конечной"); else

do { if (x>=r)

y=pow(exp(m_a*x)-1/atan(m_b*m_b*x),1.0/3.0); else

y=2.5*pow(sin(pow(m_b,2))*x,2)+log(pow(m_a*m_b,5)*x);

q.Format("%15.2f",y);

w.Format("%15.2f",x);

q=q+" | | "+w;

m_q.AddString(q);

x+=m_h; }

while(x<=m_xk);

UpdateData(false); }

//Блок 13 – метод по обробці кнопки OnOK на формі циклічних процесів

void Czz3::OnOK()

{ CString Message = " Вы действительно хотите завершить работу?" ;

CString Title = "Завершение работы";

UINT nType = MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2 ;

int anser = MessageBox ( Message , Title , nType ) ;

if (anser==IDYES) CDialog:: OnOK(); }

2.6 Керівництво користувачеві

Для запуску програми запустити файл Fox1.exe. На головній формі розташоване головне та контекстне меню програми, представлених на рисунку 2.8.

Рисунок 2.8 – Головне та контекстне меню програми

Для розв’язання задачі лінійних процесів необхідно натиснути на кнопку «Линейные процессы», або пункт меню «Розрахунок» - «Задача 1», або натиснути правою кнопкою на формі та вибрати пункт «Задача 1». Після чого з’явиться форма з умовою задачі та вводу даних для розв’язання задачі, яка представлена на рисунку 2.9.

Рисунок 2.9 – Форма для розв’язання задачі лінійних процесів

Для розрахунку значення змінних z та f треба задати данні x та y дійсного типу. Для виводу результатів треба натиснути кнопку «Z ==», а потім «F(x;y;z)==».

Для розв’язання задачі розгалужених процесів необхідно натиснути на кнопку «Разветвляющиеся процессы», або пункт меню «Розрахунок» - «Задача 2», або натиснути правою кнопкою на формі та вибрати пункт «Задача 2». Після чого з’явиться форма з умовою задачі та вводу даних для розв’язання задачі, яка представлена на рисунку 2.10.

Рисунок 2.10 – Форма для розв’язання задачі розгалужених процесів

Для розрахунку значення змінної lyamda треба задати данні Х дійсного типу. Для виводу результатів треба натиснути кнопку «Результат».

Для розв’язання задачі циклічних процесів необхідно натиснути на кнопку «Циклические процессы», або пункт меню «Розрахунок» - «Задача 3», або натиснути правою кнопкою на формі та вибрати пункт «Задача 3». Після чого з’явиться форма з умовою задачі та вводу даних для розв’язання задачі, яка представлена на рисунку 2.11.

Рисунок 2.11 – Форма для розв’язання задачі циклічних процесів

Для розрахунку значення змінної y треба задати данні a, b, шаг, х начальное, х конечное. Для виводу результатів пропонується три кнопки які відображають один з трьох циклів «Результат цикл FOR», «Результат цикл WHILE», «Результат цикл DO WHILE» розрахунки в них однакові так що різниці немає. Після завершення роботи з програмою натисніть на кнопку «ВИХІД».

Для виводу інформації о програмі натиснути на пункт меню «Додатково» - «Про програму», представлено на рисунку 2.12

Рисунок 2.12 – «Про програму»

Для виводу інформації про автора натиснути на пункт меню «Додатково» - «Про автора», представлено на рисунку 2.13

Рисунок 2.13 - «Про автора»

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]