|
算法实际上很简单,可以利用循环,也可以利用递归,在此仅仅做简单的分析。我们用循环来处理的话应该需要从后边入手,第十天刚刚吃的还有一个桃子,那么第十天,就应该是四个,第九天是十个,第八天是二十二个……,如此类推,我们可以很容易的得出一共有多少个桃子,可以进行如下的处理:
Var
Acount : Integer;
Asum : Integer;
Begin
Asum := 1;
For Acount := 10 DownTo 1 do
Asum := ( Asum + 1 ) * 2;
End;
理解起来很容易,到了第十天吃过之后还剩一个桃子,那么,第十天实际上应该是四个,哪此类推的倒循环回去就可以知道答案。而得用递归将更简单,如下:
Function Cal(Avalue : Integer) : Integer;
Begin
If Avalue = 11 then
Result := 1 else
Result ;= (Cal(Avalue + 1) + 1) * 2;
End;
猴子吃桃,虽然题目相当简单,但或多或少的有些饶人,用循环我们已经很容易的作了出来,接正是来用递归完成这个过程,应为第10天吃完之后还剩1个,相当于到了第11天还有4个桃子,所以我们就可以列出:if DayValue = 11 then Sum = 1 ;递归的过程很简单,只要我们可以把握住它是一个堆的过程,进去了总还是要出来的,而且先进后出;
1. 创建COM服务器
要创建一个COM服务器来实现此算法,而且,这个COM服务器同时还要做用户登录接口。Delphi7为我们提供了很好的创建向导,使得我们不在如在Delphi3下一样,需要手动键入代码,需要说明的一些问题,因为这个应用程序将作成进程内服务,所以首要的前提就是做一个Library,一切操作都应该在这个Library的容器里进行。
新建一个应用程序(File -> New -> Other)选择ActiveX标签,如下图所示:又击ActiveX Library或是选中ActiveX按回车键,Delphi会为我们自动的完成一些工作。
当点击“OK”按钮时,如下:
library Project2;
uses
ComServ;
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
{$R *.RES}
begin
end.
这样就创建了一个进行内COM服务器的首要工作,DLL如上边代码所示,Delphi会为我们自动的建立,而DllGetClassObject、DllCanUnloadNow、DllRegisterServer、DllUnregisterServer在前边的章节我们已经详细的介绍过,在些不再阐述。这后请保存这个文件为SrvPro.
在此稍微的做一下分析,为了实现上边的算法,我们需要用到接口来供客户端调用,而现在我们仅仅完成了ActiveX Library库,接下来的工作就是创建正真的COM组件。创建COM组件也很简单,根据相导提示(File-> New -> Other -> ActiveX),如下图
在此我们简单的来说一说这个Com Object对话框的具体含义:
Class Name :在此填写类名,Delphi会自动的给我们加上“T”;
Instancing : 在进程内服务,它是没有意义的,因为COM服务器和应用程序在同一个进程里;
Threading Modal:线程模型,线程模型的具体做含意在之前我们已经详细的介绍过,此处将不一再阐述,但是需要知道的是,并非在此设置了某一种线程模型,那么这个服务器就是一个什么样的线程模型,而是在编程过程中来合理的安排。推荐默认的线程模型:Apartment;
点“OK”按钮之后,并将文件保存成AccUnt,会出现入下代码:
unit AccUnt;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
Windows, ActiveX, Classes, ComObj;
type
TAccemp = class(TComObject)
上一页 [1] [2] [3] [4] 下一页 没有相关教程
|