程式設計設計簡單的計算器程式,程式設計設計一個簡單的計算器程式

時間 2021-06-28 17:27:16

1樓:匿名使用者

這種運算比較麻煩,不過4種運算子號優先順序相同應該簡單寫,我這裡有個演算法,能進行簡單的四則運算,delphi的,供參考

function math_evaluate(s0:string):extended;

function evaluate(s0:string):extended;forward;

procedure cleanup(var s0:string);

vari:integer;

begin

s0:=lowercase(s0);

i:=pos(' ',s0);

while i>0 do

begin

delete(s0,i,1);

i:=pos(' ',s0);

end;

end;

function getfirstopp(tot:integer;s0:string):integer;

const

sopps:string=('+-*/^');

vari:integer;

begin

if tot=0 then tot:=length(s0);

for i:=1 to 5 do

begin

result:=pos(sopps[i],s0);

if ((i<3) and (result>0)) then

if ((result=1) or (pos(s0[result-1],sopps)>0)) then

result:=0;

if result>0 then

if resultexit;

end;

if result>tot then

result:=0;

end;

function specialf(p1:integer;s0:string):extended;

varoperstr:string;

arg:extended;

begin

result:=0;

operstr:=copy(s0,1,p1-1);

if s0[length(s0)]<>')' then

exit;

operstr:=lowercase(operstr);

arg:=evaluate(copy(s0,p1+1,length(s0)-p1-1));

if operstr ='sin' then

result:=sin(arg)

else if operstr ='cos' then

result:=cos(arg)

else if operstr ='tan' then

result:=sin(arg)/cos(arg)

else if operstr ='arctan' then

result:=arctan(arg)

else if operstr ='log' then

result:=ln(arg)/ln(10)

else if operstr ='ln' then

result:=ln(arg)

else if operstr ='exp' then

result:=exp(arg)

else if operstr ='sqrt' then

result:=sqrt(arg)

else exit;

end;

function getvalue(s0:string):extended;

begin

result:=0;

if length(s0)<1 then exit;

if length(s0)=1 then

result:=strtofloat(s0)

else

case s0[1] of

'x':result:=1;

'y':result:=1;

'z':result:=1;

else result:=strtofloat(s0);

end;

end;

procedure matchbracket(var i:integer;s0:string);

varj,len:integer;

begin

j:=1;

len:=length(s0);

repeat inc(i);

if i>len then exit;

if s0[i]='(' then inc(j);

if s0[i]=')' then dec(j);

if j<0 then exit;

until j=0;

end;

function calculate(p1:integer;s0:string):extended;

varv1,v2:extended;

begin

result:=0;

v1:=evaluate(copy(s0,1,p1-1));

v2:=evaluate(copy(s0,p1+1,length(s0)-p1));

case s0[p1] of

'+': result:=v1+v2;

'-': result:=v1-v2;

'/': result:=v1/v2;

'*': result:=v1*v2;

'^': result:=exp(v2*ln(v1));

else exit;

end;

end;

function evaluate(s0:string):extended;

varp1,p2,q1:integer;

begin

p1:=pos('(',s0);

p2:=p1;

if p2>0 then

matchbracket(p2,s0);

if p1=1 then

begin

if p2=length(s0) then

begin

delete(s0,p2,1);

delete(s0,1,1);

result:=evaluate(s0);

end else

result:=calculate(p2+1,s0);

exit;

end;

q1:=getfirstopp(p1,s0);

if (p1+q1=0) then

begin

result:=getvalue(s0);

exit;

end;

if q1<>0 then

result:=calculate(q1,s0)

else if length(s0)>p2 then

result:=calculate(p2+1,s0)

else

result:=specialf(p1,s0);

end;

begin

trycleanup(s0);

result:=evaluate(s0);

except

result:=0;

end;

end;

2樓:匿名使用者

#include

#include

#include

#include

#define maxqsize 80

float qlist[maxqsize],qlist1[maxqsize],qlist2[maxqsize]; //定義三個全域性佇列

int front=0,rear=0,front1=0,front2=0,rear1=0,rear2=0,count=0,count1=0,count2=0;//定義三個佇列頭結點、尾結點、資料個數

main()

count++;

qlist[rear]=*c;

rear=(rear+1)%maxqsize;

break;}

case '-':

count++;

qlist[rear]=*c;

rear=(rear+1)%maxqsize;

break;}

case '=':

pop(); //顯示結果

break;

case 'c':

clearstack();

break;

case 'q':

clearstack();

exit(1);

default:

enter(atof(c));

break;}}

return 0;

}void enter(float num) //將資料入第二個佇列

count1++;

qlist1[rear1]=num;

rear1=(rear1+1)%maxqsize;

}void clearstack() //將三個佇列清空

void pop() //顯示結果

if(count!=0 && temp=='s')

sum=sqrt(qlist2[front2]);

if(count!=0 && temp=='n')

sum=sin(qlist2[front2]);

if(count!=0 && temp=='o')

sum=cos(qlist2[front2]);

printf("%f",sum);

}float qfront(float num1,float num2,char *temp)

else

break;

case '-':

if(count2==0)

else

break;

case '*':

if(count2==0) //如果第三個佇列中沒有資料,則從第二個佇列中讀出一個資料

else //否則,從第三個佇列中讀出資料

break;

case '/':

if(count2==0)

else

}else

else

}break;

case 's':

if(count2==0)

else

break;

case 'n':

if(count2==0)

else

break;

case 'o':

if(count2==0)

else

break;

}return number;

}float qfront1() //從第一個資料讀資料

temp=qlist1[front1];

count1--;

front1=(front1+1)%maxqsize;

return temp;

}void qinsert(float number) //將結果存入第三個佇列

count2++;

qlist2[rear2]=number;

rear2=(rear2+1)%maxqsize;

}其實這個程式用連結串列實現更好,但是由於時間關係,所以用了陣列。當然,這個程式還不是很完善,還有很多地方需要改進,比如可以用圖形介面來進行操作、可以將三個佇列放入一個結構體中等。

vb程式設計設計題 紅綠燈,VB程式設計設計題 紅綠燈

如圖在窗體上新增 1 四個shape控制元件,作為燈框 紅燈 黃燈 綠燈,分別命名為 lampbox redlamp yellowlamp greenlamp 2 一個命令按鈕,命名為 cmdrun,標題為 啟動 3 三個文字框控制元件,來設定紅燈 黃燈 綠燈亮的時間 秒 分別命名為 txtredt...

c 程式設計,設計最多可存放10整數的類,要求將資料從小到大排列存放在類中的陣列中

巨潤利 include include using namespace std class myint void del int n void inst int n int i 0 while n num i i cnt i for int j cnt j i j num i n cnt int g...

C 物件導向程式設計設計電視機類要求1) 電

這個很簡單的啊。h檔案 class ctv cpp檔案 int ctv m inum 0 ctv ctv string strtype m strtype strtype int ctv getnum conststring ctv gettvtype const main測試程式 int main...