Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа.docx
Скачиваний:
77
Добавлен:
13.10.2016
Размер:
473.62 Кб
Скачать

Файл оптимизация.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;

}