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

【請問以下這段程式的用意??】

答題得分者是:st33chen
andyto202
一般會員


發表:10
回覆:29
積分:7
註冊:2006-12-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-09 10:14:27 IP:60.250.xxx.xxx 訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-09 11:13:26 IP:122.116.xxx.xxx 未訂閱

===================引 用 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-09 12:03:14 IP:60.250.xxx.xxx 訂閱

===================引 用 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-09 14:25:30 IP:60.250.xxx.xxx 訂閱
我剛剛又研究了一下
發現好像是
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-10 06:56:35 IP:220.141.xxx.xxx 訂閱
我測了一下,其實這個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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-11-10 09:15:29 IP:122.116.xxx.xxx 未訂閱
您好,

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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-11-10 09:58:17 IP:122.116.xxx.xxx 訂閱
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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-11-10 10:00:08 IP:122.116.xxx.xxx 訂閱

===================引 用 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 個逗號之間的子字串.

您說的很對喔
是我觀念不正確
似懂非懂
謝謝您的指導
又讓我了解不少說
真的感謝您耶



系統時間:2024-05-06 6:28:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!