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

如何寫出mod

 
s556989
一般會員


發表:5
回覆:1
積分:1
註冊:2006-07-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-11-21 20:07:42 IP:140.128.xxx.xxx 未訂閱
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-11-21 20:38:35 IP:203.204.xxx.xxx 未訂閱
function mod(a:integer; b:integer):integer
begin
result:=a - (a div b)*b;
end;
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
s556989
一般會員


發表:5
回覆:1
積分:1
註冊:2006-07-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-11-21 20:47:44 IP:140.128.xxx.xxx 未訂閱

unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;



type

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Label2: TLabel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.DFM}

function OPAdd(var s:string;id,value:integer):integer;

var ss,sv:string;

begin

Result:=0;

if id<=0 then begin

sv:=inttostr(value);

s:=sv s;

Result:=length(sv);

end

else begin

ss:=intTostr(ord(s[id])-48 value);

if length(ss) > 1 then begin

s[id]:=ss[2];

Result:=OPAdd(s, id-1, ord(ss[1])-48);

end

else

s[id]:=ss[1];

end;

end;



procedure OPSub(var s:string;id,value:integer);

var r:integer;

begin

if id=0 then

s:='-' s

else begin

r:=ord(s[id])-48-value;

if r < 0 then begin

r:=r 10;

OPsub(s, id-1, 1);

end;

s[id]:=chr(r 48);

end;

end;

function InfinitAdd(s1,s2:string):string;

var i,n1,n2:integer;

begin

n1:=length(s1);

n2:=length(s2);

if n2 > n1 then

Result:=InfinitAdd(s2,s1)

else begin

Result:=s1;

for i:=1 to n2 do

n1:=n1 OPadd(Result,n1-n2 i, ord(s2[i])-48);

end;

end;



function InfinitSub(s1,s2:string):string;

var i,n1,n2:integer;

begin

n1:=length(s1);

n2:=length(s2);

if ( (n2 > n1) or ((n2=n1) and (s1 < s2))) then

Result:='-' InfinitSub(s2,s1)

else begin

Result:=s1;

for i:=1 to n2 do

OPSub(Result,n1-n2 i, ord(s2[i])-48);

end;

end;





function Infinitmul(s1,s2:string):string;

var i,j,n1,n2,n:integer;

begin

n1:=length(s1);

n2:=length(s2);

if n2 > n1 then

Result:=InfinitMul(s2,s1)

else begin

n:=n1;

Result:=StringofChar('0',n1);

for i:=1 to n2 do

for j:=n1 downto 1 do

n:=n OPAdd(Result,n-n1-n2 i j,(ord(s2[i])-48) * (ord(s1[j])-48));

end;

end;

procedure DeleteLD0(var s:string);

begin

while (s[1]='0') and (length(s)>1) do delete(s,1,1);

end;



function _InfinitDiv(s1,s2:string;var res:string):string;

var n1,n2,n,r:integer;

c:char;

stemp:string;

begin

n1:=length(s1);

n2:=length(s2);

if ( (n2 > n1) or ((n2=n1) and (s1< s2))) then begin

Result:='';

res:=s1;

end

else begin

n := n1 - n2-1;

if s2[1] <= s1[1] then

inc(n);

if s1[1] >= s2[1] then

r:= (ord(s1[1])-48) div (ord(s2[1])-48)

else

r:=strToint(res[1] res[2]) div (ord(s2[1])-48);

repeat

if r=0 then begin

dec(n);

r:=9;

Result:='0';

end;

c:= chr(r 48);

stemp:=c StringofChar('0',n);

res:= infinitsub(s1, infinitmul(s2,stemp));

DeleteLD0(res);

dec(r);

until res[1] <> '-';

Result:=Result infinitAdd(stemp,_infinitDiv(res, s2, res));

end;

end;

function InfinitDiv(s1,s2:string):string;

var res:string;

begin

result:=_InfinitDiv(s1,s2,res);

if result='' then result:='0';

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Label1.caption:=InfinitAdd(edit1.text,edit2.text);

end;



procedure TForm1.Button2Click(Sender: TObject);

begin

Label1.caption:=InfinitSub(edit1.text,edit2.text);



end;



procedure TForm1.Button3Click(Sender: TObject);

begin

Label1.caption:=InfinitMul(edit1.text,edit2.text);



end;



procedure TForm1.Button4Click(Sender: TObject);

begin

Label1.caption:=InfinitDiv(edit1.text,edit2.text);

end;



end.




P.S:若有網友認為您可以寫出更好的演算法,就再接力賽吧!

~~~Delphi K.Top討論區站長~~~

如站長之前寫的方式 如何寫出一個Mod的方式!!
ddy
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-11-22 14:49:01 IP:210.192.xxx.xxx 未訂閱
沒有內文? 請詳述,若無將刪除
系統時間:2024-04-25 2:29:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!