請問可以幫我解析一下程式碼嗎@@ |
尚未結案
|
yingfan28
一般會員 發表:2 回覆:4 積分:1 註冊:2005-07-19 發送簡訊給我 |
這是小算盤的程式~全形的//是問題~~半形的//是註解
procedure TForm1.FormCreate(Sender: TObject);
begin
output.text:='0';
end;
end. procedure TForm1.btn8Click(Sender: TObject);//數字鍵8
begin
if ti=1 then
begin
output.clear;
ti:=0; //這裡為什麼要寫ti:=0呢?
end;
if output.text='0' then output.text:='8' //這行是什麼意思?
else
begin
if i>0 then
output.text:=output.text '8'
else
output.text:='8';
end;
i:=i 1;
eq:=1;//為什麼eq:=1?
end; procedure TForm1.BtnaddClick(Sender: TObject);//加
begin
if eq=1 then //判斷運算子( ,-,*,/是否被按到)
begin
if opcnt=' ' then output.text:=floattostr(number1 strtofloat(output.text));
if opcnt='-' then output.text:=floattostr(number1-strtofloat(output.text));
if opcnt='*' then output.text:=floattostr(number1*strtofloat(output.text));
if opcnt='/' then
begin
if output.text='0' then output.text:='無法除以零'
else
output.text:=floattostr(number1/strtofloat(output.text));
end;
end; number1:=strtofloat(output.text); //暫存數字
opcnt:=' ';
ti:=1;//為什麼ti:=1?
eq:=0;//為什麼eq:=0? end;
|
JustinShen
中階會員 發表:22 回覆:104 積分:80 註冊:2003-09-20 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
一、程式碼請縮排,請參考本站規定與程式碼張貼規則與方法
二、請為標題取一個有意義的名稱,例如:「請教簡易計算機程式碼的問題」
三、上述請自行修改,若未配合,三日後本帖依規定刪除 ABSee數位相機族群的專業網站,免費1G
網路相簿
http://absee.com.tw/law.asp?uRef=15360
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
代码有限,我将我的理解注释出来,仅供参考.
procedure TForm1.FormCreate(Sender: TObject);
begin
output.text := '0';
end;
end. procedure TForm1.btn8Click(Sender: TObject); //數字鍵8
begin
if ti = 1 then //如果前一个按键是运算子,则输入的是下一个运算数,如果是'/'则应该清空output中的被出除数,现在输入的是除数了.
begin
output.clear; //清除前一个运算数.
ti := 0;
end;
if output.text = '0' then output.text := '8' //如output的值为0,按下8后自然要换成8,而不应出现'08'.
else
begin
if i > 0 then
output.text := output.text '8'
else
output.text := '8';
end;
i := i 1;
//只有在按了数值键(这里是8),才允许处理运算子按键,这里置1表示,接下去如果按运算子将被处理.
//在"procedure TForm1.BtnaddClick(Sender: TObject); //加" 卡中可以看出.
eq := 1;
end; procedure TForm1.BtnaddClick(Sender: TObject); //加
begin
if eq = 1 then //判斷運算子( ,-,*,/是否被按到)
begin
if opcnt = ' ' then output.text := floattostr(number1 strtofloat(output.text));
if opcnt = '-' then output.text := floattostr(number1 - strtofloat(output.text));
if opcnt = '*' then output.text := floattostr(number1 * strtofloat(output.text));
if opcnt = '/' then
begin
if output.text = '0' then output.text := '無法除以零'
else
output.text := floattostr(number1 / strtofloat(output.text));
end;
end; number1 := strtofloat(output.text); //暫存數字
opcnt := ' ';
ti := 1; //标识已输入运算子
eq := 0; //已处理完运算符,接下去应按数值键了,如果再按运算符不处理. end;
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
好,重贴我的解答.
procedure TForm1.FormCreate(Sender: TObject); begin output.text := '0'; end; end. procedure TForm1.btn8Click(Sender: TObject); //數字鍵8 begin if ti = 1 then //如果前一个按键是运算子,则输入的是下一个运算数,如果是'/'则应该清空output中的被出除数,现在输入的是除数了. begin output.clear; //清除前一个运算数. ti := 0; end; if output.text = '0' then output.text := '8' //如output的值为0,按下8后自然要换成8,而不应出现'08'. else begin if i > 0 then output.text := output.text '8' else output.text := '8'; end; i := i 1; //只有在按了数值键(这里是8),才允许处理运算子按键,这里置1表示,接下去如果按运算子将被处理. //在"procedure TForm1.BtnaddClick(Sender: TObject); //加" 卡中可以看出. eq := 1; end; procedure TForm1.BtnaddClick(Sender: TObject); //加 begin if eq = 1 then //判斷運算子( ,-,*,/是否被按到) begin if opcnt = ' ' then output.text := floattostr(number1 strtofloat(output.text)); if opcnt = '-' then output.text := floattostr(number1 - strtofloat(output.text)); if opcnt = '*' then output.text := floattostr(number1 * strtofloat(output.text)); if opcnt = '/' then begin if output.text = '0' then output.text := '無法除以零' else output.text := floattostr(number1 / strtofloat(output.text)); end; end; number1 := strtofloat(output.text); //暫存數字 opcnt := ' '; ti := 1; //标识已输入运算子 eq := 0; //已处理完运算符,接下去应按数值键了,如果再按运算符不处理. end; |
yingfan28
一般會員 發表:2 回覆:4 積分:1 註冊:2005-07-19 發送簡訊給我 |
我想請問在加裡面的~
number1:=strtoint(output.text)
當我按下2 的時候,為什麼number1沒有把2存起來呢?
因為我那時候看,它是寫~number1的地方是0,output.text的地方是2~ procedure TForm1.Button2Click(Sender: TObject);等於
begin
if eq=1 then
begin
number2:=StrTofloat(output.text);
if opcnt=' ' then output.text:= FloatToStr(number1 number2);
if opcnt='-' then output.text:= FloatToStr(number1-number2);
if opcnt='*' then output.text:= FloatToStr(number1*number2);
if opcnt='/' then
begin
if number2=0 then output.text:='無法除以零'
else
output.text:= FloatToStr(number1/number2);
end
下面的大刮號我是要寫2 5=3 6,答案會是9(只加3 6)
可是加那行可以,可是減、乘除就不行了~
{else
number1:=0;
number2:=0;
number3:=strtofloat(output.text);
output.text:=floattostr(number2 number3);
//output.text:=floattostr(number2-number3);
//output.text:=floattostr(number2*number3);
//output.text:=floattostr(number2/number3); end;}
if output.text< '0' then
begin
showmessage('負數') ;
output.text:='0';
end;
ti:=1;
eq:=0;
end;
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
从我对原来代码的理解,应该是会保存的啊。
可以举个例子说明原代码的处理流程。如2 3-4=
处理步骤如下:
1)输入2,在控件output显示2
2)输入 ,此时2被暂存于number1,并且在变数opcnt 中记录 号,此时eq=0不处理‘判斷運算子’这个条件语句中的计算代码,并将ti置1,eq置0
。
3)输入3,因前面输入了 号,应将控件output中的2先清除(当ti=1时),显示3。并将eq置为1。
4)输入-,因eq为1,所以此时处理‘判斷運算子’这个条件语句中的计算代码。因opcnt 中记录了 号,所以执行2 3的运算。并将ti置1,eq置0,中间结果被保存在number1中。
5)接着输入4,处理与第3)步相同。
6)输入=,与第4)步处理相同,完成5-4的动作。
就原代码而言对“2 3-4=”的处理流程如上述,不知你能不能理解。想想WINDOWS的计算器的操作应该不难理解。
至于你加的代码,我没理解你的用意,建议你先弄懂原代码的意图在改,会事半功倍。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |