简单的问题:关于判断语句的使用(100)

  • 主题发起人 主题发起人 jt780830
  • 开始时间 开始时间
J

jt780830

Unregistered / Unconfirmed
GUEST, unregistred user!
问题:输入一个整数,判断能否被3、5、7整除,并输出以下信息之一:(1)能同时被3、5、7整除;(2)能被其中两个数(指出哪2个);(3)能被其中一个数整除;(4)不能被整除;*********************************************************也许是人笨,用的办法也最笨,没什么好的方法:以下是本人代码(各位不要见笑,太菜了,个人学习中)。请没事的写下你们的方法:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Label1: TLabel
Edit1: TEdit
Button1: TButton
procedure Button1Click(Sender: TObject)
private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}function Can3(a:integer):boolean;beginif (a mod 3)=0 thenresult:=trueelseresult:=false;end;function Can5(a:integer):boolean;beginif (a mod 5)=0 thenresult:=trueelseresult:=false;end;function Can7(a:integer):boolean;beginif (a mod 7)=0 thenresult:=trueelseresult:=false;end;procedure TForm1.Button1Click(Sender: TObject);var x:integer;begin x:=strtoint(edit1.text);if (Can3(x)=false) and (Can5(x)=false) and (Can7(x)=false) thenbeginshowmessage('不能被3、5、7中的任一数整除!');end;if (Can3(x)=true) and (Can5(x)=true) and (Can7(x)=true) thenshowmessage('能同时被3、5、7整除')else begin if (Can3(x)=true) and (Can5(x)=true) then showmessage('能同时被3和5整除') else if (Can3(x)=true) and (Can7(x)=true) then showmessage('能同时被3和7整除') else begin if (Can3(x)=true) then showmessage('能被3整除')
if (Can5(x)=true) then showmessage('能被5整除')
end
if (Can5(x)=true) and (Can7(x)=true) then showmessage('能同时被5和7整除') else if (Can7(x)=true) then begin showmessage('能被7整除')
end
end;end;end.
 
以经不错了。-----即使取最小公倍数来比较,工作量也和这差不多。
 
function Can105(a:integer):boolean;begin if (a mod 105)=0 then result:=true else result:=false;end;procedure TForm1.Button1Click(Sender: TObject);var i:integer;begin Memo1.Clear
for i:=105 to 1000000 do begin if Can105(i)=True then begin Memo1.Lines.Add(inttostr(i))
end
end
Label1.Caption :=inttostr(Memo1.Lines.Count);end;
 
uses Math;procedure TForm1.Button1Click(Sender: TObject);var Value, A, B: integer
X1, X2, X3: TPoint;begin Value := StrToInt(edit1.text)
X1.X := 3
X1.Y := Integer((Value mod X1.X) = 0)
X2.X := 5
X2.Y := Integer((Value mod X2.X) = 0)
X3.X := 7
X3.Y := Integer((Value mod X3.X) = 0)
case X1.Y + X2.Y + X3.Y of 3: showmessage('能同时被3、5、7整除')
2: begin B := MaxIntValue([X1.X * X1.Y, X2.X * X2.Y, X3.X * X3.Y])
A := X1.X * X1.Y + X2.X * X2.Y + X3.X * X3.Y - B
showmessage(format('能同时被%d和%d整除', [A, B]))
end
1: showmessage(format('能被%d整除', [MaxIntValue([X1.X * X1.Y, X2.X * X2.Y, X3.X * X3.Y])]))
0: showmessage('不能被3、5、7中的任一数整除!')
end;end;
 
luoyanqing119高手,羡慕啊。继续学习中,学习编程思路和方法。为什么这么精简?用到了面向对象的方法、指针,这些都是我不懂的,还有case语句!精辟!学到了!
 
不反对你称赞别人,如果觉得差不多了,分给我总行吧?另:上面没有用到面向对象的方法,也没有用到指针。TPoint只是一个结构体类型,不是类。Integer((Value mod X1.X) = 0);是将boolean类型转换为Integer类型。
 
反正是我不懂的,但还是发分给你,我还能做什么呢?唉,我先收藏着。觉得你用的真高深!虽然我还没实际测试运行,因为我确实不懂。
 
znxia不错,算法好
 
znxia 的算法:[h4][red][/red][/h4]
 
function f(k: integer): string;const intarray : array [0..2] of integer = (3,5,7);var i: integer
s: string;begin s:=''
for i:=Low(intarray) to High(intarray) do begin if (k mod intarray)=0 then begin if s<>'' then s:=s+','
s:=s+inttostr(intarray)
end
end
if s='' then result:=inttostr(k)+' 不能被 3,5,7 整除' else result:=inttostr(k)+' 能被 '+s+' 整除';end;procedure TForm1.Button1Click(Sender: TObject);begin ShowMessage(f(strtoint(Edit1.Text)));end;
 
都是一帮子算法高手
 
咱也来一个,没测试,不知道正不正确。var jg:integer;begin if strtoint(edit1.text) mod 3 =0 then jg:=jg+1
if strtoint(edit1.text) mod 5 =0 then jg:=jg+2
if strtoint(edit1.text) mod 7 =0 then jg:=jg+4
case jg of 7: showmessage('能同时被3、5、7整除')
6: showmessage('能同时被5、7整除')
5: showmessage('能同时被3、7整除')
4: showmessage('能被7整除')
3: showmessage('能同时被3、5整除')
2: showmessage('能被5整除')
1: showmessage('能被3整除')
0: showmessage('不能被3、5、7整除')
end;end;
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
911
SUNSTONE的Delphi笔记
S
后退
顶部