線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1436
推到 Plurk!
推到 Facebook!

請問可以幫我解析一下程式碼嗎@@

尚未結案
yingfan28
一般會員


發表:2
回覆:4
積分:1
註冊:2005-07-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-24 01:47:34 IP:218.172.xxx.xxx 未訂閱
這是小算盤的程式~全形的//是問題~~半形的//是註解 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-24 16:02:18 IP:61.155.xxx.xxx 未訂閱
我看是这样的: i作为当前输入数据的字符计数器; ti表示前面是否有作过+-*/运算,即当前显示框内是否为前面计算的结果; eq用来控制是否可以进行计算,即保证连续按运算符按钮无效; opcnt用来保存前面按下的运算符。    因为没有完整的程式,我用猜的
------
====================
我为一切作努力!
Justin Shen

ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-25 00:02:29 IP:61.62.xxx.xxx 未訂閱
一、程式碼請縮排,請參考本站規定程式碼張貼規則與方法 二、請為標題取一個有意義的名稱,例如:「請教簡易計算機程式碼的問題」 三、上述請自行修改,若未配合,三日後本帖依規定刪除 ABSee數位相機族群的專業網站,免費1G 網路相簿 http://absee.com.tw/law.asp?uRef=15360
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-27 11:54:08 IP:218.5.xxx.xxx 未訂閱
代码有限,我将我的理解注释出来,仅供参考. 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-27 13:03:35 IP:203.69.xxx.xxx 未訂閱
副站長說的話要聽啊....
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-27 13:35:08 IP:218.5.xxx.xxx 未訂閱
好,重贴我的解答.
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-27 13:51:17 IP:61.62.xxx.xxx 未訂閱
我想請問在加裡面的~ 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-07-27 14:57:03 IP:218.5.xxx.xxx 未訂閱
从我对原来代码的理解,应该是会保存的啊。 可以举个例子说明原代码的处理流程。如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的计算器的操作应该不难理解。 至于你加的代码,我没理解你的用意,建议你先弄懂原代码的意图在改,会事半功倍。
系統時間:2024-09-30 0:40:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!