![](/user_photo/_userpic.png)
- •Курсовая работа по дисциплине: Информатика
- •Оглавление
- •Описание хода выполнения курсовой работы. Первый этап.
- •Решение в matlab:
- •Решение путем программирования:
- •Выводы по этапу:
- •Второй этап.
- •Решение путем программирования.
- •Выводы по курсовой работе.
- •Приложение. Код проекта: Файл my.H:
- •Файл интеграл.Cpp:
- •Файл оптимизация.Cpp:
- •Файл курсовая.Сpp:
- •Схемы алгоритмов и процедур:
- •Краткое описание используемых методов
- •Литература
Файл оптимизация.Cpp:
#include "stdafx.h"
#include "my.h"
double f(double k, double x)
{
return k * (2 * x * x + 3 * exp(-x)); // описание функции
}
double dihotom(HWND hDlg, HWND hListBox, double E, double k, double a, double b) // нахождение минимума методом дихотомии
{
int n = 1;
double xmin, ymin, x1, x2;
double d = E / 2 - E / 10; // параметр метода
do
{
x1 = (a + b - d) / 2;
x2 = (a + b + d) / 2;
double c = b - a;
TCHAR str[100];
swprintf(str, TEXT(" %-2d ║ %.06f ║ %.06f║ %.06f║ %.06f║ %.06f║ %.06f║ %.06f"), n, a, b, x1, x2, f(k,x1), f(k,x2), c);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)str);
if (f(k, x1) > f(k, x2)) // определение границ нового отрезка неопределенности
a = x1;
else
b = x2;
n++;
} while ((b - a) > E);
xmin = (a + b) / 2; // абсцисса точки минимума
ymin = f(k, xmin);
TCHAR str[20];
swprintf(str, TEXT("%.5g"), xmin);
SetDlgItemText(hDlg, IDC_XMIN, str);
swprintf(str, TEXT("%.5g"), ymin);
SetDlgItemText(hDlg, IDC_YMIN, str);
return xmin; // возвращение минимума функции
}
Файл курсовая.Сpp:
#include "stdafx.h"
#include "my.h"
#define MAX_LOADSTRING 100
// Глобальные переменные:
HINSTANCE hInst; // текущий экземпляр
TCHAR szTitle[MAX_LOADSTRING]; // Текст строки заголовка
TCHAR szWindowClass[MAX_LOADSTRING]; // имя класса главного окна
// Отправить объявления функций, включенных в этот модуль кода:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK Zadan(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK integral(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK minimum(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK Graf(HWND, UINT, WPARAM, LPARAM);
double E, x1, x2, x3, x4, x5, fx1, fx2, fx3, fx4, fx5, c, d;
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: разместите код здесь.
MSG msg;
HACCEL hAccelTable;
// Инициализация глобальных строк
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_MY, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// Выполнить инициализацию приложения:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY));
// Цикл основного сообщения:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
//
// ФУНКЦИЯ: MyRegisterClass()
//
// НАЗНАЧЕНИЕ: регистрирует класс окна.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MY);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassEx(&wcex);
}
//
// ФУНКЦИЯ: InitInstance(HINSTANCE, int)
//
// НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
//
// КОММЕНТАРИИ:
//
// В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
// создается и выводится на экран главное окно программы.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//
// ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// НАЗНАЧЕНИЕ: обрабатывает сообщения в главном окне.
//
// WM_COMMAND - обработка меню приложения
// WM_PAINT -Закрасить главное окно
// WM_DESTROY - ввести сообщение о выходе и вернуться.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Разобрать выбор в меню:
switch (wmId)
{
case ID_ZADAN:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ZADAN), hWnd, Zadan);
break;
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: добавьте любой код отрисовки...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// Обработчик сообщений для окна "О программе".
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
//окно с заданием
INT_PTR CALLBACK Zadan(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_RESH:
DialogBox(hInst, MAKEINTRESOURCE(IDD_INTEGRAL), hDlg, integral);
break;
case IDOK:
case IDCANCEL:
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
//окно с реешением интеграла
INT_PTR CALLBACK integral(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
TCHAR str[10];
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_ZNACH:
x1 = 0; x2 = 0.1; x3 = 0.2; x4 = 0.3; x5 = 0.4;
fx1 = 1.758203; fx2 = 1.738744; fx3 = 1.718369; fx4 = 1.697320; fx5 = 1.675834;
swprintf(str, TEXT("%.5g"), x1); SetDlgItemText(hDlg, IDC_X1, str);
swprintf(str, TEXT("%.5g"), x2); SetDlgItemText(hDlg, IDC_X2, str);
swprintf(str, TEXT("%.5g"), x3); SetDlgItemText(hDlg, IDC_X3, str);
swprintf(str, TEXT("%.5g"), x4); SetDlgItemText(hDlg, IDC_X4, str);
swprintf(str, TEXT("%.5g"), x5); SetDlgItemText(hDlg, IDC_X5, str);
swprintf(str, TEXT("%.5g"), fx1); SetDlgItemText(hDlg, IDC_FX1, str);
swprintf(str, TEXT("%.5g"), fx2); SetDlgItemText(hDlg, IDC_FX2, str);
swprintf(str, TEXT("%.5g"), fx3); SetDlgItemText(hDlg, IDC_FX3, str);
swprintf(str, TEXT("%.5g"), fx4); SetDlgItemText(hDlg, IDC_FX4, str);
swprintf(str, TEXT("%.5g"), fx5); SetDlgItemText(hDlg, IDC_FX5, str);
break;
case IDC_INTEGRAL:
GetDlgItemText(hDlg, IDC_E, str, 10); E = _wtof(str);
GetDlgItemText(hDlg, IDC_X1, str, 10); x1 = _wtof(str);
GetDlgItemText(hDlg, IDC_X2, str, 10); x2 = _wtof(str);
GetDlgItemText(hDlg, IDC_X3, str, 10); x3 = _wtof(str);
GetDlgItemText(hDlg, IDC_X4, str, 10); x4 = _wtof(str);
GetDlgItemText(hDlg, IDC_X5, str, 10); x5 = _wtof(str);
GetDlgItemText(hDlg, IDC_FX1, str, 10); fx1 = _wtof(str);
GetDlgItemText(hDlg, IDC_FX2, str, 10); fx2 = _wtof(str);
GetDlgItemText(hDlg, IDC_FX3, str, 10); fx3 = _wtof(str);
GetDlgItemText(hDlg, IDC_FX4, str, 10); fx4 = _wtof(str);
GetDlgItemText(hDlg, IDC_FX5, str, 10); fx5 = _wtof(str);
if (E > 0 && E < 1)
{
simpson(hDlg, E, x1, x2, x3, x4, x5, fx1, fx2, fx3, fx4, fx5);
}
else
MessageBox(hDlg, TEXT("Ошибка ввода точности!"), TEXT("ERROR"), MB_OK);
break;
case IDC_SLED:
DialogBox(hInst, MAKEINTRESOURCE(IDD_MIN), hDlg, minimum);
break;
}
break;
}
return (INT_PTR)FALSE;
}
INT_PTR CALLBACK minimum(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
double k;
TCHAR str[10];
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_GRAF:
DialogBox(hInst, MAKEINTRESOURCE(IDD_GRAF), hDlg, Graf);
break;
case IDC_ZNACH:
c = 0; d = 1;
swprintf(str, TEXT("%.5g"), c); SetDlgItemText(hDlg, IDC_C, str);
swprintf(str, TEXT("%.5g"), d); SetDlgItemText(hDlg, IDC_D, str);
break;
case IDC_MIN:
GetDlgItemText(hDlg, IDC_C, str, 10); c = _wtof(str);
GetDlgItemText(hDlg, IDC_D, str, 10); d = _wtof(str);
k = simpson(0, E, x1, x2, x3, x4, x5, fx1, fx2, fx3, fx4, fx5);
dihotom(hDlg, E, k, c, d);
break;
case IDOK:
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
//обработка диалогового окна с графиком
INT_PTR CALLBACK Graf(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
//обработка диалогового окна с пром. рез. оптимизации
INT_PTR CALLBACK promrez(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
static HWND hListBox;
static LOGFONT lf;
HFONT hFont1;
switch (message)
{
case WM_INITDIALOG:
hListBox = GetDlgItem(hDlg, IDC_LIST1);
lf.lfHeight = 16;
lstrcpy((LPWSTR)&lf.lfFaceName, TEXT("Courier"));
hFont1 = CreateFontIndirect(&lf);
SendMessage(hListBox, WM_SETFONT, (WPARAM)hFont1, TRUE);
SendMessage(hListBox, LB_RESETCONTENT, 0, 0);
if (E > 0 && E < 1)
dihotom(hDlg, hListBox, E, k, c, d);
return (INT_PTR)TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}