from http://www.csdn.net/Expert/topic/419/419956.shtm
回复人: zswang(伴水)(被黑中) (2001-12-14 11:16:53) 得0分
to urchinjj(懒刺猬):我来做其中一个吧,我是首开先例啊,不要你的学费
我是以算法为主,有些Delphi5/6+SQL SERVER 7.0/2000 ¦ Access商业开发经验//这是我能教你的
回复人: zswang(伴水)(被黑中) (2001-12-14 11:16:53) 得0分
to urchinjj(懒刺猬):我来做其中一个吧,我是首开先例啊,不要你的学费
我是以算法为主,有些Delphi5/6+SQL SERVER 7.0/2000 ¦ Access商业开发经验//这是我能教你的
解决方案 »
- 请求指点OOP的精华所在 高分送上
- dbgrid 輸入數據保存時不成功
- stringgrid 中。如何能很好控制光标的移动和某写列可以编辑呢?急。。。。。。。。。。。。。。。。
- 征名,有創意可得40分
- 在DELPHI里使用了一个图像控件,如何在画图程序中使用这个图像控件来作图?
- 看看这样的问题!
- ADO连接(简单问题,在线待)
- 我的D版DELPHI上没带打包程序,做好的程序怎么打包?那里有DELPHI打包程序下载?万分感谢!
- 路由器,交换机,集线器 解释得经典极了!!!
- 怎么样改变我们的滚动条的颜色呢
- 如何判断edit1.text输入的值(密码)和INI文件(密码)相同。用语句写
- 关于用dcom和socket技术来解决相关问题,高手请过来,帮小弟拨开云雾,有重奖!给50分
等会儿取sprikg(3.14159)的人头做见面礼
呵呵!!
测试题 1.1 算法名题:在一个列表中排除相同元素
输入范例:
2
9
1
9
2
4
3
4 输出范例:
2
1
9
4
3 函数声明:
procedure Calc(mStrings: TStrings);
begin
{ 自己发挥 }
end;
测试代码:
begin
Calc(Memo1.Lines);
end;
var
i, j: Integer;
begin
i := 0;
while i < InString.Count do
begin
j := i + 1;
while j < InString.Count do
begin
if InString.Strings[j] = InString.Strings[i] then
begin
InString.Delete(j);
continue;
end;
Inc(j);
end;
Inc(i);
end;
end;
满足要求不
var
I, J: Integer;
begin
I := 0;
while I < mString.Count do begin
J := I + 1;
while J < mString.Count do begin
if mString[J] = mString[I] then begin
mString.Delete(J);
Continue;
end;
Inc(J);
end;
Inc(I);
end;
end; { xzgybCalc }procedure TForm1.Button1Click(Sender: TObject);
var
T: DWord;
begin
T := GetTickCount;
xzgybCalc(Memo1.Lines); //Count=1000
Caption := Format('%d', [GetTickCount - T]);//886
end;
begin
{ 怎么写 }
end; { zswangCalc }procedure TForm1.Button1Click(Sender: TObject);
var
T: DWord;
begin
T := GetTickCount;
zswangCalc(Memo1.Lines); //Count=1000
Caption := Format('%d', [GetTickCount - T]);//563
end;
var
T: DWord;
begin
T := GetTickCount;
zswangCalc(Memo1.Lines); //Count=3000
Caption := Format('%d', [GetTickCount - T]);//1658
end;procedure TForm1.Button2Click(Sender: TObject);
var
T: DWord;
begin
T := GetTickCount;
xzgybCalc(Memo1.Lines); //Count=3000
Caption := Format('%d', [GetTickCount - T]);//4078
end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
//procedure calc (mstrings:tstrings);
private
{ Private declarations }
public
{ Public declarations }
//procedure calc(mstrings:tstrings); end;var
Form1: TForm1;implementation{$R *.DFM}procedure calc (var mstrings:tstrings);
var
i,j,k:integer; //k计数string1中的元素个数
string1: tstrings; //string1中放置新的元素
begin
if mstrings.Count>0 then
begin
string1.Strings[0]:=mstrings[0];
k:=1;
for i:= 1 to mstrings.Count-1 do
begin
for j:=1 to k do
begin
if mstrings[i]=string1[j] then break
else K:=k+1;
end;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
MyList:TStrings;
begin
MyList:=TStringList.create; // 测试没通过,,
MyList1:=TStringList.create; // 不会用Memol.line@_@
with MyList do
begin
Add('Animals');
Add('Flowers');
end;
calc(MyList);
end;end.师傅俺不会tsrings,嘿嘿,俺会什么耶?俺知道怎么计算,可是还没通过那,您别急啊,,
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
var
i,j,k:integer; //k计数string1中的元素个数
string1: tstrings; //string1中放置无重复元素
begin
if mstrings.Count>0 then
begin
string1[0]:=mstrings[0]; //报错,相同类型不能直接赋值,为什么???????
k:=1;
for i:= 0 to mstrings.Count-1 do
begin
for j:=0 to k-1 do //string1中已经存在的的元素
begin
if mstrings[i]=string1[j] then break //如果在1到k之间有相等的,则跳出不在搜寻
else
begin
string1[k]:= mstrings[i]; //把无重复元素放在 string1最后一位
K:=k+1;
end;
end;
end;
end;
end;
师傅,我明白你的意思,是在原来的列表中操作,我的意思是把不同的元素取出放在另一个列表中,不为什么相同类型直接赋值不可以??
string1[0]:=mstrings[0]; //string1没有创建
string1 := TStringList.Create;
{ }
string1.Free;
你的代码没有风格
大小写统一,排整齐先
师傅,你怎么这么晚还上网啊?是不是看流星雨了?嘿嘿,俺是双子座的,拍完师傅了@_@
现在:
1,俺用的算法对不对?
2,俺知道没风格啊,呜呜,俺排,,
3,师傅怎么排整齐?还有大小写,怎么统一?俺先去看看书发规范@_@
师傅,俺今天停电了,出去放风了,嘿嘿,所以才上来看见,//sorry2俺现在改,
这个程序调试过了,就是俺实现的太麻烦了,呜呜,俺现在去研究师傅的程序了,
不过俺还是不会用那个meno测试,嘿嘿,谢谢师傅,严肃的,嘻嘻嘻嘻嘻嘻嘻嘻
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure calc (var mstrings:tstrings);
end;var
Form1: TForm1;
string1: tstrings; //string1中放置无重复元素
k:integer;
implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);Var
myList:TStrings;
i,l:integer;
begin
myList:=TStringList.create;
string1:= TStringList.Create;
with myList do
begin
Add('animals');
Add('flowers');
Add('stone');
Add('stream');
Add('stream');
Add('s ');
Add('str ');
Add('stra ');
Add('stra ');
end;
calc(myList);
string1[0]:=myList[0]; //测试是否能相互赋值,嘿嘿
edit1.Text:=string1[0]+string1[6];
showmessage(inttostr(k))
end;procedure TForm1.calc(var mstrings: tstrings);
var
flag:boolean; //标志string1中是否有和mstring中相同的元素
i,j,n:integer; //k计数string1中的元素个数
begin
if mstrings.Count>0 then
begin
string1:= TStringList.Create;
with string1 do
begin
for n:=0 to mstrings.Count-1 do //srtring1初始化与mstrings相同多字符数,
Add('');
end;
showmessage(inttostr(string1.count));
string1[0]:=mstrings[0]; //不报错了@_@,
flag:=false;
k:=1;
for i:= 1 to mstrings.Count-1 do
begin
for j:=0 to k-1 do //string1中已经存在的元素个数,
begin
if mstrings[i]=string1[j] then
begin
flag:=true;
break; //如果在1到k之间有相等的,则跳出不在搜寻
end
else
flag:=false;
end;
if flag=false then //string1中没有与mstrings[i]重复元素
begin
string1[k]:= mstrings[i]; //把无重复元素放在 string1里
k:=k+1;
end;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
string1.Free;
close;
end;
end.
procedure XzgybCalc4(InString: TStrings);
var
i: Integer;
vList: TStringList;
iCount : Integer;
begin
vList := TStringList.Create;
vList.Capacity := iCount; for i := 0 to InString.Count - 1 do
if vList.IndexOf(InString.Strings[i]) = -1 then
vList.Add(InString.Strings[i]); InString.Text := vList.Text;
vList.Free;end;
procedure XzgybCalc4(InString: TStrings);
var
i: Integer;
vList: TStringList;
begin
vList := TStringList.Create;
vList.Capacity := InString.Count; for i := 0 to InString.Count - 1 do
if vList.IndexOf(InString.Strings[i]) = -1 then
vList.Add(InString.Strings[i]); InString.Text := vList.Text;
vList.Free;end;
//我是这样写的
procedure zswangCalc(mStrings: TStrings);
var
I: Integer;
begin
for I := mStrings.Count - 1 downto 0 do
if mStrings.IndexOf(mStrings[I]) then
mStrings.Delete(I);
end; { zswangCalc }
var
I: Integer;
begin
for I := mStrings.Count - 1 downto 0 do
if mStrings.IndexOf(mStrings[I]) <> I then
// ~~~~~~~
mStrings.Delete(I);
end; { zswangCalc }
No.1 直接判断逻辑值
if flag=false then ; //不建议
if not flag then ; //建议 理由: 逻辑型有很多种Boolean,BOOL,LongBool,WordBool.........
True和False在不同的逻辑型中有不同的数值
有可能Boolean(True) <> BOOL(True)No.2 循环标记
///////Begin 不建议
for j:=0 to k-1 do
begin
if mstrings[i]=string1[j] then
begin
flag:=true;
break; //很好知道要跳出循环
end
else
flag:=false; //每次都要赋值
end;
///////End 不建议///////Begin 建议
flag:=false; //只赋值一次
for j:=0 to k-1 do
begin
if mstrings[i]=string1[j] then
begin
flag:=true;
break;
end;
end;
///////End 建议
理由:减少计算量,增加运行速度No.3 常用函数,看别人程序的时候不要看不懂,最好自己也用用
Inc(I); //I := I + 1;
Dec(I); //I := I - 1;
Succ(I); //I + 1;
Pred(I); //I - 1;
Odd(I); //I mod 2 <> 0;
Include(S, I); //S := S + [I];
Declude(S, I); //S := S - [I];
Trunc(R); //自己看Help
Round(R); //自己看Help
Str();
Val();
.....
理由:pascal最基础的函数一定要知道其次你要锻炼:
熟能生巧
多看,多写,多研究
曾经我把<<pascal标准教材>>所有习题都自己独立的通写了一遍
我就不多说了最后风格:
看看Delphi是怎样写的就怎样写
没有风格的程序看不是享受
当然以后我会花时间给你谈谈编程风格Home Work:
测试题 1.2 算法名题:计算N!(N阶乘)(必须使用递归方法,N<10测试)
输入范例:4
输出范例:24
// ~~1*2*3*4
函数声明:
function Calc(mNumber: Integer): Integer;
begin
{ 自己发挥(其他地方不准乱写代码) }
end; 测试代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := IntToStr(Calc(StrToIntDef(Edit1.Text)));
end;
不错,又学东西,简洁阿,我还一直不懂为什么是这结果
2
1
9
4
3
明白了,呵呵
这张贴子,我是在偷艺阿,也很希望能跟你学习,呵呵,虽然我岁数大了点
师傅,俺感冒了,呜呜,晚上才上来,俺去作题了,,临走,to xzgyb(老达摩),你怎么偷艺啊?//ice//hammer,嘿嘿//hand//sorry//@@
师傅,俺交作业了,这是最简单的递归,嘿嘿
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function Calc(mNumber: Integer): Integer;
end;var
Form1: TForm1;implementation{$R *.DFM}{ TForm1 }function TForm1.Calc(mNumber: Integer): Integer;
begin
if mNumber=0 then //如果N=0 则N!=1
calc:=1
else
calc:=mNumber*calc(mNumber-1); //否则 N!=N*(N-1)! ,实现递归
end;procedure TForm1.Button1Click(Sender: TObject);
var
Number: Integer;
begin
Caption := IntToStr(Calc(StrToIntDef(Edit1.Text, 0))); //调试通过~~~~嘿嘿
end;
end.
//注意以下几点
//function TForm1.Calc(mNumber: Integer): Integer;
// ~~~~~~~不用声明成类函数,应该是单元函数,TForm1不创建是不能使用Calc
function Calc(mNumber: Integer): Integer;
begin
// if mNumber=0 then //如果N=0 则N!=1
// ~用空格分开一下,容易区分标识
if mNumber <= 0 then //如果N<=0 则N!=1
// calc:=1
// ~~~~~~~用Result比较好,不用怕函数以后改名
Result := 1
// else
// calc:=mNumber*calc(mNumber-1); //否则 N!=N*(N-1)! ,实现递归
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~自己看看上面美观还是下面美观
else Result := mNumber * Calc(mNumber - 1); //否则 N!=N*(N-1)! ,实现递归
end;procedure TForm1.Button1Click(Sender: TObject);
//var
// Number: Integer;
// ~~~~~~~~~~~~~~~~ 没用的变量不要声明
begin
Caption := IntToStr(Calc(StrToIntDef(Edit1.Text, 0))); //调试通过~~~~嘿嘿
end;end.
嘿嘿嘿知道师傅嘿嘿嘿
嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿俺一直在等侬来查作业那,,俺又学会了一个函数StrToIntDef,俺总是没记性,怎么办啊?//cry
~~~~~~~不用声明成类函数,应该是单元函数,TForm1不创建是不能使用Calc
师傅,俺就知道去那里声明啊?这样声明不好吗?俺还知道如果把函数放在调用前面,在一个单元里也可以不声明,是吗?类函数和单元函数分别在哪里声明?除了使用范围不同,还有什么区别?对性能有影响吗?
测试题 1.3 算法名题:判断N是不是质数(如:2,3,5,7,11,13,17....)
输入范例1:17
输出范例1:True
输入范例2:57
// ~~3*19=57
输出范例2:False 函数声明:
function Calc(mNumber: Integer): Boolean;
begin
{ 自己发挥(用Result) }
end; 测试代码:
procedure TForm1.Button1Click(Sender: TObject);
const
cBoolStr: array[Boolean] of string = ('False', 'True');
begin
Caption := cBoolStr[Calc(StrToIntDef(Edit1.Text))];
end; 测试题 1.4
算法名题:输入日期字符返回中文表达方式(不考虑错误输入)
输入范例1:2001-9-7
输出范例1:二零零一年九月七日
输入范例2:2018-11-27
输出范例2:二零一八年十一月二十七日
函数声明:
function Calc(mString: string): string;
begin
{ 自己发挥(用Result) }
end; 测试代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := Calc(Edit1.Text);
end;
呜呜呜师傅收到呜呜呜
呜呜呜呜呜呜呜呜呜呜师傅,这个晚一点交可以不?明天俺有任务,可能没时间,嘿嘿,
//shy//inn//cry................................@_@...................................
第二条俺做不到,在俺自己的能力范围内,俺总想简单一些实现,不过现在在改变这个毛病,
第三条,俺就没的想那,嘿嘿,@@@@@@@@@@@@@@@@@@@@@@@@@@
好呀!我只是留在这里
什么时候有时间什么时候写
关注就行
@@@@@@@@@@@@@@@@@@@@@@@@@@
俺上来先看这里了,俺现在项目里担任的一点事快作完了,明天就集成了,所以以后有时间来看了,嘿嘿,
//thank,就不说了吧?@_@
IntToStrDef()//是一个单元函数
SysUtils.IntToStrDef()//完全写法
Close//是一个类型函数//过程也可以叫函数
Self.Close//完全写法//除了使用范围不同,还有什么区别?
//对性能有影响吗?
类函数可以直接访问类事例的属性
procedure TForm.Calc;
begin
ShowMessage(Caption); //直接访问Caption
end;单元函数不能直接访问类事例的属性
procedure Calc;
begin
// ShowMessage(Caption); //编译不能通过//Caption是谁的?
ShowMessage(Form1.Caption); //只能间接访问Caption
end;
begin
{ 其实Button1Click就是类函数 }
end;
begin
with TForm1.Create(Self) do try //也算是个递归,自己玩玩看
ShowModal;
finally
Free;
end;
end; //try except 和try finally的区别
try ... except { 出现异常才执行 } end;
try ... finally { 不管怎样都执行 } end;
嘿嘿嘿师傅收到嘿嘿嘿
嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿师傅,俺走了,侬也早点休息,嘿嘿//sleep//@@