全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1444
推到 Plurk!
推到 Facebook!

函式可以傳入1個數值再回傳3個數值嗎?

尚未結案
moko
一般會員


發表:31
回覆:34
積分:13
註冊:2002-09-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-18 11:52:38 IP:210.65.xxx.xxx 未訂閱
大家好!有個問題請教一下...
目前計算請假扣薪,由於請假時數很多種,把每種狀況都列出來太複雜,
所以想寫一個副程式,傳入一個數值(>//請一天
  >
     
        
delphiwww
資深會員


發表:145
回覆:363
積分:368
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-18 12:37:20 IP:202.145.xxx.xxx 未訂閱
可以用procedure or function,不過要用var procedure ret(vaction_time:string;var ss,ff,leav:real);
引言:
大家好!有個問題請教一下...
目前計算請假扣薪,由於請假時數很多種,把每種狀況都列出來太複雜,
所以想寫一個副程式,傳入一個數值(>//請一天
  >
     
< face="Verdana, Arial, Helvetica">     
        
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-18 14:33:03 IP:210.58.xxx.xxx 未訂閱
Hello moko 您好 try this :

function TForm1.GetNumber(InNumber: integer): Variant;
begin
   Result := VarArrayOf([InNumber 1, InNumber 2, InNumber 3]);
end;
//
//
//
//
procedure TForm1.Button1Click(Sender: TObject);
var d : variant;
begin
   d := GetNumber(100);
   ShowMessage(VarToStr(d[0]));
   ShowMessage(VarToStr(d[1]));
   ShowMessage(VarToStr(d[2]));
end;
我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2002/12/18 14:34:02
------


我不是高手, 高手是正在銀幕前微笑的人.
ddy
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-18 15:03:15 IP:61.59.xxx.xxx 未訂閱
如果這三個數值常常會被使用到的話 可以建立一結構,這樣子也變數可讀性也比較高 像是請假時數種類可以宣告成一個type 例:
implementation
  type
    holiType=record
        ss:Integer;
        ff:Integer;
        leave :Integer;
    end;    function bb(itype:Integer):holiType;
var
    i:holiType ;
begin
    i.ss:=0;
    i.ff :=1;
    i.leave :=3;
    Result:=i;
end;    procedure TForm1.Button1Click(Sender: TObject);
var
    m: holiType;
begin
    m := bb(0);
    self.Caption := IntToStr(m.leave);
end;    
=============================================================================== 提醒您,貼錯文章可立即傳訊通知該版版主/站長/副站長協助處理,不要放著不管喔
moko
一般會員


發表:31
回覆:34
積分:13
註冊:2002-09-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-18 16:23:55 IP:210.65.xxx.xxx 未訂閱
謝謝delphiwww,Miles,ddy的幫忙,可是我看不懂耶...太高深了,我想說明一下我想像的樣子,再請你們幫忙看看可否行的通好嗎?副程式大概的長相:< class="code"> if 請假 < 1 then begin if 請假 =0.5 then ss=... ff=... leave=... else if 請假 =0.25 then ss=... ff=... leave=... else if 請假 > 1 then begin 分1.整數部分 ...... ...... 2.小數部分-->又跑回到if 時數 < 1 那邊繼續算 最後回傳最終的結果給主程式 主程式大概的長相: while not q2.eof do begin if 病假 then 病假的副程式(判斷ss,ff,leave的值) else if 事假 then begin 事假的副程式(判斷ss,ff,leave的值) end; q2.next; end; edit1.text:=ss; edit2.text:=ff; edit3.text:=leave;
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-18 16:57:09 IP:210.58.xxx.xxx 未訂閱
Hi moko 您好: 用delphiwww的方法即可, 寫一Procedure, 但比較不解的是用一個while迴圈跑後, Edit1.2.3的值最後只會顯示最後一筆的值    

Procedure ProName(InData : Double; var ss, ff, leave : String);
var MInt : integer;
    MReal : Double;
begin
   MInt := Trunc(InData);
   MReal := InData - Trunc(InData);
   //整數部分處理 MInt的值
   //小數部分
   if MReal = 0.5 then begin
      ss := ??;   //String type
      ff := ??;   //String type
      Leave := ?? //String type
   end;
   if MReal = 0.25 then begin
      ss := ??;   //String type
      ff := ??;   //String type
      Leave := ?? //String type
   end; 
end;
//
//
//
主程式
while not q2.eof do begin  
  if 病假 then     
     ProName(請假時數, Edit1.Text, Edit2.Text, Edit3.Text);  
  else if 事假 then begin    
       事假的副程式(判斷ss,ff,leave的值)   <-- 參考如上
  end;
  q2.next;
end; 
我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-19 09:31:26 IP:61.70.xxx.xxx 未訂閱
ProName(請假時數, Edit1.Text, Edit2.Text, Edit3.Text); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 不能這樣用 !! Edit.Text 是一個方法,不是一個變數 方法用 var 來傳 , 效果是意料之外的 !!
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-19 09:41:50 IP:210.58.xxx.xxx 未訂閱
引言: ProName(請假時數, Edit1.Text, Edit2.Text, Edit3.Text); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 不能這樣用 !! Edit.Text 是一個方法,不是一個變數 方法用 var 來傳 , 效果是意料之外的 !!
真是抱歉, 一時不查, 改成以下方式 var a, b, c : String; ProName(請假時數, a, b, c); Edit1.Text := a; Edit2.Text := b; Edit3.Text := c; 抱歉抱歉 也感謝syntax兄的指正 我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2002/12/19 09:44:38
------


我不是高手, 高手是正在銀幕前微笑的人.
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-12-19 20:55:42 IP:203.203.xxx.xxx 未訂閱
小弟也來插個花,見笑了...^^ 以前也寫過薪資系統,由於每家公司計算遲到的扣款都不一樣, 看著excel大大的X,靈機一動來跟excel來個大和解... 1.開個excel檔當作系統設定值,設定formula讀取限定的cell值,計算薪資時僵遲到的分鐘數拋到該限定的cell,再去讀取計算結果,這麼一來就可以不管客戶要怎麼計算遲到扣錢,在excel裡面寫iif(a,b,c)類似這種的formula。 2.請假也用同樣的方式,若是複雜一點,則用運excel裡面的lookup函數。 3.結合lookup函數,還可以讀取所得稅的級距。 4.缺點:速度不若由程式控制那麼快就是,卻也是個偷懶的好辦法 ^ ^ 我不是來鬧場的,真的這樣做過,雖然被客服部門唸個半死 "沒事搞這種玩意,害我要去學excel"
系統時間:2024-05-05 11:36:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!