📄 numericalanalysis.cpp
字号:
hwndEdit_y = CreateWindow(TEXT("EDIT"), NULL,
WS_CHILD | WS_VISIBLE | ES_LEFT | WS_BORDER| \
ES_WANTRETURN ,
0, 0, 0, 0, hWnd, (HMENU) IDC_EDIT_Y,
(HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
//创建编辑框,输入dre_y1的值
hwndEdit_der_y1 = CreateWindow(TEXT("EDIT"), NULL,
WS_CHILD | WS_VISIBLE | ES_LEFT | WS_BORDER| \
ES_WANTRETURN ,
0, 0, 0, 0, hWnd, (HMENU) IDC_EDIT_DER,
(HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
//创建编辑框,输入der_y2的值
hwndEdit_der_y2 = CreateWindow(TEXT("EDIT"), NULL,
WS_CHILD | WS_VISIBLE | ES_LEFT | WS_BORDER| \
ES_WANTRETURN ,
0, 0, 0, 0, hWnd, (HMENU) IDC_EDIT_DER,
(HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
//创建编辑框,输入der_y2的值
hwndEdit_weight = CreateWindow(TEXT("EDIT"), NULL,
WS_CHILD | WS_VISIBLE | ES_LEFT | WS_BORDER| \
ES_WANTRETURN ,
0, 0, 0, 0, hWnd, (HMENU) IDC_EDIT_DER,
(HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
//创建编辑框,输入所求f(x)的x的值
hwndEdit_var = CreateWindow(TEXT("EDIT"), NULL,
WS_CHILD | WS_VISIBLE | ES_LEFT | WS_BORDER| \
ES_WANTRETURN ,
0, 0, 0, 0, hWnd, (HMENU) IDC_EDIT_VAR,
(HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
//创建按钮"ADD"
hwndButton_add = CreateWindow( TEXT("BUTTON"), "Add",
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
10, 110, 60, 18, hWnd,
(HMENU)IDC_ADDBUTTON, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
//创建按钮"DEL"
hwndButton_del = CreateWindow( TEXT("BUTTON"), "Del",
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
80, 110, 60, 18, hWnd,
(HMENU)IDC_DELBUTTON, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
//创建清空按钮"Clear"
hwndButton_clear = CreateWindow( TEXT("BUTTON"), "Clear",
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
150, 110, 60, 18, hWnd,
(HMENU)IDC_CLEARBUTTON, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
//创建清空按钮"Calculate"
hwndButton_cal = CreateWindow( TEXT("BUTTON"), "Calculate",
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
480, 30, 90, 18, hWnd,
(HMENU)IDC_CAL, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
//创建按钮"+"
hwndButton_zoomin = CreateWindow( TEXT("BUTTON"), "+",
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
580, 30, 18, 18, hWnd,
(HMENU)IDC_ZOOMIN, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
//创建按钮"-"
hwndButton_zoomout = CreateWindow( TEXT("BUTTON"), "-",
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
600, 30, 18, 18, hWnd,
(HMENU)IDC_ZOOMOUT, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
//创建输出框
hwndOutput = CreateWindow(TEXT("LISTBOX"), NULL, WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL|
LBS_NOTIFY |WS_VSCROLL |WS_HSCROLL| WS_BORDER ,
0, 0, 0, 0,
hWnd,(HMENU)IDC_OUTPUT,
(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
EnableWindow(hwndEdit_der_y1,FALSE);
EnableWindow(hwndEdit_der_y2,FALSE);
EnableWindow(hwndEdit_weight,FALSE);
METHOD=LAGRANGE;
Initialize_data(-1);
break;
case WM_PAINT:
// 230,60,630,290
rect.top=60;
rect.left=230;
rect.bottom=290;
rect.right=630;
display(hWnd);
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
hMenu = GetMenu(hWnd);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
case IDM_LAGRANGE:
EnableWindow(hwndEdit_der_y1,FALSE);
EnableWindow(hwndEdit_der_y2,FALSE);
EnableWindow(hwndEdit_weight,FALSE);
wsprintf(THE_STATUS,"The Method: Lagrange ");
CheckMenuItem(hMenu,IDM_LAGRANGE,MF_CHECKED);
CheckMenuItem(hMenu,IDM_NEWTON,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_CUBLISPLINE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_LEASTSQUARE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_TRAPEZOID,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_SIMPSON,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_ROMBERG,MF_UNCHECKED);
SendMessage(hwndStatic5,WM_SETTEXT,10,(LPARAM)THE_STATUS);
METHOD=LAGRANGE;
break;
case IDM_NEWTON:
EnableWindow(hwndEdit_der_y1,FALSE);
EnableWindow(hwndEdit_der_y2,FALSE);
EnableWindow(hwndEdit_weight,FALSE);
wsprintf(THE_STATUS,"The Method: NEWTON ");
CheckMenuItem(hMenu,IDM_NEWTON,MF_CHECKED);
CheckMenuItem(hMenu,IDM_LAGRANGE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_CUBLISPLINE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_LEASTSQUARE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_TRAPEZOID,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_SIMPSON,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_ROMBERG,MF_UNCHECKED);
SendMessage(hwndStatic5,WM_SETTEXT,10,(LPARAM)THE_STATUS);
METHOD=NEWTON;
break;
case IDM_CUBLISPLINE:
EnableWindow(hwndEdit_der_y1,TRUE);
EnableWindow(hwndEdit_der_y2,TRUE);
EnableWindow(hwndEdit_weight,FALSE);
wsprintf(THE_STATUS,"The Method: Cubic Spline ");
CheckMenuItem(hMenu,IDM_CUBLISPLINE,MF_CHECKED);
CheckMenuItem(hMenu,IDM_LAGRANGE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_NEWTON,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_LEASTSQUARE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_TRAPEZOID,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_SIMPSON,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_ROMBERG,MF_UNCHECKED);
SendMessage(hwndStatic5,WM_SETTEXT,10,(LPARAM)THE_STATUS);
METHOD=CUBLISPLINE;
break;
case IDM_LEASTSQUARE:
EnableWindow(hwndEdit_der_y1,FALSE);
EnableWindow(hwndEdit_der_y2,FALSE);
EnableWindow(hwndEdit_weight,TRUE);
SendMessage(hwndList,LB_RESETCONTENT,0,0);
Initialize_data(-1);
wsprintf(THE_STATUS,"The Method: Method of least squares ");
CheckMenuItem(hMenu,IDM_LEASTSQUARE,MF_CHECKED);
CheckMenuItem(hMenu,IDM_LAGRANGE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_NEWTON,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_CUBLISPLINE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_TRAPEZOID,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_SIMPSON,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_ROMBERG,MF_UNCHECKED);
SendMessage(hwndStatic5,WM_SETTEXT,10,(LPARAM)THE_STATUS);
METHOD=LEASTSQUARE;
break;
case IDM_TRAPEZOID:
EnableWindow(hwndEdit_der_y1,FALSE);
EnableWindow(hwndEdit_der_y2,FALSE);
EnableWindow(hwndEdit_weight,FALSE);
wsprintf(THE_STATUS,"The Method: Complex Trapezoid ");
CheckMenuItem(hMenu,IDM_TRAPEZOID,MF_CHECKED);
CheckMenuItem(hMenu,IDM_NEWTON,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_CUBLISPLINE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_LEASTSQUARE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_LAGRANGE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_SIMPSON,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_ROMBERG,MF_UNCHECKED);
SendMessage(hwndStatic5,WM_SETTEXT,10,(LPARAM)THE_STATUS);
METHOD=TRAPEZOID;
break;
case IDM_SIMPSON:
EnableWindow(hwndEdit_der_y1,FALSE);
EnableWindow(hwndEdit_der_y2,FALSE);
EnableWindow(hwndEdit_weight,FALSE);
wsprintf(THE_STATUS,"The Method: Complex Simpson ");
CheckMenuItem(hMenu,IDM_SIMPSON,MF_CHECKED);
CheckMenuItem(hMenu,IDM_NEWTON,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_CUBLISPLINE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_LEASTSQUARE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_LAGRANGE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_TRAPEZOID,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_ROMBERG,MF_UNCHECKED);
SendMessage(hwndStatic5,WM_SETTEXT,10,(LPARAM)THE_STATUS);
METHOD=SIMPSON;
break;
case IDM_ROMBERG:
EnableWindow(hwndEdit_der_y1,FALSE);
EnableWindow(hwndEdit_der_y2,FALSE);
EnableWindow(hwndEdit_weight,FALSE);
wsprintf(THE_STATUS,"The Method: Romberg ");
CheckMenuItem(hMenu,IDM_ROMBERG,MF_CHECKED);
CheckMenuItem(hMenu,IDM_NEWTON,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_CUBLISPLINE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_LEASTSQUARE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_LAGRANGE,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_TRAPEZOID,MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_SIMPSON,MF_UNCHECKED);
SendMessage(hwndStatic5,WM_SETTEXT,10,(LPARAM)THE_STATUS);
METHOD=ROMBERG;
break;
case IDC_ADDBUTTON:
SendMessage(hwndEdit_x,WM_GETTEXT,10,(LPARAM)buffer_x);
SendMessage(hwndEdit_y,WM_GETTEXT,10,(LPARAM)buffer_y);
SendMessage(hwndEdit_weight,WM_GETTEXT,10,(LPARAM)temp);
if(check.checkstring(buffer_x)&&check.checkstring(buffer_y)&&check.checknum(DATA,LEN,atof(buffer_x)))
{
if(METHOD==LEASTSQUARE&&check.checkstring(temp))
{weight[LEN]=atof(temp);
DATA[LEN][0]=atof(buffer_x);
DATA[LEN++][1]=atof(buffer_y);
wsprintf(buffer,"%-10s %10s %10s",buffer_x,buffer_y,temp);
}
else
{
wsprintf(buffer,"%10s %10s",buffer_x,buffer_y);}
DATA[LEN][0]=atof(buffer_x);
DATA[LEN++][1]=atof(buffer_y);
SendMessage(hwndList,LB_ADDSTRING,0,(LPARAM)buffer);
}
break;
case IDC_DELBUTTON:
lbIndex=SendMessage(hwndList,LB_GETCURSEL,0,0);
Initialize_data(lbIndex);
SendMessage(hwndList,LB_DELETESTRING,lbIndex,0);
break;
case IDC_CLEARBUTTON:
SendMessage(hwndList,LB_RESETCONTENT,0,0);
Initialize_data(-1);
break;
case IDC_ZOOMIN:
if(x<1000)
{x=x*10;y=y*10;}
break;
case IDC_ZOOMOUT:
if(x>0.01)
{x=x/10;y=y/10;}
break;
case IDC_CAL:
SendMessage(hwndEdit_var,WM_GETTEXT,10,(LPARAM)buffer);
if(METHOD==LEASTSQUARE)
{SendMessage(hwndOutput,LB_RESETCONTENT,0,0);}
switch (METHOD)
{
case LAGRANGE:
if(check.checkstring(buffer))
{
var=atof(buffer);
var=cal.cal(DATA,var);
floattostring(var);
wsprintf(temp,"f(%s)=%s",buffer,str);
SendMessage(hwndOutput,LB_RESETCONTENT,0,0);
SendMessage(hwndOutput,LB_ADDSTRING,0,(LPARAM)temp);
var=-5*x;
for(i=0;i<100;i++)
{var=var+((double)i)*x/10;
DRAW_DATA[i][0]=var;
DRAW_DATA[i][1]=cal.cal(DATA,var);
}
}
break;
case NEWTON:
if(check.checkstring(buffer))
{var=atof(buffer);
cal2.cal(DATA,var);
var=cal2.display(data_quo);
SendMessage(hwndOutput,LB_RESETCONTENT,0,0);
floattostring(var);
wsprintf(temp,"f(%s)=%s",buffer,str);
SendMessage(hwndOutput,LB_ADDSTRING,0,(LPARAM)temp);
for(i=0;DATA[i][0]<999999;i++)
{
wsprintf(buffer," ");
for(j=0;DATA[j][0]<=999999&&data_quo[i][j]>-999999&&data_quo[i][j]<999999;j++)
{floattostring(data_quo[i][j]);
wsprintf(buffer,"%s%s ",buffer,str);}
SendMessage(hwndOutput,LB_ADDSTRING,0,(LPARAM)buffer);
}
var=-5*x;
for(i=0;i<100;i++)
{var=var+(double)i*x/10;
DRAW_DATA[i][0]=var;
cal2.cal(DATA,var);
DRAW_DATA[i][1]=cal2.display(data_quo);
}
}
break;
case CUBLISPLINE:
SendMessage(hwndOutput,LB_RESETCONTENT,0,0);
SendMessage(hwndEdit_der_y1,WM_GETTEXT,10,(LPARAM)buffer);
der_y1=atof(buffer);
SendMessage(hwndEdit_der_y2,WM_GETTEXT,10,(LPARAM)buffer);
der_y2=atof(buffer);
cal3.cal(DATA,der_y1,der_y2);
for(i=1;cal3.m[i]<999999&&cal3.m[i]>-999999;i++)
{floattostring(cal3.m[i]);
wsprintf(buffer,"m[%d] = %s",i,str);
SendMessage(hwndOutput,LB_ADDSTRING,0,(LPARAM)buffer);
}
break;
case LEASTSQUARE:
SendMessage(hwndOutput,LB_RESETCONTENT,0,0);
var=-5*x;
for(i=0;i<100;i++)
{var=var+(double)i*x/10;
DRAW_DATA[i][0]=var;
DRAW_DATA[i][1]=cal4.cal(DATA,weight,x,var);
}
break;
case TRAPEZOID:
SendMessage(hwndOutput,LB_RESETCONTENT,0,0);
cal5.cal(DATA);
floattostring(cal5.result);
wsprintf(buffer,"%s",str);
SendMessage(hwndOutput,LB_ADDSTRING,0,(LPARAM)buffer);
break;
case SIMPSON:
SendMessage(hwndOutput,LB_RESETCONTENT,0,0);
cal6.cal(DATA);
floattostring(cal6.result);
wsprintf(buffer,"%s",str);
SendMessage(hwndOutput,LB_ADDSTRING,0,(LPARAM)buffer);
break;
default:;
}
//DRAW_DATA[0][0]=DRAW_DATA[0][1]=DRAW_DATA[1][1]=DRAW_DATA[0][1]=2;
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
display(hWnd);
InvalidateRect(hWnd,&rect,TRUE);
break;
case WM_SIZE:
MoveWindow(hwndList, 0, 140, 220, 300, TRUE);
MoveWindow(hwndEdit_x, 60, 0, 90,20 , TRUE);
MoveWindow(hwndEdit_y, 60, 25, 90,20 , TRUE);
MoveWindow(hwndEdit_der_y1, 60, 50, 70,20 , TRUE);
MoveWindow(hwndEdit_der_y2, 140, 50, 70,20 , TRUE);
MoveWindow(hwndEdit_weight, 120, 80, 70,20 , TRUE);
MoveWindow(hwndEdit_var, 380, 30, 90,20 , TRUE);
MoveWindow(hwndOutput, 230, 300, 400,125 , TRUE);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -