誰可幫我一把(delphi問題) ,<- 請取一個有意義的標題 |
答題得分者是:eaglewolf
|
017911
一般會員 發表:5 回覆:2 積分:1 註冊:2007-07-08 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
這問題之前就解答過了,
http://delphi.ktop.com.tw/board.php?cid=30&fid=1498&tid=90789#4 原程式碼只要修改一下, 去除禁用的數組(陣列) 以及 for-loop 語法改變一下, 就應該可以了... ^_^ [code delphi] procedure TForm1.Button1Click(Sender: TObject); function IsPrime(X: Integer): Boolean; var I, Q: Integer; begin if X < 4 then Result := True else begin Result := True; Q := Trunc(Sqrt(X)) 1; for I := 2 to Q do if X mod I = 0 then begin Result := False; Break; end; end; end; function CheckCondition(X: Integer): Boolean; var S: string; A, B, C, I: Integer; begin A := 1; B := 0;//Sum C := 1;//Mul S := IntToStr(X); I := Length(S); repeat A := A * 10 StrToInt(S[I]); B := B StrToInt(S[I]); C := C * StrToInt(S[I]); Dec(I); until I = 0; Result := False; if not IsPrime(A) then EXIT; if not IsPrime(B) then EXIT; if not IsPrime(C) then EXIT; Result := True; end; procedure Print(Index, N: Integer); var S: string; R: TRect; W, H: Integer; begin S := IntToStr(N); Canvas.Font.Name := 'ARIAL'; Canvas.Font.Height := 24; Canvas.Font.Color := clBlue; W := Canvas.TextWidth(S); H := Canvas.TextHeight(S); R := Rect(0,0,W,H); OffsetRect(R,0,H*Index 1); DrawText(Canvas.Handle,PChar(S),Length(S),R,DT_LEFT DT_SINGLELINE); end; var I, N, Z: Integer; begin Z := 160;//最大數 I := 0; N := 1; repeat if IsPrime(N) and CheckCondition(N) then begin Print(I, N); Inc(I); end; Inc(N); until N > Z; end; [/code] ===================引 用 017911 文 章=================== 尋找160以內的素數,它的倒序數(如123的倒序數為321)、數碼和 (如123的數碼和為1 2 3)、數碼積 (如123的數碼積為1*2*3) 不是素數便是1。
面版中只需有一個按鈕 , 只能用循環語句 如 ( if 循環 While-do循環 Repeat-until循環) 三種循環一起用都可 , 注意不能使用數組 |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
在素數(質數)的定義中 0 與1 不屬於素數
所以 IsPrime 跟 CheckCondition 這兩個函數要稍微修正 其它則不變 [code delphi] function IsPrime(X: Integer): Boolean; var I, Q: Integer; begin if X < 2 then begin Result := False; exit; end; if X < 4 then Result := True else begin Result := True; Q := Trunc(Sqrt(X)) 1; for I := 2 to Q do if X mod I = 0 then begin Result := False; Break; end; end; end; function CheckCondition(X: Integer): Boolean; var S: string; A, B, C, I: Integer; begin A := 0; B := 0;//Sum C := 1;//Mul S := IntToStr(X); I := Length(S); repeat A := A * 10 StrToInt(S[I]); B := B StrToInt(S[I]); C := C * StrToInt(S[I]); Dec(I); until I = 0; Result := False; if not IsPrime(A) then EXIT; if not IsPrime(B) then EXIT; if not IsPrime(C) then EXIT; Result := True; end; [/code] ===================引 用 jow 文 章=================== 這問題之前就解答過了, http://delphi.ktop.com.tw/board.php?cid=30&fid=1498&tid=90789#4 原程式碼只要修改一下, 去除禁用的數組(陣列) 以及 for-loop 語法改變一下, 就應該可以了... ^_^ [code delphi] procedure TForm1.Button1Click(Sender: TObject); function IsPrime(X: Integer): Boolean; var I, Q: Integer; begin if X < 4 then Result := True else begin Result := True; Q := Trunc(Sqrt(X)) 1; for I := 2 to Q do if X mod I = 0 then begin Result := False; Break; end; end; end; function CheckCondition(X: Integer): Boolean; var S: string; A, B, C, I: Integer; begin A := 1; B := 0;//Sum C := 1;//Mul S := IntToStr(X); I := Length(S); repeat A := A * 10 StrToInt(S[I]); B := B StrToInt(S[I]); C := C * StrToInt(S[I]); Dec(I); until I = 0; Result := False; if not IsPrime(A) then EXIT; if not IsPrime(B) then EXIT; if not IsPrime(C) then EXIT; Result := True; end; procedure Print(Index, N: Integer); var S: string; R: TRect; W, H: Integer; begin S := IntToStr(N); Canvas.Font.Name := 'ARIAL'; Canvas.Font.Height := 24; Canvas.Font.Color := clBlue; W := Canvas.TextWidth(S); H := Canvas.TextHeight(S); R := Rect(0,0,W,H); OffsetRect(R,0,H*Index 1); DrawText(Canvas.Handle,PChar(S),Length(S),R,DT_LEFT DT_SINGLELINE); end; var I, N, Z: Integer; begin Z := 160;//最大數 I := 0; N := 1; repeat if IsPrime(N) and CheckCondition(N) then begin Print(I, N); Inc(I); end; Inc(N); until N > Z; end; [/code] ===================引 用 017911 文 章=================== 尋找160以內的素數,它的倒序數(如123的倒序數為321)、數碼和 (如123的數碼和為1 2 3)、數碼積 (如123的數碼積為1*2*3) 不是素數便是1。
面版中只需有一個按鈕 , 只能用循環語句 如 ( if 循環 While-do循環 Repeat-until循環) 三種循環一起用都可 , 注意不能使用數組
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
017911
一般會員 發表:5 回覆:2 積分:1 註冊:2007-07-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |