資源簡(jiǎn)介
基于MFC編寫一個(gè)單文檔程序,在客戶區(qū)用圖形來(lái)展現(xiàn)各種數(shù)學(xué)函數(shù)曲線。
具體要求:
1)可繪制常見(jiàn)的數(shù)學(xué)函數(shù)曲線,如三角函數(shù)、指數(shù)函數(shù)、冪函數(shù)等。
2)通過(guò)菜單選擇不同的函數(shù)曲線類型,可以通過(guò)對(duì)話框指定該函數(shù)的參數(shù),如Xa中的冪a的具體設(shè)置,sin(ax+b)中的參數(shù)a、b的設(shè)置。
3)繪制數(shù)學(xué)曲線時(shí)應(yīng)包括坐標(biāo)軸和刻度以及相應(yīng)的數(shù)字(字符),數(shù)學(xué)函數(shù)公式;
4)可以在一個(gè)坐標(biāo)系中繪制多條數(shù)學(xué)曲線;
5)可以選擇不同顏色來(lái)繪制不同的曲線。
6)當(dāng)鼠標(biāo)移動(dòng)到曲線上某點(diǎn)時(shí),可以顯示該點(diǎn)的坐標(biāo)。
7)可以進(jìn)行圖形的縮放。
代碼片段和文件信息
#include?“pch.h“
#include?“CalculatorFunc.h“
#define?MAXNUM?30
#define?MAXOPT?30
const?double?pi?=?3.1415926535898;
const?double?e?=?2.718281828459;
bool?IsOpt(char?c)?{
return??c?==?‘+‘?||?c?==?‘-‘?||?c?==?‘*‘?||?c?==?‘/‘?||?c?==?‘^‘;
}
bool?IsNum(char?c)?{
return?c?>=?‘0‘?&&?c?<=?‘9‘?||?c?==?‘e‘??||?c?==?‘p‘;
}
double?GetNum(CString&?Eq?int&?i?char?xKey?double?xVal)
{
int?flag?=?1;
if?(i? flag?=?-1;
i++;
}
if?(i? i++;
return?flag?*?pi;
?}
???
if?(i? i++;
return?flag?*?e;
}
//cout< if?(i? i++;
return?flag?*?xVal;
}
double?x?=?0;
while?(i? {
x?=?x?*?10?+?Eq[i]?-?‘0‘;
i++;
}
double?rad?=?0.1;
if?(i? {
i++;
while?(i? {
x?=?x?+?(Eq[i]?-?‘0‘)?*?rad;
rad?=?rad?*?0.1;
i++;
}
}
return?flag?*?x;
}
double?Get_Equation_Num(CString&?Eq?int&?i?bool&?succ?char?xKey?double?xVal)?{
if?(IsNum(Eq[i])?||?Eq[i]?==?‘-‘?||?Eq[i]?==?xKey)
return?GetNum(Eq?i?xKey?xVal);//如果是數(shù)直接讀
CString?single_func;//記錄單目運(yùn)算符
succ?=?false;
double?tmp_ans?=?0;//記錄子式的值
int?Lcnt?=?0;//判斷括號(hào)套括號(hào),如sqrt(1+(1-1))
while?(i? if?(Eq[i]?==?‘(‘)?{//左括號(hào),單目運(yùn)算符已經(jīng)記錄完,接下來(lái)是子式
i++;
CString?tmpEq;//記錄子式
while?(i? if?(Eq[i]?==?‘(‘)?Lcnt++;
if?(Eq[i]?==?‘)‘)?{
if?(Lcnt)
Lcnt--;
else?{//找到與第一個(gè)左括號(hào)匹配的右括號(hào)了
succ?=?true;//遞歸計(jì)算括號(hào)內(nèi)子式的值
tmp_ans?=?CalcEquation(tmpEq?succ?xKey?xVal);
i++;
break;
}
}
tmpEq?+=?Eq[i];
i++;
}
break;
}
single_func?+=?Eq[i];
i++;
}
if?(succ)?{
if?(single_func?==?_T(““))
return?tmp_ans;
if?(single_func?==?_T(“sin“))?
return?sin(tmp_ans);
if?(single_func?==?_T(“cos“))
return?cos(tmp_ans);
if?(single_func?==?_T(“tan“))
return?tan(tmp_ans);
if?(single_func?==?_T(“abs“))
return?abs(tmp_ans);
if?(single_func?==?_T(“floor“))
return?floor(tmp_ans);
if?(single_func?==?_T(“ceil“))
return?ceil(tmp_ans);
if?(single_func?==?_T(“round“))
return?round(tmp_ans);
if?(single_func?==?_T(“sqrt“))
return?sqrt(tmp_ans);
if?(single_func?==?_T(“l(fā)n“))
return?log(tmp_ans);
if?(single_func?==?_T(“l(fā)g“))
return?log10(tmp_ans);
succ?=?false;
return?0;
}
}
double?Calc(double?num1?char?opt?double?num2)
{
//cout?<“calc?“?< switch?(opt)
{
case?‘+‘:?return?num1?+?num2;
case?‘-‘:?return?num1?-?num2;
case?‘*‘:?return?num1?*?num2;
case?‘/‘:?return?num1?/?num2;
case?‘^‘:?return?pow(num1?num2);
}
}
int?cPriority(char?c)?{
if?(c?==?‘^‘)?return?3;
if?(c?==?‘*‘?||?c?==?‘/‘)?return?2;
return?1;
}
double?CalcEquation(CString?
- 上一篇:北京地鐵最短路徑.rar
- 下一篇:圖片版QT黑白棋
評(píng)論
共有 條評(píng)論