??xml version="1.0" encoding="utf-8" standalone="yes"?>
按照lg化的E序设计的思想Q复杂的应用E序被设计成一些小的,功能单一的组件模块,q些lg模块可以q行在同一台机器上Q也可以q行在不同的机器上?
阅读全文
]]>
]]>
USACO
http://ace.delos.com/usacogate
国著名在线题库Q专门ؓ信息学竞赛选手准备
TJU
http://acm.tongji.edu.cn/
同济大学在线题库Q唯一的中文题库,适合NOIP选手
ZJU
http://acm.zju.edu.cn/
江大学在线题库
JLU
http://acm.jlu.edu.cn/
吉林大学在线题库Q一直上不去Q?
PKU
http://acm.pku.edu.cn
北京大学在线题库
URAL
http://acm.timus.ru
俄罗斯乌拉尔大学在线题库
SGU
http://acm.sgu.ru/
俄罗斯圣萨拉托夫州大学在UK?
ELJ
http://acm.mipt.ru/judge/bin/problems.pl?lang=en
俄罗斯莫斯科物理技术学?
SPOJ
https://spoj.sphere.pl/
波兰g斯克理工大学
UVA
http://acm.uva.es/
西班牙的Universidad de Valladolid在线?
]]>
]]>
]]>
]]>
]]>
可能你是公司里唯一谙熟某项关键技术的高手Q缺了你Q公怾玩不转了Q也可能你所在的公司对你现有的专业技能高枕无忧,认ؓ你在L内以胜d司给你的开发Q务(当然׃会再花银子去培训你啦Q?br>不要告诉我你们公司对原来用VB3开发的业务处理pȝ很满意,而你呢,也认己除了用C语言开发程序以外,不会再去做别的什么事情?br>你是不是?NET和JavaZ夺开发工具市场撕破脸皮而熟视无睹,你是不是对XML要取代关系数据库而无动于衷以及不屑一。你是不是认Z能用汇编或C开发Q何东西,所以觉得其它开发工具都不再重要……
如果真是q样Q那么你d业的日子不远了,
俗话?-未雨l缪……
想一惛_果你现在׃没有工作会怎么P
想一想现在还有如此之多的弟兄们ؓ了找一个饭而四处奔波?
想一惛_果现在你们公ؓ了抢占市场,H然要进行技术{向,你该怎么办?
想一想你现在Z自己的前途,H然需要改变技术领域,你该怎么办?或者你不满于现在自己的知识结构,惌再充实一下,但又不知选择那些内容来学习。那么l往下看Qƈ一起参加讨论吧Q相信会有收L?
在h才招聘市场,Zl理们关注的是实际技能,要求现在和将来从事开发工作所需要的实际技能。作Z个技术开发h员,自己的知识结构是׃和保持自w岗位的关键。此外还有一点也很重要,那就是即便你不再从事或者寻求实际的开发工作,也必d可能多地了解和熟悉当今你所从事的领域中最前沿的技术和信息Q只有这h能跟上技术发展的步伐。以便自己始终处于不|之地?br>本文列出了当今计机软g开发和应用领域最重要十种关键技术排名,如果你想保证你现在以及未来的几年不失业,那么你最好跟上这些技术的发展。虽然你不必对这十种技术样L通,但至应该对它们非常熟悉?/p>
一、XML
在十U技术中Q最重要的一U技术我惛_该非XML莫属。这里不仅仅指XML规范本nQ还包括一pd有关的基于XML的语aQ主要有XHTMLQXSLTQXSLQDTDsQXML SchemaQXSDQ,XPathQXQuery和SOAP。如果你现在q对XML一无所知,那么赶快狂补吧。XML是包含类gHTML标签的一个文本文Ӟ在这个文件中定义了一个树型结构来描述它所保存的数据?br>XML最大的优点是你既可以在q个文本文g中存储结构化数据Q也可以在其中存储非l构化数据——也是_它能包含和描q?_糙?文档数据Q就象它描述"规则?表格数据一栗?
XHTML是目前编写HTML的首选方法;因ؓXHTML本n是格式良好的XMLQ与通常畸Ş的HTML文档相比Q?XHTML格式文档更容易处理?
XSLT和XSL是对XML文档q行转换的语a。它们可以将XML文档转换成各U格式,比如另一个文本文件、PDF文g、HTML文g、逗号分割的文Ӟ或者{换成其它的XML文档?
DTDs 和XML Schema用来描述XML文g所包含的数据内容的cdQ你不用编写定制的代码p对XML文档的内容进?有效?查,使内容强行遵守给出的规则?
XPath ?XQuery是查询语aQ用它们可以从XML文档中吸取单个的数据Ҏ者数据项列表。XQuery的功能特别强大,因ؓ它对XPath查询q行了扩展。实际上QXQuery和XML的关pd像SQL之于关系数据库一栗?
SOAP是Web services间进行通讯的标准协议。你不必知道SOAP协议的所有细节,但是你应该熟悉其常用规则及其工作原理Q这样你才能使用它?
二、Web Services
Web服务是XML行后的直接产物。因为XML可以描述数据和对象,XML大纲可以保证XML文档数据的有效性,因ؓXML的基于文本的规范Q因而XML文档极其适合于作ZU跨q_通讯标准的基本格式。如果你q没有接触过Web服务Q那么过不了多久你肯定会到它,所以必ȝl掌握Web服务Q最好是_N它Q因为它是迄今ؓ止应用程序间跨不同种cL器、语a、^台和位置通讯的最单的一U方式。不你需不需要它QWeb服务都会是将来互用性的主要势?br>XML工作l的John Bosak曾说q:"XML使得Java有事可做"Q那么,我们也可以说QWeb服务使得所有语a都有事可做。Web服务让运行在大型Z的COBOL应用E序与运行在手持讑֤上的应用E序怺沟通;让Java应用与.NET服务器相互通讯Q让桌面应用与Web服务器进行无~交互,不但为商业数据处理,同时也ؓ商业功能提供了方便的实现——ƈ且这U实C语言、^台、和位置无关?/p>
三、面向对象编E?br>许多E序员仍然认为OOP乃技术的象牙之塔Q但是细l想一下过dq里在面向对象领域里占据q统d位的开发语a之后Q你׃会这么认ZQOOP理念从Smalltalk开始,然后蔓g到C++和PascalQDelphiQ,到Java成ؓ真正的主,几年之后QVB.NET ?C#的出现可以说是OOP发展Cd造极的地步。虽然用这些语a不必了解OOP的概念,但如果你~Z一些OOP的基本知识和ҎQ我想你很难在逐渐疲Y的就业市Z扑ֈ工作?/p>
四、Java, C++, C#, VB.NET
如果你热衷于技术,q且热爱~程Q那么我想你应该L玩{q些高语言Q我说的玩{q不一定要你成U编E高手。而是能看懂用q些语言~写的代码即可。如果你q有_֊用它们编码那更好了。其实这U机会甚。但是看代码的机会很多,学习~程的最有效的一U方式就是看源代码——浩如烟L源代码中很多都不是用你所钟爱的开发语a~写的?br>在过ȝ几年里,各个语言功能的发展基本上都差不多。现在你完全可以用VB.NET来写Windows服务、Web应用或者命令行E序。即使你只用其中的一U语a写程序。我认ؓ也完全有必要学习另外一U语aQ自己能阅d理解它们现有的例子代码,q且能将一U语a~写的代码{换成你首选的~程语言代码。这里列出的四种语言可谓是一个强大的开发语a工具,如果你掌握了它们Q毫无疑问你一定是一个众ZԒ慕的高手。这里我要声明一下:那就是我q没有要忽略和排除其它的高语言Q如QFORTRAN、COBOL、APL、ADA、Perl和Lisp{等Q根据你所从事的领域不同,应该选择适合的语a和工兗?/p>
五、javascript
Java 和javascript两者的名字管很类|但它们之间ƈ没有什么关pRؓ什么一U脚本语a会如此重要,以至于将它列入十U关键技术之一呢?仔细想一下就知道了,目前所有主的览器都使用javascript。如果你要编写Web应用E序Q那么javascript不可或缺。此外,javascriptq能作ؓ一U服务器端的脚本语言Q如它嵌入在ASP、ASP.NET中,或者嵌入XSLT来扩展功能。目前javascript在Mozilla/Netscape中是Ȁzd于XUL界面的首选语aQ它zZActionScriptQ成为Flash MX应用的编E语a。还有就是javascript极有可能成ؓ未来新设备的脚本语言以及L应用的宏语言?br>相比之下QVBScript虽然在微软的产品中得到很好的支持Q但从长q来看,没有q象表明它会有美好前途。微软自己都向于用javascriptQ或者用由javascriptz的JScriptQ来~写其客L脚本代码。因此,如果你要选择脚本语言Q非javascript莫属?/p>
六、Regular Expressions
从所周知Q关pL据库的查询用SQLQ搜索XML文档用XPath 和XQueryQ而正则表辑ּ则用来搜索纯文本。例如,你可以用一个命令来查找或删除HTML格式文g中的注释内容。大安用过"IndexOf"?InStr"以及"Like"q些内徏在javascript或VB中的文本搜烦函数Q这些函数虽然很Ҏ使用Q但是它们的功能却无法与正则表达式同日而语——现在每一U主的开发语a都提供对正则表达式的存取。尽有为正则表辑ּ本n的读写艰涩难懂,但毕竟它的功能强大,使用它的领域也越来越多?/p>
七、Design Patterns
像OOP通过创徏和分cd象来化编E一P设计模式普通的对象交互分类成指定的模型Q这是一个从一般到具体的过E。OOP的成分用得多Q设计模式就昑־有用武之地。所以你必须理解它们Q跟上其M理论的发展?/p>
八、Flash MX
当你需要比HTML和CSS所能提供的更多的客L囑Ş和编E能力时QFlash是最佳选择。在Flash中编E比用Java应用或?NET代码来得快得多,也容易得多?br>在最新版本中QMXQ,Flash不仅可以d和进行动L包,它还是个高度的可~程应用环境。具备强大的与SOAP Web服务沟通的能力Q可以调用运行在q端服务器上的ColdFusion、Java?NET代码。可以说Flash几乎无处不在Q包括手持设备、置盒、甚x新的qx电脑Q你到处都可以见到它的n影,所以用它实际上可以扩展和延你的应用E序使用领域?/p>
九、Linux/Windows
q是当今PCs机操作系l的两大阵容Q如果你惛_计算业里P׃定要熟悉它们。对于LinuxQ最好能自己安装Q配|,下蝲它的囑Ş用户界面以及一些应用程序。自己安装Apacheq会~写Web应用E序。要清醒地认识到q个世界除了Windows之外Q还有Linux的存在。ƈ且这U局面将会长期存在。反q来Q如果你是一个死忠的Linux开发者,不要再l对Windows的憎Ӟ要相互学习,取长补短Q看看Windows有什么好的东东可以采U뀂记住Windows仍然是桌面之王?br>谁也说不准你们公总么时候会军_从Linux转向WindowsQ或者从Windows转向Linux。谁也说不准什么时候你会蟩槽跑到另外一个用不同^台的公司上班——或者即便不xQ也有可能在不同q_上开始另外一个杀手目——所以最好在每个q_上都U篏一些经验,而不要在一|上吊歅R?/p>
十、SQL
管SQL在当今众多的技术中已不是什么新东西Q而且在未来的十年里它的作用很有可能被削弱Q甚x个被淘汰Q但它仍然是一U基本技能——别看它是一U基本技能,至今仍有许多开发h员不懂什么是SQL或对它了解不多。不要指望基于图形用L面的SQL构造器会帮你的忙,q是自己亲手写SQL查询吧,定你掌握了SQL的基本语法。现在理解了SQLQ不仅对以后学习XQuery有所裨益Q而且可以使你很快扑ֈ化或改进当前开发项目的途径?br>
目前Q?span>Matlabq泛的应用于自动控制、数学运、信号分析、图像处理、胦务分析等各行各业?span>MATLAB也存在着某些~点Q?span>Matlab是一U解释性语aQ其特点是以矩阵为基本数据结构,D其执行效率相?span>C?span>C+ +语言要低很多Q因?span>MatlabE序不能q其环境运行,故不能直接用于商用Y件的开发。与此相反,VC++׃其丰富得人机界面Q高效的执行效率已经成ؓZWindowsq_下开发商业Y件的必备工具。然而,VC++对于复杂的数D就有点“力不从心”了。所以将VC++?span>Matlab完美的结合,发挥各自的优势具有现实意义。自Matlab6.5版本开始,新推出来?span>Combuilder支持把用Matlab~写的程序做?span>comlgQ供其他语言调用。该Ҏ实现单,通用性强Q成?span>VC?span>Matlab混合~程最有效的方法?/span>
1 VC?span>Matlab混合~程的方?/span>
1.1 通过Matlab Engine方式
Matlab Engine是指一l?span>Matlab提供的接口函敎ͼ支持C语言Q?span> Matlab Engine采用C/S(客户?span>/服务?span>)模式Q?span>Matlab作ؓ后台服务器,?span>CE序作ؓ前台客户机,通过Windows的动态控件与服务器通信Q向Matlab Engine传递命令和数据信息Q从Matlab Engine接受数据信息。用户可以在前台应用E序中调用这些接口函敎ͼ实现?span>Matlab Engine的控制。采用这U方法几乎能利用Matlab全部功能Q但是需要在机器上安?span>Matlab软gQ而且执行效率低,因此在实际应用中不采用这U方法,在Y件开发中也不可行Q这U模式只适合个h使用或做演示?span>
1.2 直接调用Matlab?span>C/C++数学函数?/span>
Matlab中提供了可以?span>C/C++语言调用?span>C/C++数学函数库,其中包含了大量用C/C++语言重新~写?span>Matlab数学函数Q这些函数涉及到UŞ代数、数值分析、傅立叶变换、多式计算、解微分方程{,q且函数库中提供了大量各U矩阉|作函敎ͼ?span>VC中可以直接用这些函敎ͼ通过q些函数可以?span>VC中方便的实现?span>Matlab中矩阵运功能。用q种Ҏ可以很灵zȝ调用Matlab来编写应用程序,但要求读者对C/C++语言非常熟悉Qƈ且这U模式不能包括所有的Matlab函数Q尤其是无法充分使用Matlab提供的详的l图函数?/span>
1.3 ?span>Matlab自带?span>Matlab Compiler
Matlab Compiler的作用是?span>m文g转化?span>C/C++代码Q也是通常所用的mcc命oQ?span>,q种源代码需要用C/C++~译器编译连接成独立应用E序Q在?span>m文g转成独立应用E序的过E中生成?span>C/C++文gQ原则上是可以被其它?span>C/C++代码调用的,~译器可以通过讄mcc命o的选项Q将m文g~译成动态链接库文g?span>C/C++文g、可执行文g{一pd文g。到matlab R21.1为止Q?span>Matlab Compiler?span>mE序转换?span>C/C++代码功能有很多限Ӟ
⑴不能{换脚?span>m文gQ只能{?span>m函数Q?span>
⑵不能?span>matlab对象Q?span>
⑶不能用input或?span>eval操作matlabI间变量Q?span>
⑷不能动态地命名变量Q然后用load或?span>save命o来操作;
怸能处理具有嵌套调用其?span>m文g?span>m文gQ?span>
⑹不能?span>MATLAB内联函数Q?span>
1.4 使用matcom工具
q是W三ҎӞ很小(
⑴{换过E简?span>(?span>matcom工具自动实现)Q容易实玎ͼ
⑵可以方便的生成动态链接库文g(dll)和可执行文g(exe)Q?span>
⑶不仅可以{换独立的脚本文gQ也可以转换嵌套脚本文gQ?span>
⑯|环境后Q可以?span>Matlab的工L函数Q?span>
?span>matcom也有以下不Q?span>
⑴对struct{类的支持有~陷Q对class数据cdQ?span>
⑵部分绘图语句无法实现或得不到准图象,其是三l图象;
⑶当涉及到的复杂函数调用时嵌套的文g数量很多?span>
因此在不涉及Cl做图以?span>m文g不大的情况下推荐使用?/span>
1.5 使用Matlab?span>Combuilde工具
COM?span>component object module的简Uͼ它是一U通用的对象接口,M语言只要按照q种接口标准Q就可以实现调用它?span>Matlab6.5新推出来?span>Combuilder是把用Matlab~写的程序做?span>comlgQ供其他语言调用。该Ҏ实现单,通用性强Q而且几乎可以使用Matlab的Q何函?span>(注意Q不支持脚本文gQ脚本文件用时要改为函数文?span>)Q因此在E序较大、调用工L函数或调用函数较多时推荐使用Q这也是Matlab公司推荐的用方法?/span>
2 ZCOM接口?span>Matlab?span>VC混合~程实现FFT转换
2.1 创徏Matlab源文?/span>
?span>Matlab中实?span>FFT转换只需要一个函数即可?/span>
(1) 新徏M文gQ在M文g中输入以下两条语句:
Function FFT(X,Y) %实现FFT转换。函数名?span>FFTQ?span>x入参敎ͼy出参?/span>
Y=fft(X); %fft转换实现函数
(2Q保存ؓFFT.m ?span>M文g?/span>
2.2 ?span>Matlab下创?span>COMl徏
(1Q在matlab command window输入如下命oQ?/span>
>>comtool
(2Q出?span>com~辑界面后,选择File->New Project建立新工E?span>testfftQƈ?span>FFT.m加入到新建工E中?/span>
(3Q点?span>Build->COM Object…生成COMlg?/span>
xcomlg已经?span>matlab做好Q默认的保存位置为:matlab安装位置\work\component?/span>
2.3 VC下调?span>COMlg
(1Q将testfft_idl.h ?span>testfft_idl_i.c文g拯?span>VC建立的工E目录下。两文g默认目录?span>\work\component\src
(2Q将目录/extern/include/下的mwcomtypes.h文g拯?span>VC建立的目录下?/span>
(3Q将上面三个文g加入VC工程Q工E?span>->d工程->FilesQ选择刚刚拷到目录下的testfft_idl.h ?span>testfft_idl_i.c文g?/span>
(4) 为程序添加头文gtestfft_idl.h ?span>testfft_idl_i.c?span>mwcomtypes.h
(5Q填写调?span>COMlg代码Q?/span>
if(FAILED(CoInitialize(NULL))) //初始化调?span>com
{
AfxMessageBox("unable to initialize COM");
}
Itestfft *st=NULL;
HRESULT hr=CoCreateInstance(CLSID_testfft,NULL,CLSCTX_ALL,IID_Itestfft,(void **)&st);
if(SUCCEEDED(hr))
{
VARIANT x,y;
VariantInit(&x);
VariantInit(&y);
x.vt=VT_I4;
x.lVal=4;
st->fte(x,y); //x入参敎ͼy出参?/span>
st->Release();
}
else
{
AfxMessageBox("unsucceed");
}
x实现VC下调?span>COMlg实现FFT转换?/span>
3 l论
实践表明?span>COMҎ实现VC?span>Matlab混合~程h实现单、执行效率高、几乎支持所有的matlab函数、易UL{优炏V?/span>
1 实例E序设计要点
?取得对话框标题栏位置和大,在标题栏的适当位置l制最化按钮QƈC按钮的位|?/p>
?在最化按钮所在区域检鼠标是否在该区域内、是否按下,是否发送最化消息使对话框最化Q否则不变?/p>
?最化按钮矩Ş区域向工hC条控g注册Q这样当鼠标在最化按钮矩Ş区域Ӟ昄提示文本?/p>
2 实例E序实现的步骤及说明
?准备二个位图Q一个位图表C最化按钮正常昄状态,另一个位图表C最化按钮被按下时的状态?/p>
?使用MFC AppWizard(exe)创徏工程名ؓMinButton的对话框H体Q如图所C,二个按钮位囑֯入对话框的资源里?/p>
?在CMinButtonDlg对话框类中进行变量定义和函数声明?/p>
?利用ClassWizard为对话框cL加消息WM_NCPAINTQWM_ACTIVATE和WM_NCMOUSEMOVE的消息处理函敎ͼ在这三个函数中调用成员函数DrawButton()来绘制按钮?/p>
?利用ClassWizard为最化按钮兌对应的消息WM_NCLBUTTONDOWN和消息处理函数OnNcLButtonDown(UINT nHitTest, CPoint point)?/p>
?函数DrawButton()用于l制按钮。由于最化按钮q不是一个真实的按钮控gQ而是一个画在标题栏上的位图。因此,Z在对话框H体标题上绘画,必须创徏一个窗口设备环境类Q相当于创徏一个画布,有了q个dQ才能在d上绘画,也就是才能在标题栏上l画。)
?nbsp;调用函数GetWindowDC()取得指向CDC的指?CDC* pDCQ?/p>
?调用函数 CreateCompatibleDC(CDC* pDC)创徏一个内存设备环境,以便在内存中保存位图Qƈ与指定的H口讑֤环境相兼容;
?调用函数SelectObject(CBitmap *pBitmap)Q将位图选入内存讑֤环境中;
?调用函数 BitBlt(int x, int y, int nWidth, int nHeight, CDC *pSrc, int xSrc, int ySrc, DWORD dwRop)位囑֤制到实际讑֤环境中。其中,参数x, y 表示位图目标矩Ş左上角的x, y 逻辑坐标|nWidth, nHeight 表示位图目标矩Ş的逻辑宽度和高度;pSrc 表示源设备环境CDC指针QxSrc, ySrc 表示位图源矩形的左上角的x, y 逻辑坐标|dwRop 表示昄位图的光栅操作方式。光栅操作方式有多种Q这里用的是SRCCOPYQ表C将位图直接复制到目标内存设备环境中。这里要说明一点:函数BitBlt()只能“一比一”的显CZ图,如要L~放昄位图M用函数StretchBlt()Q该函数的用方法,请参考相关书c?/p>
?位图选入内存环境中显C后Q应调用函数SelectObject(CBitmap *pOldBitmap)恢复原来的内存设备环境?/p>
?提示条实质上是一个小的弹出窗口,在窗口中昄一行文本,用来描述工具Q或区域Q的用途或其它信息。在MFC中提供了工具提示条控件类CToolTipCtrlQ由它来理提示条。在q里Q我们从CToolTipCtrlcL生子cCToolTips。在子类的定义中d函数BOOL AddToolTip( UINT nID, LPRECT lpRect, LPCTSTR lpszText)Q该函数用于向工hC条控g注册按钮区域和提C文本,当鼠标在最化按钮区域Ӟ昄提示文本?/p>
3 主要的程序代?/p>
?在对话框cM定义相应的变量和函数声明
class CMinButtonDlg : public CDialog
{
…………
public:
CRect m_rtButtMin; //记录最化按钮位置
void DrawButton(); //l制最化按钮
BOOL m_BMPPressed;//最化按钮状态标?/p>
CRect m_ButtMinTips;//记录最化按钮区域
protected:
CToolTips m_ToolTip;//定义工具提示条控件变?/p>
void GetMinButRect();//获取最化按钮所在区?/p>
//消息处理函数
afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
afx_msg void OnNcPaint();
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
…………
}Q?/p>
?对话框类中三个消息处理函数定义如下:
//对应消息WM_NCPAINT的消息处理函?/p>
void CMinButtonDlg::OnNcPaint()
{
CDialog::OnNcPaint();
DrawButton(); //l制最化按钮
}
//对应消息WM_ACTIVATE的消息处理函?/p>
void CMinButtonDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CDialog::OnActivate(nState, pWndOther, bMinimized);
DrawButton(); //l制最化按钮
}
//对应消息WM_NCMOUSEMOVE的消息处理函?/p>
void CMinButtonDlg::OnNcMouseMove(UINT nHitTest, CPoint point)
{
DrawButton(); //l制最化按钮
CDialog::OnNcMouseMove(nHitTest, point);
}
?l制最化按钮的函?/p>
void CMinButtonDlg::DrawButton()
{
CDC* pDC = GetWindowDC();
CDC* pMemDC=new CDC;
CBitmap *pBitmap1=new CBitmap;
CBitmap *pBitmap2=new CBitmap;
CBitmap *pOldBitmap;
CRect rtWnd, rtButtons, rtTitle;
//创徏一个内存设备环?/p>
pMemDC->CreateCompatibleDC(pDC);
if(!pDC) return;
GetWindowRect(&rtWnd);
//取得标题栏的矩Ş
rtTitle.left = GetSystemMetrics(SM_CXFRAME);
rtTitle.top = GetSystemMetrics(SM_CYFRAME);
rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXFRAME);
rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYSIZE);
//计算最化按钮的位|,位图大小?5X15
rtButtons.top=rtTitle.top+1;
rtButtons.bottom=rtButtons.top+15;
rtButtons.right = rtTitle.right-20;
rtButtons.left = rtButtons.right-15;
m_rtButtMin = rtButtons;
pBitmap1->LoadBitmap(IDB_BITMAP1); //调入正常状态按钮的位图
pBitmap2->LoadBitmap(IDB_BITMAP2); //调入按钮按下状态的位图
m_rtButtMin.OffsetRect(rtWnd.TopLeft());//记录最化按钮的位|?/p>
//按钮位图调入内存设备环境中Qm_BMPPressed为TRUE
//调入正常状态按钮的位图
pOldBitmap=pMemDC->SelectObject(m_BMPPressed ? pBitmap1: pBitmap2);
//按钮位囑֤制到实际的内存设备环境中
pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(),
rtButtons.Height(), pMemDC, 0, 0, SRCCOPY);
pMemDC->SelectObject(pOldBitmap);//恢复原来的内存设备环?/p>
//释放资源
ReleaseDC(pMemDC);
ReleaseDC(pDC);
delete pMemDC;
delete pBitmap1;
delete pBitmap2;
}
?对应鼠标左键的WM_NCLBUTTONDOWN消息处理函数
void CMinButtonDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
CDialog::OnNcLButtonDown(nHitTest, point);
//是否在最化按钮区域内按下按?/p>
if (m_rtButtMin.PtInRect(point))
{
m_BMPPressed=FALSE;//l制按钮按下时的状?/p>
DrawButton(); //l制最化按钮
m_BMPPressed=TRUE;//l制按钮的正常状?/p>
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));//发送最化消息
}
}
?//在最化按钮区域实现提示文本
BOOL CToolTips::AddToolTip( UINT nID, LPRECT lpRect, LPCTSTR lpszText )
{
TOOLINFO Tips;
memset(&Tips, 0, sizeof(TOOLINFO));
Tips.cbSize = sizeof(TOOLINFO);
Tips.hwnd = GetOwner()->GetSafeHwnd();
Tips.uFlags = TTF_SUBCLASS;
Tips.uId = nID;
memcpy(&Tips.rect, lpRect, sizeof(RECT));
Tips.lpszText = (LPSTR)lpszText;
return (BOOL)SendMessage(TTM_ADDTOOL, 0, (LPARAM)&Tips);
}
?在对话框初始化函数OnInitDialog()中添下列代码Q?/p>
m_ToolTip.Create(this,TTS_ALWAYSTIP);//创徏工具提示控gQTTS_ALWAYSTIP表示Q?/不论控g所属窗体是否活动,提示条始l有?/p>
GetMinButRect();
ScreenToClient(&m_ButtMinTips);//屏幕坐标转换为窗体坐?/p>
m_ToolTip.AddToolTip(1,&m_ButtMinTips,"最化");
在设计数据库Ӟ最重要的步骤是要确保数据正分布到数据库的表中。用正的数据l构Q可以极大地化应用程序的其他内容Q查询、窗体、报表、代码等Q。正进行表设计的正式名U是“数据库规范化”?/p>
本文要介l数据库规范化的基本概念和一些需要注意ƈ力求避免的常见问题?/p>
在设计表之前Q应明确您打如何处理数据,q要了解随着旉的推UL据会发生什么样的变化。您所做的假设会影响最l的设计?/p>
设计应用E序Ӟ关键要了解设计的最l结果,以便保您准备好所有必需的数据ƈ知道其来源。例如,报表的外观、每个数据的来源以及所需的所有数据是否都存在。对目损失最大的莫过于在目后期发现重要报表~少数据?/p>
知道需要什么样的数据后Q就必须定数据的来源。数据是否从其他数据源中导入Q数据是否需要清理或验证Q用h否需要输入数据?
明确所需数据的类型和来源是数据库设计的第一步?/p>
用户是否需要编辑这些数据?如果需要,应如何显C数据以便于用户理解和编辑?有没有验证规则和相关的查找表Q要求对~辑和删除保留备份的数据输入有没有相兌的审栔R题?需要ؓ用户昄哪些摘要信息Q是否需要生成导出文Ӟ了解q些信息后,可以想象字D之间是如何怺兌的了?/p>
数据分l放入相兛_D(例如与客L关的信息、与发票相关的信息等Q,每个字段l都代表要徏立的表。然后考虑如何这些表怺兌。例如,哪些表具有一对多关系Q例如,一个客户可能持有多张发)Q哪些表h一对一关系Q这U情况下Q通常会考虑其l合C个表中)Q?/p>
设计表之后,常常会由于没有考虑旉的媄响而导致以后出C重问题。许多表设计在当时用时效果非常好,但是Q常怼因ؓ用户修改数据、添加数据以及随旉的推U而崩溃。开发h员经怼发现需要重新设计表的结构来适应q些变化。表的结构发生变化时Q所有相关的内容Q查询、窗体、报表、代码等Q也必须随之更新。理解ƈ预测数据会随旉推移发生哪些变化Q可以实现更好的设计Q减问题的发生?/p>
了解如何分析和管理数据同样很重要。您应该深刻理解查询的工作原理,理解如何使用查询在多个表之间链接数据Q如何用查询对数据q行分组和汇总,以及如何在不需要以规范化格式显C数据时使用交叉表查询?/p>
好的数据设计的最l目标就是要q两个需要:既要随着旉的推UL效地存储数据Q又要轻村֜索和分析数据。理解查询的功能Ҏ设计表很有帮助?/p>
q部分介l数据库规范化所涉及的基本概念,而不是对数据库规范化q行理论性的探讨。如何在您的实际情况中应用这些概念可能会随着应用E序需要的不同而有所变化。这部分的目的是理解q些基本概念、根据实际需要应用它们,q理解偏这些概念将会出现哪些问题?/p>
大部分数据库开发h员都理解数据库规范化的基本概c理x况下Q您希望相同的数据存储在同一个地方,q在需要引用时使用 ID 来进行引用。因此,如果某些信息发生了变化,则可以在一个地方进行更改,而整个程序中的相应信息也会随之更攏V?/p>
例如Q客戯会存储每个客L记录Q包括姓名、地址、电话号码、电子邮件地址以及其他特征信息。客戯中可能包含唯一?CustomerID 字段Q通常?Autonumber 字段Q,q个字段卌表的主键字段Q其他表使用它来引用该客戗因此,发票表可以只引用客户?ID |而不是在每张发票中存储客L所有信息(因ؓ同一个客户可能会持有多张发票Q,q样利用客户?ID 值即可从客户表中查找客户的详l信息。?Access 中功能强大的H体Q用组合框和子H体Q,可以L地完成这工作。如果需要修改客户信息(例如新增电话LQ,只需在客戯中修改,应用E序中引用该信息的Q何其他部分都会随之自动更新?/p>
使用正确规范化的数据库,通过单的~辑卛_L处理数据随时间推U而发生的更改。用未正确规范化的数据库,通常需要利用编E或查询来更改多条记录或多个表。这不仅会增加工作量Q还会增加由于未正确执行代码或查询而导致数据不一致的可能性?/p>
理想的数据库应该只需要随着旉的推UL加新的记录,数据库表应该能够保存大量记录。但是,如果您发现需要增加更多字D,则可能会到设计问题?/p>
电子表格专家l常会遇Cq问题,因ؓ他们习惯于按照设计电子表格的方式设计数据库。设计经帔R旉变化的字D(例如Q年、季度、品和销售h员)需要在来d新字Dc而正的设计应该是{换信息ƈ随旉变化的数据放在一个字D内Q这样就可以d更多记录。例如,只需创徏“q?#8221;字段Q然后在该字D中输入各记录相应的q䆾值即可,无需为每q创Z个单独的字段?/p>
增加额外的字D可能会产生问题Q因l构的变化会对应用程序的其他部分产生影响。在表中d更多字段Ӟ依赖该表的对象和代码也需要更新。例如,查询需要获取额外的字段Q窗体需要显C些字D,而报表则需要包含这些字D,{等。但是,如果数据已经规范化,则现有对象会自动索新数据Qƈ正确计算或显C些数据。查询功能尤其强大,因ؓ它允许您?#8220;q?#8221;字段q行分组Q以逐年昄摘要Q不表中包含哪些年份)?/p>
但是Q数据规范化q不意味着不能昄或用随旉而变化或依赖旉的字Dc需要浏览或昄q类信息的开发h员通常可以使用交叉表查询来辑ֈq一目的。如果您不熟悉交叉表查询Q应该学习如何用它们。虽然它们与表有所不同Q尤其是用户无法~辑交叉表查询的l果Q,但它们的可以用于在数据表中昄信息Q最多可以达?255 个字D)。如果要在报表中使用它们Q则会更加复杂,因ؓ报表需要包含额外的或不断变化的字段名。这是Z么大多数报表数据作为独立的分组Q而不是独立的列)昄的原因。对于那些别无选择的情况,您必花旉去解册个问题。希望所有h都能够理解这U决定会随着旉的变化对其他资源产生的媄响?/p>
q就是ؓ什么增加记录是免费的(q是数据库的巨大优势Q而增加字D|如此昂贵的原因。如果数据库设计正确Q则可以适应各种各样的变化?/p>
有时数据需要反规范化,以便保存可能会随旉变化的信息?/p>
在通过客户 ID 号将发票链接到客戯的简单示例中Q我们可能需要保留开出发时的客户地址Q而不是制作发时的地址Q因为客户信息在q两个事件之间可能会有所变化Q。如果开出发时未保留客户地址Q而将来又必须更新客户信息Q则可能无法定发送某些发的切地址。这可能会导致非怸重的商业问题。当Ӟ有些信息Q如客户的电话号码)可以不保存。因此,应该有选择地决定需要复制哪些数据?/p>
需要复制数据的另一个例子是填写发票的明l项。报价单通常用于挑选客戯购的商品。我们可以只存储报h?IDQ?ID 指向包含产品说明、h格和其他详细信息的报价单。但是,产品说明和hg随着旉而改变。如果不数据从报h单复制到明细表中Q将来则无法准确地重新打印原始发。如果您未收到付款Q问题将非常严重?/p>
因此Q虽然规范化可以相同的数据很好C存在一个地方ƈ能简化编辑工作,但某些情况下却不需要这些优ѝ如果以后由于历史原因需要数据的快照Q则必须从一开始就在数据库中设计好。否则,一旦数据被覆盖无法再扑֛?/p>
Z提高效率Q每个表都应该有一个主键字Dc主键字D定义了在表中的唯一性,q由索引在其他字D中使用Q以提高搜烦性能。例如,客户表可以包含ؓ每个客户定义唯一~号?CustomerID 字段。ؓ了便于讨论,假定表中包含多个字段Q而不仅仅是简单的单一表查找(例如国家/地区列表Q?/p>
一般来_主键字段应具有如下特征:
鉴于上述原因Q我们徏议在大部分表中?AutoNumber 字段作ؓ主键字段。通过使用l合框和隐藏列,可以字D늻定到 AutoNumber 字段q将光藏,使用h法看到?/p>
对表q行定义q理解各表是如何兌的之后,L保添加引用完整性来巩固各表之间的关pR这样可以避免错误地修改链接字段而留下孤立的记录。Microsoft Jet 数据库引擎支持复杂的引用完整性,允许用户q行U联更新和删除。一般情况下Q不应修?ID 字段。因此,U联更新用得较少Q但U联删除却非常有用?/p>
例如Q如果发表与订单表相关联,其中的一张发可能有无限多个订单Q明l项Q,q且每个订单记录包含它所链接的发编P则可以用联删除操作来删除发票记录Qƈ自动删除所有相应的订单记录。这样可以避免出现没有相应发记录的订单记录?/p>
我们希望您能快这些数据库设计概念应用到您的应用程序设计中Q从而最大程度地减少问题Q减未实现此类设计旉要进行的修正。祝您好q?/p>
宁可q度慢些Q也要保证每个环节的质量Q以Nq利益?/p>
人员理Q项目管理,可行性与需求分析,pȝ设计Q程序设计,试?/p>
软g开发中的三U基本策略:“复用”?#8220;分而治?#8221;?#8220;优化——折?#8221;?/p>
q步是应该的Q但不进步则是可ȝ?/p>
在一个新pȝ中,大部分的内容是成熟的Q只有小部分内容是创新的?/p>
面向对象QObject OrientedQ学者的口头就?#8220;请不要再发明相同的R轮子?#8221; ?/p>
具有一定集成度q可以重复用的软gl成单元UCؓ软构?Software Component)?/p>
分而治之是指把一个复杂的问题分解成若q个单的问题Q然后逐个解决?/p>
优化工作不是可有可无的事情,而是必须要做的事情。当优化工作成ؓ一U责LQ程序员才会不断改进软g中的法Q数据结构和E序l织Q从而提高Y件质量?/p>
一些不正确的观念:
观念之一Q我们拥有一套讲q如何开发Y件的书籍Q书中充满了标准与示例,可以帮助我们解决软g开发中遇到的Q何问题?br>客观情况Q好的参考书无疑能指导我们的工作。充分利用书c中的方法、技术和技巧,可以有效地解册Y件开发中大量常见的问题。但实践者ƈ不能因此依赖于书c,q是因ؓQ(1Q现实的工作中,׃条g千差万别Q即使是相当成熟的Y件工E规范,常常也无法套用。(2QY件技术日新月异,没有哪一UY件标准能长盛不衰。祖传秘方在某些领域很吃香,而在软g领域则意味着落后?/p>
观念之二Q我们拥有最好的开发工兗最好的计算机,一定能做出优秀的Y件?br>客观情况Q良好的开发环境只是出成果的必要条gQ而不是充分条件。如果拥有好环境的是一庸人,难保他们不干出南辕北辙的事情?/p>
观念之三Q如果我们落后于计划Q可以增加更多的E序员来解决?br>客观情况QY件开发不同于传统的农业生产,人多不见得力量大。如果给落后于计划的目增添新手Q可能会更加延误目。因为:Q?Q新手会产生很多新的错误Qə目混ؕ。(2Q老手向新手解释工作以及交思想都要p旉Q实际开发时间更。所以科学的目计划很重要,不在乎计划能提前多少Q重在恰如其分。如果用“大跃q?#8221;的方式奔向共产主义,只会产生倒退的后果?/p>
观念之四Q既焉求分析很困难Q不三七二十一先把软g做了再说Q反正Y件是灉|的,随时可以修改?br>客观情况Q对需求把握得准,软g的修修补补就少。有些需求在一开始时很难定Q在开发过E中要不断地加以Ҏ。Y件修改越早代仯,修改晚代h大Q就跟治病一样道理?/p>
E序设计是自׃快乐的事情,不要发誓忠于某某M而自ȝ恹{?/p>
p|的技巧通常是技?
开发h员应该意识到Q所有的错误都是严重的,不存在微不道的错误。这h能少犯错误?/p>
理的目的是让大家一h工作做好Qƈ且让各h获得各自的快乐和满。当一个组l被地领导时Q雇员甚至不知道他们已被领导。在目完成Ӟ他们会自豪地_“看看我们通过努力取得的成l吧”。所以管理者不能老惦记着自己是一个官Q而应时刻意识到自己是责Q的主要承担者?/p>
真正的程序员都有如下U性:
一、诚?br>E序员在学习与工作期间几乎天天与机器打交道,压根没有受ƺ骗或欺骗h的机会。勤奋的E序员在调试无穷多的E序BugӞ已经深深地接受了“诚实”的教肌Ӏ不诚实的hQ他肯定不想做、也做不好程序员?br>二、简单——实用主?br>目前即最先进的计机也不具备Q程序员的基本工作就是把复杂的问题{化ؓ计算处理的简单的E序。如果一个问题复杂到q程序员自己都不能理解,他就无法~出E序让更W的计算机来处理。所以程序员信奉“单——实?#8221;M?br>三、爱憎分?br>E序员大都喜Ƣ技术挑战,不喜Ƣ搞试与维护。高水^的程序员喜欢与高水^的程序员一起工作,因ؓ他们?#8220;与臭{下棋Q棋下臭”。程序员大都厌恶拉帮l派、耍政L腕。不信,CC认识的程序员Q有几个是党zh士?
四、工作单调但不乏?br>有h问编E大师:“E序设计的真正含义是什?Q?#8221;
大师回答_“饿了的时候就吃,困的时候就睡,只要时机恰当p行程序设计?#8221;
其实E序员的生活和工作已融ؓ一体,管单调却不乏味Q还能独享孤独。有诗ؓ证:
我编E三?br> 两耳不Mh?br> 只有盘在歌?/p>
l论Q优U的程序员没有理由不让人喜Ƣ,他们q比怪僻来得可爱?/p>
微Y公司在选择l理人员ӞL把他们的技术知识和q用技术去赚钱的能力放在首位?/p>
比盖曾这hq聪明:明h一定反应敏P善于接受C物。他能迅速进入一个新领域Q给你一个头头是道的解释。他提出的问题往往一针见血、击中要実뀂他能及时掌握所学知识,q且博闻Q他能把本来认ؓ互不相干的领域联pd一起问题得到解决。他富有创新_与合作精?#8230;…
好的E序l理应该具备以下几个条gQ?br>一、技术水qxE序员队伍中的最高?br>每个E序员骨子里头都有一股傲气,如果你不能技压群雄,他们׃会听你指挥。一个技术水q差的d为程序经理真是个悲剧Q就象一个略有权势的太监Q表面上有h对他点头哈腰Q背后却被h鄙视?br>二、能做最多且最隄工作
E序l理~程要快且好。别q一天的z,他半天就能做完,q样才会有精力去搞管理。程序经理应负责pȝ分析、系l设计这cL隄开发工作,q指g同水q的E序员把各自的工作做好。如果h手不够,E序l理要能同时q几个h的活?br>三、有人格力
软g开发是智力创作q程Q你不能指望仅通过执行规章制度来生好的作品。很多Y件公司的E序l理都不是管理专业出w的Q他们也不可能ؓ了搞好管理而成天玩弄心机。技术出色的E序l理一般少有心术不正的Q所以管理的重点应是“以n作则”?#8220;公正待h”。如果程序经理在上班时趴在桌上睡觉,其他E序员也会这样干。如果程序经理发现有两个E序员趴在机器旁睡觉Q不能只对其中一个大声吼叫:“你一~程想睡觉Q看看hӞ在睡觉时都想着~程?#8221;
如果理者没有h格魅力,没有h信服你,团队׃会有凝聚力,乌合之众不可能开发出优秀的Y件?br>l论Q一个有zd的Y件公司的各l理都不会这h叹,“因ؓ我啥也不会干Q所以只好当领导?#8221;
在Y仉域,技术的力量是无ILQ一天之内就可整个产业发生巨变?/p>
好兵好将都不是天生的Q是后天l出来的Q既要学会冷静地分析问题Q又要充满激情地d作?/p>
{制度q不限制自由和民主,它能让自以ؓ聪明l顶、谁也不服的Z懂得如何合作与奋斗。就象有了一架梯子,每个人才有机会爬上墙头摘下那向往已久的野花。当梯子散成一堆木时Q只可能造就几个卖炭?/p>
把技术水q_为四U,W一U最低,W四U最高。第一U技术水q的E序员主要考核~程基本功,要求质量合格Q他们主要来自刚毕业的大学生Q。第二技术水q的E序员编E质量要高,做过几个软g目Q有数年的工作经验,q能指导新手的工作。第三技术水q的E序员主要考核pȝ分析与系l设计的能力Q要求其技术有_的深度和q度。第四技术水q的E序员是成功的Y件品的设计师,他不仅技术超,q且能技术{化ؓ有h值的商品?br>把管理(q里仅指软g业务的管理,不考虑行政事务Q水q也分成四。第零最低,W三U最高。第零理水^的h没有理职务Q就是普通员工。第一U管理水q的人是开发小l的l长Q可带领几名E序员工作。第二理水^的h是项目经理。第三理水^的h军_某些产品是否要开发,以及如何d领市场?/p>
当我们在工作中碰到挫折时Q先要冷静地分析问题Q事出有因哪Q,扑և问题的内因与外因。内因是最主要的,应该予以最先解冟?/p>
“q信”是傻子碰到骗子的l果?/p>
Z不让自己“?#8221;Q善良的Z应该用脑子去多学一些知识,努力让自己来把握命运Q不要急着把一生托l某个h或某个组l?/p>
上天不可能赋于一个h太多的优点,以致于他没有表示谦虚的余地?/p>
我们在求学时可能太功利太挑剔Q导致知识结构非常单薄,只怕到了晚q也成不了大器。当E序员擅长技术时Q还要时ȝ意I补自己ƈ不擅长的非技术才能。扬长补短才能提高综合素质?/p>
人是最有h值的资源?/p>
q度安排q不见得一定要W合逻辑序。应可能地先做技术难度高的事Q后做难度低的事。也是辛苦在前Q轻村֜后?/p>
里程就象心늚灯塔Q忙碌的h不混ؕQ不q失方向?/p>
人在做一件事情时Q由于存在很多不定的因素,一般不可能100% 地达到目标。假讑^思h做事能完成目标的80%。如果某个h的目标是100分,那么他最l成l可?0分。如果某个h的目标只?0分,那么他最l成l只?8分?/p>
如果没有高目标,人的堕落很快。如果没?#8220;零缺?#8221;的质量目标,也许~陷׃成堆?/p>
软g是如此的灉|Q如果没有规范来制约Q就Ҏ因无序的喜好而导致沌;但规范如果太严密了,׃扼杀E序员生机勃勃的创造力?/p>
z是一U美!
每当我们沉迷于短期利益不思进取时Q应该好好回忆童q时代那些伟大的pQ给自己一些激励?/p>
“人分四类——h物,人才Qh手,人渣?#8221;
我曾得到很多炫目的荣誉,但学生时代的荣誉只是一U鼓励,q不是对我才能和事业的确认?/p>
“当你没法扶一个h上马Ӟ也许应该拉他下马”------李敖
Z么Y件系l分析员的工资要比普通程序员高?是因ؓ需求分析困隑֘?/p>
如果您学会了客观、科学的可行性分析,在作决策时就要果断?/p>
pȝ设计的优劣在Ҏ上决定了软gpȝ的质量?/p>
文学中有U学Q音乐中有数学,漫画中有C数学的拓扑学。Od可以“几笔”把一个hd来,不管怎么化或丑化,是zd。ؓ什么?因ؓ?#8220;几笔”不是别的Q而是拓扑学中的特征不变量Q这是事物最本质的东ѝ?nbsp; -------杨叔?/p>
体系l构是Y件系l中最本质的东ѝ?/p>
内聚QCohesionQ是一个模块内部各成分之间相关联程度的度量。耦合QCouplingQ是模块之间依赖E度的度量?/p>
技术进步最快也快不qh们欲望的增长?/p>
对象QObjectQ是c(ClassQ的一个实例(InstanceQ?/p>
ȝ可以把他的错误埋葬在C了事Q但E序员不能。我们必要学会试与改错,q且把测试与攚w工作做好?/p>
试q不仅是个技术问题,更是个职业道德问题?/p>
试只能证明~陷存在Q而不能证明缺陷不存在?/p>
攚w是个大悲大喜的过E,一天之内可以让人在悲伤的低谷和喜悦的颠C间跌荡v伏?/p>
E序中的错误只有开发者自己才能找出ƈҎ。如果因畏惧而拖Ӟ会让你终日心情不定,食无呻I睡不香。所以长痛不如短痛,要集中精力对付错误?/p>
~程大师曾说Q?#8220;哪怕程序只有三行长QL一天你也不得不对它l护?#8221;
===33===《计机E序设计艺术》第三版W二卷半值算?br>http://download.csdn.net/down/165775
===34===《计机E序设计艺术》第三版W一卷基本算?br>http://download.csdn.net/down/168064
===35===计算机程序设计艺术》第三版W三h序和查找
http://download.csdn.net/source/165459
另外提供一个包含以上三L中文?a target=_blank>http://www.gz183.com.cn/downloadpage/download_1438.htm
2006-12-28
erran
实现Ҏ一Q自定义指针扑ֈ函数参数的下一个参敎ͼ
// 例子 A Q?/span>
template<class T>
T umin(T _a, ...)
{
T _r = _a;
T* _p = &_a;
int count = 1;
while ((*_p) != -1)
{
if (_r > (*_p)) _r = (*_p);
cout << "No." << count << ": " << (*_p) << endl;
// 计算W二个参数的地址Qƈ且输地址
// 注: 在3Q位Q4字节Q机器上表现为所有的变量地址都能被4整除
// 相当?/span> _INTSIZEOF(n): ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
// 问题是用q个式子ȝQ是无法知道哪个才是最后哪个参数。所以用Q?/span> 1 做结束参数?/span>
_p = (T*)((char *)_p + (sizeof(T) + sizeof(int) - 1) / sizeof(int) * sizeof(int));
count++;
}
return _r;
}
// 调用Q?/span>
int main(int argc, char* argv[])
{
int a, b, c, d, e;
a = 1; b = 3; c = 2; d = 12; e = 34;
cout << umin<int>( a, b, c, d, e, -1) << endl;
cout << umin<int>(1, 4, 2, 5, 2, -1) << endl;
cout << umin<char>('a', 'b', 'c', 'd', 'e', -1) << endl;
return 0;
}
实现Ҏ二:利用 QNQIQ提供的三个?/span> va_argQ?/span>
va_end, va_start
来实?/span> Q?/span>
q三个宏定义在头文g stdarg.h ?/span> , 主要有: va_arg, va_end, va_start Q?/span> va_list
?/span> _WIN32 下:
typedef char * va_list;
其它的三?/span> ( 不同的^C有不太一?/span> )
/* A c at the proper definitions for other platforms */
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
其实q个Ҏ的实现原理同Ҏ一是一L?br>
// 例子 B Q?/span>
template<class T>
T umin(T _a, ...)
{
T _p = _a;
T _r = _a;
int count = 1;
va_list arg_ptr;
va_start(arg_ptr, _a);
while (_p != -1)// 所以用Q?/span> 1 做结束参数?/span>
{
if (_r > _p) _r = _p;
cout << "No." << count << ": " << _p << endl;
_p = va_arg(arg_ptr, int);
count++;
}
va_end(arg_ptr);
return _r;
}
// 调用Q?/span>
int main(int argc, char* argv[])
{
int a, b, c, d, e;
a = 1; b = 3; c = 2; d = 12; e = 34;
cout << umin<int>( a, b, c, d, e, -1) << endl;
cout << umin<int>(1, 4, 2, 5, 2, -1) << endl;
cout << umin<char>('a', 'b', 'c', 'd', 'e', -1) << endl;
return 0;
}
Ҏ一和方法二都会遇到同一个问题:那就是没有办法知道该函数中一共到底有多少个参数。因Z 没有办法d断到底哪个指针才是最后的哪个参数的地址?/span>
惛_一个解x法是在该函数最后添加一个标志参敎ͼ以标志该参数是最后一个参敎ͼ但是应该注意的是Q作为标志参数的条g是,该标志是不可能出现在此前的参数表中。如以上函数调用的最后那个参敎ͼQ?/span> 1 Q?/span>
我想 c 语言里面?/span> scanf ?/span> printf {函数应该做q一些特D处理?/span>
函数的参数地址是连l的Q但?/span> 可变参数列表提供了很大的灉|性,且对可变部分的参?span>C语言~译器不会进行类型检查,所以程序中要特别小心,必须保参数的传递和接受是正的Q而且C语言的实C依赖于cpu和操作系l,所以ƈ不适用于所有的计算机和pȝQ而且随机器的不同会由很大的区别。所?/span>
stdarg.h 定义很多宏。如Q?/span>
#if !defined(_WIN32) && !defined(_MAC)
#error ERROR: Only Mac or Win32 targets supported!
#endif
l 关于函数参数的地址
写了一下测试代码,来测试函数的参数地址是不是连l的?/span>
试代码如下 :
// 例子 C
#include <iostream>
using namespace std;
template<class T>
T umin(T _a, T _b, T _c, T _d, T _e)
{
// 输出各个参数的地址
cout << "_a : " << hex << (int*)(&_a) << endl;
cout << "_b : " << hex << (int*)(&_b) << endl;
cout << "_c : " << hex << (int*)(&_c) << endl;
cout << "_d : " << hex << (int*)(&_d) << endl;
cout << "_e : " << hex << (int*)(&_e) << endl;
// 取得最?/span>
T _r = _a;
if (_r > _b) _r = _b;
if (_r > _c) _r = _c;
if (_r > _d) _r = _d;
return _r;
}
int main(int argc, char* argv[])
{
int a, b, c, d, e;
a = 1; b = 3; c = 2; d = 12; e = 34;
cout << umin<int>(a, b, c, d, e) << endl;// 调用一
cout << umin<int>(1, 4, 2, 5, 2) << endl; // 调用?/span>
cout << umin<char>('a', 'b', 'c', 'd', 'e') << endl;// 调用?/span>
return 0;
}
?/span> VC6.0 下编译,发现Q?/span>
对于例子 C Q?/span> 在编译器不作M优化的时候(及编译选项选择 Disable(Debug) Q,对于调用一、二、三的参?/span> _a, _b, _c, _d, _e 都是q箋的。在选择优化q行速度 ( 及编译选项选择 Maximize Speed), min 的参数地址q不都是q箋的。而用对于例子 A 和例?/span> B Q两U情况都是连l的 ( 试的时候要更改相应的代?/span> ).
?/span> C Disable(Debug) |
?/span> C Maximize Speed |
?/span> A Maximize Speed |
?/span> A Disable(Debug) |
_a : 0012FF58 _b : 0012FF5C _c : 0012FF60 _d : 0012FF64 _e : 0012FF68
_a : 0012FF58 _b : 0012FF5C _c : 0012FF60 _d : 0012FF64 _e : 0012FF68
_a : 0012FF58 _b : 0012FF5C _c : 0012FF60 _d : 0012FF64 _e : 0012FF68 |
_a : 0012FF70 _b : 0012FF74 _c : 0012FF78 _d : 0012FF7C _e : 0012FF80
_a : 0012FF70 _b : 0012FF80 _c : 0012FF7C _d : 0012FF78 _e : 0012FF74
_a : 0012FF58 _b : 0012FF5C _c : 0012FF60 _d : 0012FF64 _e : 0012FF68 |
No.1: 0012FF50 No.2: 0012FF54 No.3: 0012FF58 No.4: 0012FF5C No.5: 0012FF60
No.1: 0012FF50 No.2: 0012FF54 No.3: 0012FF58 No.4: 0012FF5C No.5: 0012FF60
No.1: 0012FF50 No.2: 0012FF54 No.3: 0012FF58 No.4: 0012FF5C No.5: 0012FF60 |
No.1: 0012FF50 No.2: 0012FF54 No.3: 0012FF58 No.4: 0012FF5C No.5: 0012FF60
No.1: 0012FF50 No.2: 0012FF54 No.3: 0012FF58 No.4: 0012FF5C No.5: 0012FF60
No.1: 0012FF50 No.2: 0012FF54 No.3: 0012FF58 No.4: 0012FF5C No.5: 0012FF60 |
从伏画卦到《连山》易的出玎ͼx象的观念Q数已开始萌芽,C{联pd有筮敎ͼ主要用于占卜。春U时期,“?/span>”?/span>“?/span>”同时出现在《管?/span>·七法》篇中:“则,象,法,化,军_Q心术,计数?/span>”但象数在春秋初期仍是两个松散联系的概c到春秋末期Q象与数的概念联pL较密切,在《周?/span>·p辞传》中提到“极数定象”Q已初步出现象数理论。这Ӟ《系辞传》中只初步论及象数的内在联系Qƈ未详l谈到象数理论的E序。孔子在教书时六艺教学大U?/span>“CgM书数”中的敎ͼ是当时日常用的实用数。到孟子时代Q即到战国末期,象数理论乃大备,历法推步术也成熟。当时的不少学者会推步术,而星命学为孟、荀二位大儒所不。孟子所说的“苟求其故Q千岁之日至可坐而致?/span>”Q是谈的历法推步术;荀子说Q?/span>“善ؓ易者不?/span>”。这Ӟ在古经法和历法推步术之外Q已有经典术数如“三式”{的出现和应用。这两类数的法Q在后汉徐岳《数术记遗》中有提要式的概括ȝ。对其中提出?/span>14U算法,没有明确指出何者ؓ历法推步术算法,何者ؓ术数法E序。亦可能是综合的、浑元一体的法E序。ȝ看来Q有数必有算Q有必有法。Ş成古经法和术数算法是很自然的。在古代可能有互补的势。《周易》大衍之数很可能与古六历所用的法E序有关。唐代张遂的大衍历以及宋U九韶《数书九章》均涉及大衍法Q而秦汉时期的《九章数学》中则对大衍法避而不谈。这可能是由于古代大儒亦是视大衍之数带有秘内容Q不敢与正规的应用数学算法相提ƈ论。实际上Q大衍之数只是一U现代所说的“不定分析”而已!阮元论曰Q?/span>“推步之法臛_衍备矣,……后来造者未能及也。然推本易象Q终为傅合,昔h谓一行窜入于《易》以眩众Q是乃千古定Z”。E1Q由此可知,q法而论Q推步术自ؓ推步术,数术自ؓ数术Q各成系l,不相涉也。然而,qƈ不意味着数术法E序中无合理内容。英人李U瑟常提到术?/span>“内算”很有用。E2Q但未作深入探究。宋U九韶《数书九章》序中论内外,涉及l典术数三式Q其论颇正:“今数术之书尚三十余家Q天象历度,谓之~术。太乙壬甲谓之三式,皆曰内算Q言其秘也。九章所载即周官九数Q系于方圆者ؓ镚术Q皆曰外,对内而言也。其用相通,不可歧二”。E3Q以上所论均涉及数字信息?/span>?/span>
21世纪已成Z息时代,信息与象数息息相通。故《系辞传》象数思维应当在今后大攑օ芒,与西方计机文化成就携手q进Q逐渐融汇成一体。《周?/span>·p辞传?/span>“天地之大h?/span>”Q?/span>“生生之谓《易?/span>”Q强调生命演化思想Q卦ȝ讄上采取乾坤六子的形式Q这都与西方新近兴v的遗传算法的_与具体计步骤内容相q?/span>?/span>
二、遗传密码与象数?/span>
q些q来Q国内外对于U学易感兴趣的学者,无不重视生物遗传密码的研I成果,q展开《周易》象C遗传密码l部l构Ҏ的探讨。这斚wQ尤以已故著名科学易学家潘雨h授的研究h代表性。潘先生博古通今Q既深钻q象数理论,又熟悉分子生物学和遗传密码的生物化学含义Q他?/span>“U学?/span>”一文中?/span>DNAQ脱氧核p核酸)?/span>RNAQ核p核酸)ZQ来考察其分子结构的变化情况Q及其化学键?/span>“象数”。E4Q?/span>?/span>讨论l果如下表所C(暂略Q:
Z使读者深入理解象C生物遗传学及遗传密码的对应关p,有必要将有关U学名词加以D的解释:?/span>
1、遗传密码: DNAQ脱氧核p核酸)中核苷酸序和蛋白质中的氨基酔R序之间的关系UCؓ遗传密码。遗传密码是q基的三联体(相当于《易l》八卦的三爻Q,可在DNA分子上顺序读出,且互不重q)?/span>DNA是一切生命Ş式的普遍遗传物质?/span>DNA有四U不同的基Q两U嘌呤,卌嘌呤和鸟嘌呤Q以及两U嘧Ӟ卌腺嘧啶和胞嘧啶?/span>DNA的结构呈双螺旋结构Ş式?/span>?/span>
׃联体密码重PQ可形成与六十四卦相对应的符Ll。这q偶然Q而是自然物的发生和演化合乎易数的自组l作用造成的。潘雨h教授在《周易纵横录》论文中已作了详l的象数Q可以参看?/span>?/span>
2、核苷酸Q上q四U碱Z一与脱氧核p结合,叫作核苷。核L酸酯衍生物UC为核苷酸?/span>DNA分子是由核苷酸构成的Q许多单元接在一起就形成了多核苷酔R链?/span>?/span>
3、核p核酸(RNAQ:RNA?/span>DNA一P都是镉K分子Q亦是由重复的核苷酸单元l成?/span>RNA的构成单元有两点?/span>DNA不同。首先,RNA的糖l分不是脱氧核糖Q而是核糖。其ơ,四种基中虽然有三种Q即腺嘌呤、鸟嘌呤和胞嘧啶Q在RNA?/span>DNA中都一栗但W四U,卌腺嘧Ӟ?/span>RNA中ؓ嘧啶所代替Q它了一个甲基。在三种RNAcd的一U类型中Q还偶尔出现别的基?/span>?/span>
4、信使核p核酸(mRNAQ:?/span>HTSS?/span>mRNA在把密码译成专一性蛋白质时v模板作用Qƈ且能把遗传密码的信息从细胞核?/span>DNAq送到l胞质,以便促进合成蛋白质的作用。携带着所需要的信息Q以军_一个蛋白质分子的整个多肽链?/span>mRNA的长度,UCؓ作用子。某?/span>mRNA分子携带着不仅合成一个蛋白质分子的信息,q样?/span>mRNAUCؓ多作用子。在合成q程中,当密码由DNA转录?/span>mRNA上时Q后者即dl胞核,通过核膜q到l胞质中。在l胞质中它移动到蛋白质合成的场所Q即转移到核p核蛋白体处。核p核蛋白体由DNA和蛋白质l成?/span>?/span>
5、{ULp核酸(tRNAQ:?/span>HTSS〗其作用是把l胞质中的}基酸转移到核p核蛋白体上蛋白质合成的场所。因此,tRNA是在特定氨基怸对它~码?/span>mRNA三联体之间v媒介物或转接分子的作用。每个}基酸都有其互不相同的、专一?/span>tRNA分子。每U?/span>tRNA含有大约80个核苷酸?/span>?/span>
6、反密码子:tRNA分子上与mRNAq接的一定部位是一个由三个基l成的顺序,?/span>mRNA上的密码子互补,UCؓ反密码子?/span>?/span>
7、简q密码:试验表明Q虽然Q何特定}基酸密码子的开始两个字母L不变Q然而第三个字母有时却不同。例如,~码丝}酸的不仅?/span>AGUQ也?/span>AGC。因此,Crick 1966q提?/span>“摇摆”假设Q这U摇摆在于第三对基之间的配合与前两对碱基的_要求相比多少有些村ּ。凡是同一个}基酸有不同的密码者,q种密码UCؓq密码?/span>?/span>
三、遗传算法概?/span>?/span>
在遗传算法中Q可以将模型的一个参数表CZؓ一个二q制数码Q全部参数用许多串联在一L二进制数码组成的字符?/span>(cM一个染色体)代表。从一l初始模型,即一些具有不同染色体的个体组成的U群开始。E5Q?/span>?/span>
遗传法的基本思想正是Z模仿生物界的遗传q程。它把问题的参数用基因代表,把问题的解用染色体代?/span>(在计机里ؓ字符?/span>)Q从而得C个由h不同染色体的个体l成的群体。这个群体在问题特定的环境里生存竞争Q适者有最好的Z生存和生后代。后代随机化地承了父代的最好特征,q也在生存环境的控制支配下l这一q程。群体的染色体都逐渐适应环境Q不断进化,最后收敛到一族最适应环境的类g体,卛_到问题最优的解。值得注意的一ҎQ现在的遗传法是受生物q化论学说的启发提出的,q种学说Ҏ们用计算军_杂问题很有用Q而它本n是否完全正确q不重要(目前生物界对此学说尚有争?/span>)?/span>?/span>
遗传法的基思想是在本世U?/span>50q代初,׃一些生物学家尝试用计算机模拟生物系l演化时而提出的?/span>?/span>
遗传法是模拟生物通过基因的遗传和变异Q有效地辑ֈ一U稳定的优化状态的J殖和选择的过E,从而徏立的一U简单而又有效的搜索方法。它q用随机而非定性的规则对一族而非一个点q行全局而非局部地搜烦Q它仅利用目标函数而不要求其导数或其它附加限制Q它虽然在特定问题上效率也许不是最高,但效率远高于传统随机法Q是一U普遍适用于各U问题的有效Ҏ。遗传算法的主要思\有:?/span>
1、繁D?/span>(reproduction)Q繁D是Ҏ现有各个体的目标函数|定其生存概率,模拟生物界的自然选择Q劣者淘汎ͼ适者生存。在遗传法中,我们ZؓC持种包含的个体L不变。比较优U的个?/span>(模型)有较大的生存概率Qƈ可能J衍Q比较差的个?/span>(模型)可能会淘汰。这样生的下一代的个体Q一般都h较大目标函数|因而有较大的生存概率?/span>
2、交?/span>(crossover)Q从U群中随机地选择两两一l的双亲Q分别随机地交换部分染色体,各自产生两个新染色体?/span>?/span>
3、变?/span>(mutation)Q染色体按一定概?/span>(一般很?/span>)可随机地产生变异?/span>?/span>
遗传法能够解决的问题不仅限于最优化问题Q但无论哪种问题Q都要解决两个关键问题:(1)必须能将问题的解{用一l二q制数码表示Q即建立解答与二q制数码间的映射(mapping)关系?/span>(2)定义一U对最佌的定量量度,即适度函数?/span>?/span>
四、自?/span>DNA“计算?/span>”?/span>“g”与Y?/span>—?/span>象、数?/span>
盘由木框、竹、算珠构成,其各cȝ口诀和规则是计算E序。算盘徏立了一个珠空_易算卦爻Q杭辛斋UC为卦材、爻材,相当于易硬Ӟ《系辞传》所?/span>“八卦成列Q象在其中矣”Q是八卦I间。《序卦》所论相当于宏观E序?/span>“蓍之德圆而神Q卦之d方以?/span>”{有兛_d能的Q相当于基因染色体数的作用?/span>?/span>
遗传法所取法的自?/span>DNA?/span>“g”(?/span>)l生物化学家多年q行?/span>DNAl构分析的研IӞ相当 ?/span>1 DNA四种基p环pȝ及其原子标准指数Q暂略)于高分子l构式所表示的原子结构。E6Q具体化?/span>DNAQ则是双链螺旋结构的形象?/span>DNA的参数有化学边界距离(以旋转角度表C?/span>)Q边界角(两相d学边界间的夹?/span>)Q扭力角(DNA螺旋的扭转角度,0?/span>360°)。然而,前二者是帔R。只有扭力角是时常变动的变量。遗传算法主要利用扭力角变量。今遗传算法所取法的象?/span>—?/span>基l构式及DNA中u(只表CZ个核苷酸单位)扭力角分布等叙述如下Q?/span>?/span>
?/span>1表示DNA四个基pȝ及其原子标准指数Q图2Q暂略)上部表示基本环,其扭力角?/span>χiQ其下表C糖环,其扭力角?/span>P(i)Q?/span>γn(i)Q碱基系l的全过E是自由的,原则上沿单个化学边界“摆动”Q就q样?/span>DNAp环q接h。意卛_本环与糖环沿公共边界?/span>“摆动”。这U摆动可能是在传递信息。沿化学界面在糖环上的内循环扭力?/span>χ在空间上受到制约Q因为糖环需要闭合。已发现每一核苷酸单位都有八个主要结构参敎ͼχQ?/span>νmQ?/span>PQ?/span>αQ?/span>βQ?/span>γQ?/span>εQ?/span>ζ(2)Q〖JQ〗这八个参数都限制在一个有限的距离内,原则上,扭力?/span>αQ?/span>βQ?/span>γQ?/span>εQ?/span>ζ(2)?/span>χ位于0?/span>360°之间Q?/span>δ是中轴和p环的一部分Q这里把δ叫做ν?Q?/span>δ是一U冗余信息?/span>PQ?/span>νm距离可以推导出。典型的距离分别?/span>150°~2Q5°Q2Q.Q?/span>°~5Q.Q?/span>°(距离用扭力角变化DC?/span>)。如?/span>DNA?/span>8个结构参数已知,则排列位|已知的DNAQ包括其中所含的N个核苷酸卛_完全定?/span>?/span>
DNA探针Q这U探?/span>(?/span>3)Q暂略)在探环境信息方面,从最原始的单l胞生物变Ş虫原生质中就存在其原始Ş态。这U探针机构随宇宙和生物演化而逐渐变得复杂h。瑞士学者方q《微_分析学》一书把q种探针式的试作用叫做“伊d”。E7Q?/span>“伊d”在心理学界受到重视?/span>DNA的探针是一U复杂的l合体,在生物分子结构研I方面n有广泛的盛名Q称之ؓDNA探针U的研究。探针综合体一部分是由于其核苷酸自补偿作用而出名的?/span>DNA探针׃个双链杆和一个环l成。探针最重要的部分是q个环。探针在演化q程中非常守?/span>(E_)Q因此具有重要的生物功能。探针Ş成于l菌噬菌体最原始的重复功能?/span>DNA染色体组存在有复杂的怺作用。这U作用能被其他生物分子所识别、利用,亦可由原生质来识别?/span>?/span>
DNA相当于一个微观世界,其细部结构和功能q未认识到。可以预料,它作为遗传算法的自然hQ其有用信息Q取之不,用之不竭。要xq遗传算法,一定要先取得自?/span>DNA的新探烦成就。最q对DNA的假l点的观,?/span>DNA三叉l构的观就属于q方面的新探索?/span>DNA双链l构相当于太极生两AQ两仪生四象Q一分ؓ二的沌二分叉结构。将来对DNA三叉l构的认识可能引导到寏V太玄经》一分ؓ三,中医“三阴三阳”的认识。这q遥远的呓惻I可能是不久的事情了?/span>?/span>
五、易程序问?/span>?/span>
易学象数理论自战国Ş成后Q由于社会制度与士大夫意识Ş态的原因Q易C能走西方公理化的道\。徐岟뀊数术记遗》积、太乙算、九宫算都有比较独立的算法。其余不一定有独立的算法。其中提出的14U算法是Q积,太一,两A,三才,五行,八卦,九宫、运{算Q了知算Q成数算Q把头算Q龟,珠算Q计?/span>(心算)。对每种法的叙qͼ只有三言两语Q看不出所以然。迄今尚未有Z深入研究。原因是“文献不故也”。要x?/span>14U算法的原样Q只有走到基层农民和隐居型的知识分子那里作调查。可惜多年来无人问z,所以困惑一直未解。我认ؓ调查重点主要是山东半岛蓬莱,镠罘沿v一带山区农村?/span>?/span>
《九章数学?/span>“寓理于术”Q文中的“术曰”会有法理论和程序背景?/span>?/span>Q?/span>8Q现在唯一可了解的是珠算法Q此已有全国珠算学会在研I。其中不口诀规则Q堪U算法。可从此入手以及从历代历法推步术的演化中q烦易算法。古有《缀术》,为南北朝冲之所创,用于五星的推?/span>(宋秦九韶《数书九章》第三卷天时cL“~术推?/span>”?/span>)。《缀术》在《算l十书》中有名无书Q书已失传?/span>?/span>
MQ恢复古代易程序的研究是一大课题。南京大学天文系q生教授曾拟研I恢复缀术。究竟古代易详l内容如何,待考证恢复。秦汉前后出现的三式(太乙、六壬、奇?/span>)l典术数的推演中可能有易算法程序的影子。其中既含科学因素,又有不少秘内容Q今后应作开发研I?/span>?/span>
六、象数思维与遗传算法的比较?/span>
本h研究U学易多q_研究遗传法已有七、八q_q今已初步得出易的象数思维基本上等价于遗传法的性质与功能的初步看法。所谓象数思维主要是包含在孔子及其弟子所作的《易传》中Q且主要是《系辞传》。经Ҏ发现Q无论用自然遗传q程Q生物演化观念,整体观或Ҏ实际观测来认识自Ӟ在问题优化,生物遗传基因交配、变异,以及在溯往和预问题上都表C象数思维与遗传算法的怼性。《诗l?/span>·雅》说Q?/span>“唯其有之Q是以似之?/span>”意即两种事物怼的根本原因是二者之间有共同的东ѝ这亦是《内l?/span>“贤者察同,愚者察?/span>”之意。今二者比较如下:?/span>
Q.遗传法(以下?/span>GA写表C?/span>)和《易》都重视生命现象Q特别是遗传q程。《系辞传》说“生生之谓?/span>”Q?/span>“天地之大h?/span>”?/span>?/span>
Q.GA和《易》都重视演化Q重视从h到有序的观念Q而认为确定不变的存在是暂时的。实际上Q?/span>GA和《易》都有D论思想?/span>?/span>
Q.二者都有整体观思想Q?/span>GA用相当染色体的种?/span>(population)C为基Q用相当基因的二q制C输入计算。所用数的设计都是一个集合,而不是用单个数。易用大衍之数50(虚一不用)作ؓ演算基础Q亦是整体观?/span>?/span>
Q.二者都是以实际观测为研I根据?/span>GA是西方实方法的l箋Q自不待a。伏氏是根据Ԓ观俯察、远取近取进行比较后而画八卦的,不是凭空臆造?/span>?/span>
Q.GA以求得问题优化解见长。孔子谓《易》是寡过之书Q趋吉避凶之书,从广义上看也是一U优化。元?/span>(大吉)为全局优化Q吉或悔而后吉是局部优化?/span> 特别是《易》有《既》、《未》二卦作为纲领卦。《既》乃优化的结果,《未》也设法使其转变Q向《既》发展,很多卦爻辞字里行_多有此意?/span>?/span>
Q.二者重事物之间的相互作用和关系?/span>GA用交配来表达此意Q《易》则?/span>“天地?/span>?/span>Q万物化醇,男女构精Q万物化?/span>”Q?/span>“天气下降Q地气上?/span>”(《礼?/span>·月o?/span>)来表C?/span>?/span>
Q.二者均重视质变Q?/span>GA谓之变异Q《周?/span>·p辞传》则_“I则变,变则通?/span>”?/span>
Q.二者均涉及数学I间的理论和应用?/span>GA常用l构参数I间Q《易》则有八卦空_“八卦成列Q象在其中矣”Q?/span>“乑֝成列而易立乎其中?/span>”?/span>?/span>
Q.《系辞传》说Q?/span>“以知来Q智以藏往”?/span>GA既能探烦已往解决问题Q又能用于地震预报?/span>?/span>
GA的作者提出算法的改进问题Q主要是深入挖掘DNAl构的潜力。而东Ҏ维则有“巢居知风Q穴居知?/span>”的说法,q种说法是科学的Q即鸟类和昆虫类(如蚂?/span>)均有预测天气变化的功能。如能开发鸟cd蚂蚁体内信息大分子结构奥U,可以用以改进GA法的功能?/span>?/span>
附注Q已故学者刘l光一元数理论的研I是Ҏ易学象数发展出的一U易数学分支。这一分支后乏h或无人。关于一元数理论已出版《一元数理论初探?/span>?/span>Q9Q一书,其中不少?/span>GA有相通之处,如其中提出的位元、序元、结元三个计程序理论概念,以及子、电子、声子、光子、热子、引子、张子等开阖角的问题。均可与GA怺作用Q而创造新的算法?/span>
命o?/strong> | Project settings | 说明 |
?/td> | None | 没有调试信息 |
/Zd | Line Numbers Only | 目标文g或者可执行文g中只包含全局和导出符号以及代码行信息Q不包含W号调试信息 |
/Z7 | C 7.0- Compatible | 目标文g或者可执行文g中包含行号和所有符可试信息,包括变量名及cdQ函数及原型{?/td> |
/Zi | Program Database | 创徏一个程序库(PDB)Q包括类型信息和W号调试信息?/td> |
/ZI | Program Database for Edit and Continue | 除了前面/Zi的功能外Q这个选项允许对代码进行调试过E中的修改和l箋执行。这个选项同时?pragma讄的优化功能无?/td> |
快捷?/strong> | 说明 |
F5 | l箋q行 |
F10 | 单步Q如果涉及到子函敎ͼ不进入子函数内部 |
F11 | 单步Q如果涉及到子函敎ͼq入子函数内?/td> |
CTRL+F10 | q行到当前光标处?/td> |
Call Stack
调用堆栈反映了当前断点处函数是被那些函数按照什么顺序调用的。单击Debug工具条上的Call stack显CCall Stack对话框。在CallStack对话框中昄了一个调用系列,最上面的是当前函数Q往下依ơ是调用函数的上U函数。单击这些函数名可以跛_对应的函C厅R?br> 其他调试手段
pȝ提供一pdҎ的函数或者宏来处理Debug版本相关的信息,如下Q?
宏名/函数?/strong> | 说明 |
TRACE | 使用Ҏ和printf完全一_他在output框中输出调试信息 |
ASSERT | 它接收一个表辑ּQ如果这个表辑ּ为TRUEQ则无动作,否则中断当前E序执行。对于系l中出现q个?D的中断,应该认ؓ你的函数调用未能满pȝ的调用此函数的前提条件。例如,对于一个还没有创徏的窗口调用SetWindowText{?/td> |
VERIFY | 和ASSERT功能cMQ所不同的是Q在Release版本中,ASSERT不计输入的表达式的|而VERIFY计算表达式的倹{?/td> |
x
一个好的程序员不应该把所有的判断交给~译器和调试器,应该在程序中自己加以E序保护和错误定位,具体措施包括Q?
我学C语言已经q两个月Q《C语言E序设计》这本书我现在正在看W三遍,虽然上次考C{时二U没q,但我怿以我现在水^是肯定可以通过考试Qƈ且我已经W二ơ报了名?
学到现在我却仍然不知道该怎么ȝE,当我惛_一个游戏的时候才发现自己什么也不懂Q我应该再看看什么书好呢Q学之致用?
我询问了许多高手他们告诉?----初学者都有这U困惑的?
选择了ITQ就意味着艰辛Q困苦与挑战Q要学的东西q很多很?.....不要想一步登天,不要惌捷径Q(除非你只是玩玩,或者你有TALENTQ)基础最重要QIT任重而道q,朋友Q原你有一颗坚定的心,C去,不会错!Q!
在你学习的同Ӟq要注意一下IT的行情,多了解了解,摆好自己的位子,正确对待每一件事Q我怿你一定会成功的!Q!
真正的程序员用CQ最有h值的E序员是用C的程序员。不是开玩笑Q?
C语言只是一个基。一个能够向表达你的x的基Q会了C能够写程序,但是不见得能够写出有实际意义的Y件。(学习架构Q?
当你学到不自觉地使用q门语言Ӟ大约?万行代码差不多了)Q你的c语言才可以说学会了。不是有个笑话吗Q说的就是程序员的痴qL度。我惛_该有q样的精才行。徏议暂时不要看高~程Q多写代码、多看代码、培养风根{熟悉语法、最关键的是把握思想?
学C语言q不只是学语法那么简单,重要的是~程思想Q难的是它在不同环境下的应用。这是一个O长的q程Q需要经验的U篏。当燃,q不是说L抓住C不放Q但如果你目前还不知该怎样~程Q徏议在你有一U游刃有余的感觉之前Q还是不要去C么C++,Java之类Q那样你遇到的困难会更大。自q立写完一个程序(无论大小Qƈ看到他的正常q行时便会有一U成感。不断培养这U成感Q@序渐q,q步是自然的事情?
首先
C语言是一个O长的q程Q它是基Q在很长很长......的时期内不会被淘汰。把C语言学好了,其他的,FOR EXAMPLEQC++QC#QJAVAQVCQVC++QVBQDELPHI......q些学v来就会比那些C语言基础不扎实的L得多Q?
了解一下库函数。连库函数都不了解怎么ȝE?我也是刚听h家说要看库函数的?
初阶段
我是听h说的Q我现在可没q么大本事:
1.我觉的可以先试着d一条sin曲线?
2.自己做一个类似tc的界面,q是菜单的练习?
3.l习中断的调用,键盘Q鼠标,旉{?
4.tc是一个工LQtc下的库函数是各种各种的工P我们要完成一件工作必d工具熟悉Q即使用的不熟悉Q但臛_也要有印象。所以《tc函数大全》是必备之物。所以要l常看tc下的库函数?
5.q是最重要的一条:just do itQ我现在才明白nike 的广告的真谛Q其实也是这个世界的很重要的一条just do itQ?
6.对于指针Q我也不知到如何ȝ它,那些地方必须用它Q我把握不住?
在TCE序中你可以嵌入汇编、可以合编E。我觉得嵌入汇编q一点很׃h。它使你在理Z无所不能。合编E有利于提高对编译方法的理解?
然后可以写俄|斯方块Q汉诺塔Q贪食蛇Q空间作战,吃豆{游?
接着可以学MASMQC+MASM=NUCLAERQ当然是做系l了?
学到q里可以说C基本上是学会了?
c ------> c++ ----->数字逻辑设计、离散数学、数据结构与法Q这是一个学校的评Q?
W二阶段
c++是c的提高,是面向对象的语言Q也是到visual c的必l之路。现在就谈谈visual c的选择问题?
我想在国内来讲VC不上RADQ快速应用开发)工具Q因为VC开发的效率是很差的Q对于一些客L应用来讲开发效率是让h难以忍受的。此外还有一个开发的误区是“只要用VC可以什么事都自己做Q?#8221;我想最致命的就是这一点,要修一栋楼我想不需要连砖瓦都要自己烧吧Q?
我上面的说法q不是在否定VCQ我只说了开发中的一个方面,如果从维护的角度上来讲VC可以说是最好的工具。VC的好处在l护的过E中׃体现出来Q我个h认ؓ用VC开发出来的软g在维护过E中所p的工作量要小于其他图形界面开发工h开发的软g。当然这要求l护人员也必L一个比较优U的VC开发h员?
最后我说点在选择VC开发时的一些看法:
无论谁只要愿意都可以选择VC作ؓ开发工P但你必须有耐心和精力?
如果你更偏重于开发Windows后台服务Q那么请选择VCQ不要犹豫?
如果你Y件执行效率是非常重要的衡量因素而且外部条g有限Q那么请选择VCQ不要犹豫?
如果你想完全的把握开发过E中的每一个环节,那么请选择VCQ不要犹豫?
如果你的软g很复杂,而且以后会有其他人接手你的工作,在主E序中用VCQƈ准备好充的文档?
如果你想更多的了解系l的各种Ҏ,而且希望自己的Y件能够有更多的灵zL,那么请选择VCQ不要犹豫?
如果你想开发一套好的开发包Q那么请选择VCQ不要犹豫。(因ؓC/C++更接q系l,C/C++开发出来的开发包可以很方便的被其他开发工兯用)
……
如果你下定决心,非VC不学Q我贺你,你的选择没有错?
如果你因Z么原因放弃VCQ我也祝ZQ你的选择没有错?
但是一个真正的E序员应选vcQ?
l???
要学的还很多 慢慢来你会行的。祝你编E愉?!!!!
推荐书籍
---------------------------------------------------------------------------------------------------------------------------
C语言Q?
清华谭浩强的《C语言E序设计?
清华p的《c++?
清华的?086/8088汇编语言?
数据l构Q?
电子工业出版Cde <<设计模式>>很不?
学习心得
---------------------------------------------------------------------------------------------------------------------------
1.如果你是真的喜欢~程Q那什么都不是问题?
2.实践?
3.扄味的小E序~一遍。看看数据结构。找更高U的cE序书看?
4.学习数据l构用c语言实现
5.找源代码?
6.自己~一个多模块的程?
7.再学一~C
8.l箋学,然后扑ַ?
多看书!
多实践!
多请教!
学学数据l构之后你会有新的发C?
我前天去了一 家Y件公司询问了一下啊Q他们经理说用C 也行Q但要很熟悉很熟l!Q?br>--
天是上帝选召的优U人类Q彼此孤独的zȝ。在遇到另一个天使之前,天L试图接近人类Qhcȝ惧天使的丽Q美丽因为天使在IZ而美丽,Z天之间L隔膜--因ؓ畏惧。天使ؓ此收L膀Q最l天使终于决心品呛_独,展翅高飞?