不知該說是進制還是進位的問題 .. |
答題得分者是:aip999
|
cavy9999
一般會員 發表:16 回覆:21 積分:7 註冊:2002-03-13 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
cavy9999 您好: 底下程式碼您參考看看!其實也可以用if-else來判斷!
..... function addIn(value :integer) : integer; var n : integer; begin n := value mod 10; // 個位數字 if ( (n=0) or (n=5) ) then exit; // 0 or 5 value := value - n; if ( n>5 ) then n:=10 else n:=5; result := value n; end; function removeOut(value :integer) : integer; var n : integer; begin n := value mod 10; // 個位數字 if ( (n=0) or (n=5) ) then exit; // 0 or 5 value := value - n; if ( n>5 ) then n:=5 else n:=0; result := value n; end; procedure TForm1.Button1Click(Sender: TObject); var value : integer; begin value := StrToInt(Edit1.Text); value := addIn(value); Label1.Caption := IntToStr( value ); value := StrToInt(Edit1.Text); value := removeOut(value); Label2.Caption := IntToStr( value ); end; .....RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
將 richtop兄的程式再簡化一點, 效能也更高一點的作法,
function Round5In(aValue: Integer): Integer; var r: Integer; begin r := aValue mod 5; if r = 0 then Result := aValue else Result := aValue 5 - r; end; function Round5Out(aValue: Integer): Integer; var r: Integer; begin r := aValue mod 5; if r = 0 then Result := aValue else Result := aValue - r; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(IntToStr(Round5In(12))); ShowMessage(IntToStr(Round5Out(13))); end; |
cavy9999
一般會員 發表:16 回覆:21 積分:7 註冊:2002-03-13 發送簡訊給我 |
RichTop 大哥 您好.
感謝您夜深裡的一盞燈.
但假設這是個浮點數值 333.3 就不行了.
難道說 delphi 真的沒有好用的函式了.. 謝謝 !
引言: cavy9999 您好: 底下程式碼您參考看看!其實也可以用if-else來判斷!..... function addIn(value :integer) : integer; var n : integer; begin n := value mod 10; // 個位數字 if ( (n=0) or (n=5) ) then exit; // 0 or 5 value := value - n; if ( n>5 ) then n:=10 else n:=5; result := value n; end; function removeOut(value :integer) : integer; var n : integer; begin n := value mod 10; // 個位數字 if ( (n=0) or (n=5) ) then exit; // 0 or 5 value := value - n; if ( n>5 ) then n:=5 else n:=0; result := value n; end; procedure TForm1.Button1Click(Sender: TObject); var value : integer; begin value := StrToInt(Edit1.Text); value := addIn(value); Label1.Caption := IntToStr( value ); value := StrToInt(Edit1.Text); value := removeOut(value); Label2.Caption := IntToStr( value ); end; .....RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
cavy9999
一般會員 發表:16 回覆:21 積分:7 註冊:2002-03-13 發送簡訊給我 |
timhuang 您真是太瞭解一個程式中..效率問題.
為求謹慎,我還是必須需要連浮點數值都考慮進來.
引言: 將 richtop兄的程式再簡化一點, 效能也更高一點的作法,function Round5In(aValue: Integer): Integer; var r: Integer; begin r := aValue mod 5; if r = 0 then Result := aValue else Result := aValue 5 - r; end; function Round5Out(aValue: Integer): Integer; var r: Integer; begin r := aValue mod 5; if r = 0 then Result := aValue else Result := aValue - r; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(IntToStr(Round5In(12))); ShowMessage(IntToStr(Round5Out(13))); end; |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
cavy9999 您好: 回答問題時,因為希望能明載程式寫作思路,所以就多了些步驟。
感謝 timhuang 的簡化與效率提昇! 其實我當時想的解法是利用if-else-if來判斷,但又想將它寫成一個function,所以就成了上述有點怪怪的寫法!精確的說有點錯(我修改了一下)! 如果要考慮浮點數,那必須要告知function在小數點後第幾位。
例如:333.3 * 10 = 3333 => 3335 => 3335/10 = 333.5
不過浮點數的除法有時會引進捨去誤差,所以可能在小數點後很多位處會出現無法預期的數字! RichTop 敬上 =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====#####
|
aip999
初階會員 發表:10 回覆:63 積分:44 註冊:2002-03-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |