- •1 Характеристика мови програмування
- •2.4 Опис класів та методів
- •2.7 Контрольний приклад
- •3.4 Опис класів та методів
- •3.7 Керівництво користувачеві
- •3.4 Опис класів та методів
- •4.7 Контрольний приклад
- •5.4 Опис класів та методів
- •6.4 Опис класів та методів
- •6.7 Контрольний приклад
- •7.4 Опис класів та методів
- •7.7 Контрольний приклад
- •Список використаних джерел
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 - «Про автора»