题目:
某光学仪器厂生产一种系列透镜,这种透镜系列包括凸透镜、凹透镜及平面透镜。该厂检验科采用的检验方法是:通过该透镜的体积、密度,算出质量,再用天平称量透镜的实际质量,根据质量差评估该透镜是否合格。因此需要设计一个小软件工具,来计算透镜质量。
可测量的数据包括:镜柱的高H、镜柱的半径R、凸透球缺或凹透球缺的球半径r以及透镜的密度ρ,而球却的底面半径等于镜柱的半径。
void CCheckLensDlg::OnBUTTON1Count()
{
// TODO: Add your control notification handler code here
char c_BallRadius[255], c_CylinderRadius[255], c_CylinderHeight[255], c_LensDensity[255], c_Result[255];
double BallRadius=0, CylinderRadius=0, CylinderHeight=0, LensDensity=0,Result=0;
double BallRadius1=0, CylinderRadius1=0, CylinderHeight1=0, LensDensity1=0,Result1=0;
m_BallRadius.GetWindowText(c_BallRadius,10)/10;
m_CylinderRadius.GetWindowText(c_CylinderRadius,10)/10;
m_CylinderHeight.GetWindowText(c_CylinderHeight,10)/10;
m_LensDensity.GetWindowText(c_LensDensity,10);
BallRadius = atof((LPCTSTR)c_BallRadius);
CylinderRadius = atof((LPCTSTR)c_CylinderRadius);
CylinderHeight = atof((LPCTSTR)c_CylinderHeight);
LensDensity = atof((LPCTSTR)c_LensDensity);
const double PI=3.14;
//计算球冠的高度
double BallHeight = 0;
BallHeight = BallRadius - sqrt(BallRadius * BallRadius - CylinderRadius * CylinderRadius);
//计算圆柱的质量
double CylinderMassTemp = 0;
CylinderMassTemp = PI * CylinderRadius * CylinderRadius * CylinderHeight * LensDensity;
//计算球冠的质量
double BallMassTemp = 0;
BallMassTemp = PI / 3 * (3*BallRadius - BallHeight) * BallHeight * BallHeight * LensDensity;
switch(m_Control)
{
case 0:
if(BallRadius !=0 )
{
if(MessageBox("数据不合法,球冠半径r应为0,请重新输入!","消息提示",MB_ICONWARNING|MB_OK)==IDOK)
OnBUTTON2Clean();
}
else
Result = CylinderMassTemp;
break;
case 1:
if(BallRadius < CylinderRadius)
{
if(MessageBox("球冠半径r < R圆柱体半径,请重新输入!","消息提示",MB_ICONWARNING|MB_OK)==IDOK)
OnBUTTON2Clean();
}
else
Result = CylinderMassTemp + BallMassTemp;
break;
case 2:
if(BallRadius < CylinderRadius)
{
if(MessageBox("球冠半径r < R圆柱体半径,请重新输入!","消息提示",MB_ICONWARNING|MB_OK)==IDOK)
OnBUTTON2Clean();
}
else
Result = CylinderMassTemp - BallMassTemp;
break;
case 3:
if(BallRadius < CylinderRadius)
{
if(MessageBox("球冠半径r < R圆柱体半径,请重新输入!","消息提示",MB_ICONWARNING|MB_OK)==IDOK)
OnBUTTON2Clean();
}
else
Result = CylinderMassTemp + 2*BallMassTemp;
break;
case 4:
if(BallRadius < CylinderRadius)
{
if(MessageBox("球冠半径r < R圆柱体半径,请重新输入!","消息提示",MB_ICONWARNING|MB_OK)==IDOK)
OnBUTTON2Clean();
}
else
Result = CylinderMassTemp - 2*BallMassTemp;
break;
case 5:
if(BallRadius < CylinderRadius)
{
if(MessageBox("球冠半径r < R圆柱体半径,请重新输入!","消息提示",MB_ICONWARNING|MB_OK)==IDOK)
OnBUTTON2Clean();
}
else
Result = CylinderMassTemp;
break;
}
_gcvt(Result,20,c_Result);
m_Result=(LPCTSTR)c_Result;
UpdateData(FALSE);
}
转载于:https://blog.51cto.com/fjwind/1204414