【請問以下這段程式的用意??】 |
答題得分者是:st33chen
|
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
function TforallForm.getpara(k:integer):string;
var i,j,l:integer; s2:string; begin s2:=parameters.text; for i:=1 to k-1 do begin j:=pos(',',s2); if j=0 then begin errfound:=true;result:='';exit; end else begin l:=length(s2);s2:=copy(s2,j 1,l-j); end; end; j:=pos(',',s2);if j=0 then result:=s2 else result:=copy(s2,1,j-1); end; 謝謝各位了 |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
===================引 用 andyto202 文 章=================== function TforallForm.getpara(k:integer):string; // 取得第k個參數 var i,j,l:integer; s2:string; begin s2:=parameters.text; for i:=1 to k-1 do begin // 讀掉前 k-1 個參數 j:=pos(',',s2); if j=0 then begin errfound:=true;result:='';exit; end else begin l:=length(s2);s2:=copy(s2,j 1,l-j); end; end; // 讀掉前 k-1 個參數結束 j:=pos(',',s2);if j=0 then result:=s2 else result:=copy(s2,1,j-1); //傳回第k個參數 end; 謝謝各位了 參考一下 不過請您注意一下, delphi 計數有的是從 0 開始的.
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
===================引 用 st33chen 文 章=================== ===================引 用 andyto202 文 章=================== function TforallForm.getpara(k:integer):string; // 取得第k個參數 var i,j,l:integer; s2:string; begin s2:=parameters.text; for i:=1 to k-1 do begin // 讀掉前 k-1 個參數 j:=pos(',',s2); if j=0 then begin errfound:=true;result:='';exit; end else begin l:=length(s2);s2:=copy(s2,j 1,l-j); end; end; // 讀掉前 k-1 個參數結束 j:=pos(',',s2);if j=0 then result:=s2 else result:=copy(s2,1,j-1); //傳回第k個參數 end; 謝謝各位了 參考一下 不過請您注意一下, delphi 計數有的是從 0 開始的. 謝謝您 我舉例一下 s2:=a,ab,abc,abcd 此時的 i=1( i 雖然被設成變數,感覺它恆等於1) j=1=>2=>3=>0( 因為第4次時剩abcd,已經沒有『,』可以抓了) l=1=>2=>3=>4 這樣子觀念正確嗎 還有此範例的k是多少呢?? 還有 請問您 什麼時候要用到 function呢 程式中的 function TforallForm.getpara(k:integer):string; function中有TforallForm.getpara嗎?
編輯記錄
andyto202 重新編輯於 2008-11-09 12:06:31, 註解 無‧
|
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
我剛剛又研究了一下
發現好像是 s2:=a,ab,abc,abcd for i=1 to k-1 j=2 l=13 s2=copy(a,ab,abc,abcd,3,11) 所以此時的s2變成了ab,abc,abcd 再來 for i=1 to k-1 j=3 l=11 s2=copy(ab,abc,abcd,4,8) 所以此時的s2變成了abc,abcd 再來 for i=1 to k-1 j=4 l=8 s2=copy(abc,abcd,5,4) 所以此時的s2變成了abcd 再來 for i=1 to k-1 j=0(因為沒有「,」) 我現在不了解的是 這段程式碼中 分為那段 一段是 for i:=1 to k-4 一段是 if j=0 then begin 請問第一段是不是 只有不符合 i=1 to k-1就會跳出去了(那請問什麼時候才會符合)?? 最後一行 j:=pos(',',s2);是不是假設s2本來就只有一項 例如 allen(後面並無其它字串了) 此時 中間的兩個迴圈都不會被執行 就直接執行最後那一行 抱歉 我是初學者 問的問題難免怪又長 請大家包含並給小弟指教 再次謝謝大家 |
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
我測了一下,其實這個Function的目的很簡單
s2:=a,ab,abc,abcd getpara(1) --> a getpara(2) --> ab getpara(3) --> abc getpara(4) --> abcd getpara(5) --> // 沒有值了 那您知道k怎麼用了吧! 建議您,以自己的方式,多寫幾個類似的Function就會功力大進了。 ===================引 用 andyto202 文 章=================== 我舉例一下 s2:=a,ab,abc,abcd 此時的 i=1( i 雖然被設成變數,感覺它恆等於1) j=1=>2=>3=>0( 因為第4次時剩abcd,已經沒有『,』可以抓了) l=1=>2=>3=>4 這樣子觀念正確嗎 還有此範例的k是多少呢?? 還有 請問您 什麼時候要用到 function呢 程式中的 function TforallForm.getpara(k:integer):string; function中有TforallForm.getpara嗎?
------
努力會更接近成功 |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
1. 當我看到您寫 i=1( i 雖然被設成變數,感覺它恆等於1) 我判斷您好像不知道 for 的用途, for 幾乎所有程式語言都有(但語法稍有不同 例 for i := 1 to k), 代表以下這一段(begin 到 end) 程式 要執行 k 次, 計數變數 i 從1執行到 k, 每執行完一次 計數變數值加 1 ( 這加 1 的動作是內建的, 不可寫明在程式碼中, 否則結果會不對, 有的規定比較嚴的語言甚至會 compile 不過). 所以, i 的值會變, 不是 恆等於1. 2. 當我看到您寫 function中有TforallForm.getpara嗎? 我判斷您好像不知道 function 的用途, function 可分為兩類, 一是程式語言內建的 ( built-in functions, 例如 delphi 中的 strtoint ), 使用時直接用就好, 不可以重新定義. 一是使用者自訂的 (user-defined functions, 就像您的 TforallForm.getpara ), 使用時要先定義, 就像您程式碼所寫的就是在定義一個 function, (就因為您就在定義一個 function 郤還問 function中有TforallForm.getpara嗎? , 所以我才判斷您好像不知道 function 的用途) 至於何時用到 function, 那是看需要, 例如, 您定義一個求 階乘 的 function( 例如 fact(n) ), 當您要算大樂透的中獎率時您會用到階乘, 這時就可以在程式的適當地方寫 anum := fact(n); 有興趣的話可以建議您真的寫一個 求階乘 的函式, 應該會用到 for 及 function, 您應該會更了解. 很抱歉寫了這麼多, 如果我上述二個判斷是錯的, 就當我廢話一篇. 您問題的 function, 用途是在找出並回傳第 n-1 個逗號 和 第 n 個逗號之間的子字串.
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
pceyes兄
所以k值就是getpara的值是吧 所以這題的k值 分別是 1=>2=>3=>4=>5(第5次雖然沒有取到值,但沒還是有k值,代表它有去抓取第5次,不然要麼會知道抓不到值,對吧) 但是因為第5次沒有值了 所以這題就是算 for i:=1 to k-1(算4次,代表迴圈4次) 再請問您一下 是不是我寫個 memo1.lines.add(inttostr(k)) 就可以看出k的變化了 但是我寫完後 如下所示 無法執行耶 ******************************************************************************************************* unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) parameters: TEdit; Memo1: TMemo; procedure Memo1Change(Sender: TObject); private { Private declarations } function getpara(k:integer):string; public { Public declarations } end; var Form1: TForm1; errfound:boolean; implementation {$R *.DFM} function TforallForm.getpara(k:integer):string; var i,j,l:integer; s2:string; begin s2:=parameters.text; for i:=1 to k-1 do begin j:=pos(',',s2); if j=0 then begin errfound:=true;result:='';exit; end else begin l:=length(s2);s2:=copy(s2,j 1,l-j); end; end; j:=pos(',',s2);if j=0 then result:=s2 else result:=copy(s2,1,j-1); end; procedure TForm1.Memo1Change(Sender: TObject); begin memo1.Lines.add(inttostr(k)); end; end. ******************************************************************************************************* 它顯示 [Error] Unit1.pas(28): Function needs result type [Error] Unit1.pas(32): Undeclared identifier: 'parameters' [Error] Unit1.pas(32): Missing operator or semicolon [Error] Unit1.pas(33): Missing operator or semicolon [Error] Unit1.pas(33): Undeclared identifier: 'k' [Error] Unit1.pas(46): Undeclared identifier: 'k' [Hint] Unit1.pas(17): Private symbol 'getpara' declared but never used [Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit1.pas' |
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
===================引 用 st33chen 文 章=================== 您好, 1. 當我看到您寫 i=1( i 雖然被設成變數,感覺它恆等於1) 我判斷您好像不知道 for 的用途, for 幾乎所有程式語言都有(但語法稍有不同 例 for i := 1 to k), 代表以下這一段(begin 到 end) 程式 要執行 k 次, 計數變數 i 從1執行到 k, 每執行完一次 計數變數值加 1 ( 這加 1 的動作是內建的, 不可寫明在程式碼中, 否則結果會不對, 有的規定比較嚴的語言甚至會 compile 不過). 所以, i 的值會變, 不是 恆等於1. 2. 當我看到您寫 function中有TforallForm.getpara嗎? 我判斷您好像不知道 function 的用途, function 可分為兩類, 一是程式語言內建的 ( built-in functions, 例如 delphi 中的 strtoint ), 使用時直接用就好, 不可以重新定義. 一是使用者自訂的 (user-defined functions, 就像您的 TforallForm.getpara ), 使用時要先定義, 就像您程式碼所寫的就是在定義一個 function, (就因為您就在定義一個 function 郤還問 function中有TforallForm.getpara嗎? , 所以我才判斷您好像不知道 function 的用途) 至於何時用到 function, 那是看需要, 例如, 您定義一個求 階乘 的 function( 例如 fact(n) ), 當您要算大樂透的中獎率時您會用到階乘, 這時就可以在程式的適當地方寫 anum := fact(n); 有興趣的話可以建議您真的寫一個 求階乘 的函式, 應該會用到 for 及 function, 您應該會更了解. 很抱歉寫了這麼多, 如果我上述二個判斷是錯的, 就當我廢話一篇. 您問題的 function, 用途是在找出並回傳第 n-1 個逗號 和 第 n 個逗號之間的子字串. 您說的很對喔 是我觀念不正確 似懂非懂 謝謝您的指導 又讓我了解不少說 真的感謝您耶 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |