源程序范文

时间:2023-03-07 10:13:00

源程序

源程序范文第1篇

关键词:源程序;美;效率

引言

美与效率相长相消.人类所有工作的一个重要目的是为了追求美,发现美,创造美.美好的事物不仅给人以享受,也能带来工作效率的提高和生活质量的改善.C++之父STROUSTRUPB先生在他的重要著作中[1]常提到“优雅”的字眼,“优雅”代表的就是简洁、漂亮、美观和高效.对此所有从事过多年程序设计工作的人肯定会有同感.从各层面精心设计的程序,会给人以整体美的感受,甚至就是一件精雕细刻的艺术品,这样设计出来的程序使用及运行效率一般会较高.事实上,计算机程序设计语言的演化过程就是一个很好的例子,从二进制的机器语言到汇编语言,再到高级语言,再到现在的4GL,每次进化都会使程序设计更接近人类语言,更符合人类审美观念,语言学习,程序设计工作,程序的运作更具效率.计算机是人类追求效率的直接产物,源程序的美学表现力直接影响人、程序和计算机的工作效率.软件设计中的美学表现可以体现在各个层面上,从整体规划到代码编制,从界面到源程序,从一个符号、一条指令到一个文件,从视觉表现到逻辑结构都是如此.我认为能把美学思想融到软件设计的各个层面,能在各层面透射出美学表现的软件会有更高的效率,也会有更多的成功机会.软件设计中,凡能透射美的每一个层面会带来各种效率的提升.美观的源程序编排格式自然提高人们阅读和理解的效率.精致的用户界面和简洁易用的操作流程必然赢得用户的青睐,自然也能提高他们的工作效率.代码合理顺序,精良的算法体现出程序的逻辑美,这总是带来空间、时间、应用及运行效率的改善.这里我将就源程序方面的美学表现和效率问题谈一些自己的看法,当然这些看法更多是对别人类似观点的汇总.

1视觉美学表现与效率

源程序中最小的元素应该是各种符号、运算符和基本命令,一直大到整个软件的所有源程序,其间还有表达式、复合语句、过程、函数到一个源程序文件,每个层次都需要有合理的美学表现,从基本单元到文件整体及单元和整体相互作用各角度融入美学思想,才能打造出视觉效果优良的源程序代码.透射美学表现的源程序对别人的阅读,程序员间交流,设计人员日后查询提供极大方便,显著提高工作效率.一个实用软件中会涉足许多符号,例如变量名、函数名、类名等等,为一实体命名,也就是编制一个符号是大有学问的,不但要求视觉美观,还要含义准确简单,于是出现了各种符号命名风格,其中著名的要数“匈牙利表示法”(为了纪念Microsoft程序员CharlesSimonyi)[2],这种方法里,变量名以一个或多个小写字母开始,这些字母表示变量的数据类型,当然也有各自形成的习惯或随意命名.这里并不存在哪个更好的问题,重要的是根据实际情况和需要来确定.例如循环控制变量一般用i,j,k等简短的符号即可,如果用a,b,c等就不太好,若用匈牙利表示法表示为iI,iJ,iK或iA,iB,iC(这里i为整型)就明显不好,而用iNumberOfPeople,count_of_element等表示几乎是一种丑陋.事实上在含义清楚,不引起混淆的前提下,任何符号要尽可能短小.简短明了,意义清楚的各种符号,不仅阅读容易,书写方便,占据更小的空间,也为以后整个源程序良好编排奠定基础.如果把整个程序比作画,符号就是画的一笔,每一笔画好了,是画好一幅画的基础.

1.1源程序视觉表现分析

下面是一个VisualFoxpro函数示例的程序使用a,b就很好了.函数名前缀fun显得可笑,这一方面是由于VisualFoxpro本身有过程和函数之分,另一方面也是程序员的多此一举.关键字FUNCTION,ENDFUNCTION,PARAMETERS太长也是火上浇油.VFoxpro的鼻祖设计者(DBase的设计者)们大概也意识到了这个问题,作为弥补,VFoxpro中可通过4字符关键字缩短符号应用.显示表达式中ALLTRIM(),STR()的频繁使用也潜在着丑陋的地方.STR()不该无原则给转换结果添加空格,那应该是用户可选择的事情,STR()的失误带来不必要的ALLTRIM()调用.关键字过长、库函数设计缺陷这是语言设计的缺美之处,过度使用大写字母这是语言及程序员不妥之处,毫无道理使用长符号是程序员的过失,看来,这是典型的缺乏美学表现的例子,这样的源程序显然缺乏各层次的效率.下面改造可能好些.源程序版面对阅读的影响显而易见.版面编排与实体有一定关联.例如在C/C++中,有头文件(.h或.hpp)和实现文件(.c或.cpp)之分,它们不仅完成接口和实现的分离,为代码保密带来便利,同时也为阅读和使用带来益处.

1.2颜色对源程序的视觉影响

尽管目前源代码还不支持颜色(指编译器不支持),但C++之父STROUSTRUPB先生正在设想未来的C++可能重载颜色.到那时,源程序中红色a和黄色a是不同的.如此一来我们就能编排出更美的源程序,源程序将会有更强的美学表现力,并且提供更高的应用效率.这里要说明的是,目前,多数源程序编辑器支持语法颜色,实践证明,编辑器语法颜色支持增强了源程序的美学表现力,同时提升了源程序使用效率.

1.3源程序注释的美学表现

对源程序中的注释,人们依然有许多显然不同的说法.为源程序添加适当数量的注释是大多数人的共识.但添加许多注释或干脆不加注释的源程序也是可以见到的.注释问题会涉及到添加还是不添加,添加多少,添加在代码的什么层次的什么位置.对此我个人的看法是:美观并且富有效率应成为添加注释的基本准则.其实代码原本具有自解释性,为什么还要有注释,因为计算机语言毕竟不是人类语言,更何况就是人类语言,还有语言不通的时候.因此适当的,言简意赅的注释再加上源程序一定程度上的自明性,辅以恰当的注释位置,源程序的阅读就成了一件轻松愉快的事.相反,缺乏必要的注释,罗嗦多余的注释,含义不清的注释,位置不当的注释都会带来阅读上的困难和不适,甚至出现理解错误.源程序中代码块的规模显著影响人们对源程序的阅读和应用,例如C/C++中的结构,类和函数.一个体积庞大的结构,类或函数,无论从阅读还是应用都可能造成困难,尤其可能引起人们理解上的误差.例如MFC中的CDC类就是超大的C++类[3],我想,设计和维护这个类的Microsoft的工程师们在摆弄这个类的源代码时至少会有点累吧,至少会感到它真的有点大吧.我觉得类似这样的类有点丑陋,从心理上会影响我对它的使用,换句话说,这会引起使用效率的下降.函数体也一样,一个大规模的函数体不仅丑陋,也很可笑,甚至是危险的.其实,理论上不管多大的软件都可只有一个函数,这就好比巴黎的埃菲尔铁塔,它完全可以一次成型造就,但那意味着什么?意味着至少会有更为巨大的投入和难以想象的浪费.将函数中最小的不可分的逻辑相关代码块分离出来成为小函数,就可避免胖子函数,对于类也有类似情况.一个源程序文件中的各类要素保持美的表现,多个源文件保持相同风格,一个软件的源程序从视觉上就会具有很强的美感,由此会显著提高阅读和应用效率.

2逻辑美学表现与效率

与视觉美学表现相比,逻辑美学表现并不直观,逻辑美感表现在更深的层次上.逻辑上的美学表现除了一定程度上对视觉的影响外,更多的隐藏在视觉背后.源程序视觉美学表现直接影响到源程序使用人员的工作效率和心理体验,但对最终目标程序的效率影响要弱于对人的影响,逻辑美学表现更多的是对目标程序工作效率的影响,同时逻辑美学表现从更深一层影响着人的视觉美感,并由此上升到更高一层的美的欣赏.

2.1编译系统的逻辑表现

计算机语言的编译或解释系统在生成机器代码时,并非对源程序做一一对应的翻译,而是要做各种加工,人们熟知的是优化处理,但有时也会画蛇添足.例如前面的表达式:?ALLTRIM(STR(pnFIRSTDATA)),“*”,ALLTRIM(STR(pnSECONDDATA)),;“=”,ALLTRIM(STR(pnFIRSTDATA*pnSECONDDATA))从逻辑上讲这个表达式也是丑陋的,例如ALLTRIM()和STR()的使用就有问题,悄悄的加上空格,再去掉它,真是糟糕.

2.2源程序语言要素的逻辑表现

源程序语言要素的选择,语句顺序,算法设计,类与函数的合理设计,代码在文件中的分布等都可以体现源程序的逻辑美学表现.完成某个程序功能,可有许多途径,例如在C/C++中,一个循环任务就可以选择for(),while,dowhile(),goto等多种语句,增一等工作可选a=a+1,a+=1,a++等,随意的选择定会让C/C++发明人失望.具体情况,需要合理选择才能体现出清晰的设计意图,同时也折射出逻辑的美.毋庸置疑,语句的顺序许多时候至关重要,另一些时候则无关紧要,但也有一些情况貌似无关紧要,却很有文章.假设有一个有关中学生身高的统计程序,将身高小于150厘米看作矮个,150~169厘米看作中等个,170厘米及以上看作高个,下面的(a)、(b)程序片段很有区别.函数与类的定义不仅影响它们的视觉美学表现,同时也对它们的逻辑美学表现产生影响,很明显,我们这里谈论的逻辑美学表现是源程序中蕴含的逻辑成分与人的逻辑思维的共鸣,可以想象,一个函数拥有成百上千条,甚至更多的语句,一个类有几百个成员那是一种什么景象,何止会引起视觉混乱,也很容易造成函数、类在逻辑含义上的失误.无论函数、类还是它们内含成分,采用逻辑美学准则去定义它们,能编制出无论视觉还是逻辑上都美的源程序.这不仅影响到人的工作效率,同样也影响到目标程序的效率.算法设计、代码在文件中分布等对源程序逻辑美学表现及效率的影响不言而喻.

3结语

软件工业进入二十一世纪,无论设计理念,设计工具,还是设计规模,都发生了重大变化.从设计规模上讲,现在每设计一个有用的程序都是一个工程,要涉及到许多文件,大量源程序代码,面对上万行甚至几十万行的源程序必须从视觉上、逻辑上全面考虑美学表现,符合美学准则的源程序才是易于管理,易于应用,富有效率的源代码.就让我们努力编写视觉优良,逻辑完美的源程序吧.

[参考文献]

[1]STROUSTRUPB.C++程序设计语言[M].北京:机械工业出版社,2002.

[2]PETZOLDC.Windows程序设计[M].5版.北京:北京大学出版社,1999.

[3]MICROSOFTCORPORATION.VisualC++2.0forWin32大全(三)[M].北京:清华大学出版社,1996.

源程序范文第2篇

关键词:既有线铁路;偏角法;程序计算Abstract: High-speed railway transportation plays a more and more important role in the economic development of our country. However, after long-term operation, both rail line originally spread of fatigue damage of subgrade settlement and serious phenomenon, the urgent need for the existing line overhaul regulation or optimization of circuit design, the traditional curve line adjustment process, through the method of deflection angle, rope method, coordinate method and curve adjusting method of artificial computation, draw the corresponding curve, a large amount of data and the heavy data processing, has been unable to meet the rapid development of railway needs, explore the curve from the calculation of the source program written in very urgent.

Keywords: existing railway; deflection angle method; calculation program

中图分类号:TU74 文献标识码:A文章编号:

既有铁路线的改建、复测和大修,设计部门或各铁路局的工务部门都要对沿线的既有曲线进行外业测量,然后进行内业拨距计算。校正曲线的主要目的,是选择符合既有曲线现状的曲线半径及缓和曲线长度,使拨距量总和最小。以往计算拨距时存在2 个缺点:一是盲目性很大,必须人为的多次给定曲线半径进行试算,经过比较采用其中结果最好的半径值。由于半径是人为给定,往往会遗漏最佳半径。二是遇到不等长缓和曲线时,有时必须通过绘图分析才能解决,很繁琐。因此,必须找出其中的内在规律,改进计算方法。

一、程序设计思路

根据累计偏角法进行外业测设曲线及渐伸线的基本原理进行内业计算,采用拨距图逼近法校正曲线进行编写的。

程序计算时,不必给计算程序赋曲线半径或缓和曲线的初值,而是通过程序计算拨距形成并连续调整拨距图,自动优选最佳曲线半径,自动选配最适宜的缓和曲线长度,从而达到整个曲线的最后拨距量总和最小。同时,为了使程序具有通用性,本程序也考虑了原始偏角法程序的编写。由于该程序所涉及的输入、输出数据较多,程序设计时建立输入、输出文件,以便核对输入数据及调用输出数据。

(1)输入数据:曲线编号,测点号N,起点里程K(0),测站数M,正反测(正1,-1反);

图1 测点数据输入

(2)通过do循环计算出三阶差,从而计算曲中点里程QZ。

图2 三阶差

(3)由曲中点向前、向后分别取2-3个点,优化半径,所取的点数,可以由要求精度自己确定,如图3中,由曲中点向前后分别各取两个点。

图3

(4)确定缓和曲线长;

(5)计算曲线要素,各个主要点里程;

(6)计算拨距。

二、程序流程图

图4 曲线波距计算程序流程

三、程序片段及输出结果

运用FORTRAN 90 进行程序编写计算,下例为某段线路运用曲线拨距计算结果:

曲线拨距计算结果

----------------------------------------------------------------------

曲线编号:1

曲线转角A= 20°12′52″

曲线主点里程ZH= 137729.184HY= 137829.184

QZ= 137892.964 YH= 137956.745 HZ= 138056.745

曲线要素R= 645.0L0=100

----------------------------------------------------------------------

里程 EJ ES Δ

1377200.0010.000 0.001

1377400.0210.003 0.017

1377600.0880.076 0.013

1377800.3520.339 0.013

1378000.9220.918 0.004

1378201.9301.935-0.006

1378403.5243.513 0.011

1378605.7295.709 0.020

1378808.5368.525 0.011

137900 11.959 11.961-0.002

137920 15.950 16.018-0.068

137940 20.682 20.694-0.012

137960 25.986 25.991-0.005

137980 31.859 31.875-0.016

138000 38.232 38.235-0.003

138020 44.947 44.947-0.001

138040 51.896 51.888 0.009

138060 58.947 58.932 0.015

138080 65.988 65.988 0.000

----------------------------------------------------------------------

四、结语

源程序范文第3篇

情人节我们做电的兄弟们送什么礼物给心仪已久的MM?在离情人节还有一个月的时间,给大家提供一个适合作为礼物的简单电路,自己动手做的漂亮玩具一定会是送给MM的最好的礼物。

显示效果图片upload/2005_01/050117013990931.jpg

原理图/buzi/upimage/upfile/20047221015470.jpg

曾经在新手园地发过的帖子/club/bbs/showAnnounce.asp?id=1288814

以下是详细说明:

图形显示的原理:

利用人眼的视觉暂留效应,使手在摆动到不同位置的时候,让位于一条直线上的LED显示二维图像的不同的列,实现图形扫描显示。

物理机制:

当我们在摆动手臂的时候,短时间内摆动位置和左右幅度不会有太大变化,利用我们手臂的这个运动规律,只要能得到棒从一侧摆动到另一侧的时间,然后把这个时间分成N份,然后在每一份的时间里显示不同的花样就能实现图形的显示。当我们在摆动手臂的时候,并不能预先得知此次摆动需要的时间,怎样得到从一侧摆动到另一侧的时间呢?再想想,短时间内我们手臂的摆动频率也不会有特别大的变化,我们只要能得到前一次摆动所用的时间,然后用这个时间近似得到下一次摆动所需要的时间,然后分N份就可以了。得到一次摆动所需的时间的任务由光遮断器完成,在棒上装一个可以摆动的用来遮挡光遮断器光线的细杆,粗细比光遮断器的狭缝稍宽,我用的是整流桥焊后剪下的一段管脚。每左右摆动一次这个杆就会通过一次光遮断器,使单片机产生一次中断,两次中断之间的时间就是想要得到的时间,实现这个功能用掉2051的一个定时器T0和外部中断INT0。然后用2051的另一个定时器T1,其定时时间是T0的N分之一,每次中断依次显示一列,就是照片上的效果。

再细想一下,手臂摆动的频率大于2Hz的时候才大概能由视觉暂留看出图形,再快也不过十几Hz,由T0为16位定时器的最长计时时间得到2051的时钟频率1MHz最合适,还有遮挡

用的细杆的粗细也可以大概估算,使其不会对计时精度产生太大影响。

所用元件:

AT89C2051 8元

高亮LED共8个 3.6元

电池盒 0.5元

单面万用板 8元 可以裁成3块,做3个摇棒

陶瓷谐振器 1元

光遮断器 2元

电阻电容导线 2元

外壳* 0.7元 可以裁成2块

可选元件:

电源开关 1元

总成本不超过20元

*外壳我用在家乐福买的半透明文件夹卷成的

此电路电路非常简单,代码短,但是用到了2051的外部中断编程和T0、T1定时器编程,非常适合初学者练习。我制作这个玩具花费了两个晚上的时间。此电路和程序还有扩展改进

的空间,如在长时间不摆动的情况下可以使单片机进入省电模式,显示不仅限于对称图片等,大家可以试试。

以下是源程序:

/*************************************************************************/

// ---------------

// LED显示摇棒

// ---------------

// 作者:nim 于 2005-1-7

//

// email:

//

// 本设计版权归作者所有,请勿擅自用于商业目的,转载请注明作者及出处

/*************************************************************************/

#include

#define SEG 17 //每帧图片分成17列来显示

#define INTERVAL 20 //每幅图片在左右摇摆20次后换下一幅

typedef unsigned char uchar;

typedef unsigned int uint;

code char pattern[17][3]={ //3幅图片的字模

{0xff,0xff,0xff},

{0xff,0xff,0xff},

{0xff,0xff,0xff},

{0xff,0x9f,0xff},

{0xff,0x6f,0xf9},

{0xff,0x77,0x65},

{0xfe,0xbb,0x1e},

{0x7e,0xdd,0xfe},

{0x00,0xee,0xfe},

{0x7e,0xdd,0xfe},

{0xfe,0xbb,0x1e},

{0xff,0x77,0x65},

{0xff,0x6f,0xf9},

{0xff,0x9f,0xff},

{0xff,0xff,0xff},

{0xff,0xff,0xff},

{0xff,0xff,0xff},

};

uchar phase,th1,tl1,index,count;

main()

{

EA=0;

EX0=1;

ET1=1;

PX0=1;

IT0=1;

TMOD=0x11;

index=0;

EA=1;

while(1)

{

}

}

void Int0_Handle(void) interrupt 0 using 2

{

uint t0_time;

TR0=0;

TR1=0;

TF1=0;

t0_time=TH0<<8|TL0;

TL0=0;

TH0=0;

TR0=1;

t0_time=65535-t0_time/SEG;

th1=t0_time/256;

TH1=th1;

tl1=t0_time % 256;

TL1=tl1;

if (count count++;

}

else{

count=0;

}

index=count/INTERVAL;

if (th1!=0xff || tl1!=0xff){ //如果摆动特别慢,定时器溢出就不显示

phase=0;

TR1=1;

}

else{

TR1=0;

}

}

void Timer1(void) interrupt 3 using 3

{

if (phase {

P1=pattern[phase][index];

phase++;

TH1=th1;

TL1=tl1;

}

源程序范文第4篇

遭受攻击最多的程序为dedecms

从受攻击网站类型分析,遭受攻击最多的程序为dedecms,其主要存在“dedecms search.php文件注入”与“dedecms ajax_membergroup注入”这两种漏洞,两者占总体攻击数量比例为24.78%,涉及网站比例则高达77.91%。

据了解,dedecms之所以成为很多黑客攻击的众矢之的,一方面是因为dedecms是知名的PHP网站管理系统之一,使用人数广泛,这吸引了众多网络攻击者的注意;

另一方面,dedecms是一个开源系统,不但很多源码直接暴露在网络攻击者面前,而且其程序漏洞在众多网站中保持着相当高的一致性,这就大幅降低了网络攻击的难度。

SQL注入与XSS跨站脚本攻击占据半壁江山

在近两年,虽然SQL注入攻击有所减少,但是依然是Web程序的一个主要威胁。从数据中我们可以看出,在攻击方式中,SQL注入以36.5%的比例位居榜首。黑客通过SQL注入攻击,可以操控数据库、篡改数据,甚至进一步入侵服务器,危害较大。

其次是任意文件读取和跨站脚本攻击,任意文件读取是指黑客通过目录跳转,查看文件内容。跨站脚本攻击也叫XSS,黑客通过XSS攻击可以盗取用户账号信息,网站挂马操作等,XSS攻击在Owasp Top10中位居第二的位置也说明了其危害性不容小视。

电子商务网站安全性薄弱

从2012年热点漏洞攻击次数TOP10统计数据来看,排名第一的“淘宝客7.4 huangou.php注入漏洞”以及排名第四的“shopxp TEXTBOX2.ASP注入”漏洞都针对的是电子商务中的商城程序。而从部分电商的漏洞分析数据中,我们也可以看出,高危、中危漏洞分布广泛,这凸显了电子商务网站所面临的安全困境。

安全宝报告指出,电子商务网站的安全之所以薄弱,原因是由于中小型电子商务网站参与者众多,既缺乏安全编程的开发经验,也缺少相关投入的资金支持。而且,电子商务网站普遍存在重内容轻安全建设与安全管理的问题,很多网站用通用模板进二次开发,存在很多已知漏洞和安全隐患。

此外,安全宝还监测到以下一些攻击,其攻击手法、地理特征和修复难题或将成为2013年网站用户的防御重点:

1、远程拒绝服务类攻击大量上升

DDoS是最常见的攻击手法,而且更直接、更有效。随着网络带宽的应用发展,几台傀儡PC主机就可以通过CC攻击完成对中小型网站的攻击。

2、中国境内近一半 DDoS 攻击的受害者位于北上广地区

安全宝处理过的DDoS流量攻击在地域上基本覆盖了互联网全部产业较发达的地区,其中近一半受害者来自互联网产业比较发达的北、上、广地区。互联网行业的残酷竞争是这些地区DDoS流量攻击高发的直接诱因。

3、大部分网站发现漏洞或被入侵后难以自我修补

源程序范文第5篇

关键词:工程流体力学;计算流体力学;CFD软件及源程序;教学研究

中图分类号:G6420;TU 文献标志码:A 文章编号:10052909(2015)05015404

一、工程流体力学与CFD软件、源程序

计算流体力学(Computational Fluid Dynamics,简称CFD)软件通过计算机数值计算和图像显示后处理,对包含流体流动和有热传导等相关物理现象作出系统的分析。目前,CFD 技术已经广泛应用到航空、航天、气象、船舶、水利、化工、建筑、机械、汽车、海洋、体育、环境等领域,取得了令人瞩目的成就。在现代科学技术高度发展的今天,计算技术已被引入到流体力学领域,使以前因计算过于复杂而影响进一步探讨的流体力学问题逐步得以解决,计算流体力学已经成为研究流体力学的重要方法[1-3]。常用的CFD计算软件有FLUENT 、CFX、Phoenix等。FLUENT 软件是目前常用的一套高性能的数值软件,是专门针对流体工程数值计算与仿真需求而开发的一种流体数值仿真软件。

工程流体力学课程教学内容主要分为流体静力学、流体动力学、相似和量纲分析、管中流动、孔口出流和缝隙流动等[4]。其中,管中流动主要研究圆管中的层流及紊流、管路中的沿程阻力、管路中的局部阻力及管路计算等,涉及到一系列的概念和理论公式,学生理解起来有点枯燥、困难[4-5]。通过利用FLUENT软件和源程序进行数值模拟这一环节,变枯燥的理论公式计算为生动的计算机数值求解,既提高了学生的学习兴趣,同时也使学生有了更多的感性认识和理性认识,增强学生解决实际问题的能力。在流体力学课程教学中, 有意识地穿插计算数学、Fortran语言编程、CFD知识,有助于学生理解流体力学公式及方程,

也可以加强学生对其他学科知识的理解和掌握,达到多学科之间的融会贯通, 触类旁通。为此,笔者对科研成果中相关源源程序、部分开源程序和CFD 软件在工程流体力学课程教学中的应用做了一些探索与实践。

二、 教学案例

(一) 圆管中的层流及紊流教学实例

在工程流体力学教学中,管中流动是主要章节的内容,涉及的理论和公式多,不易理解。圆管流动有层流和紊流两种流动状况。雷诺数是判别流体流动状态的准则数。为加深学生对流速分布和压强分布规律的理解,在教学中可安排课外作业,设置用FLUENT软件来模拟研究三维圆管的层流和紊流流动状况,作出验证分析。

图1为圆管流动入口和出口边界截面的流速分布图(l=2m, d=0.1m)。取流动充分发展部分,离入流边界x/D=1.6的截面其流速分布如图2所示。可以看出流速沿半径Y方向成抛物线分布,与书中理论公式相符,如式(1)所示。通过数值模拟,学生对圆管内流动速度分布有了更深刻的认识。

由图3可以看出圆管内部压强分布从管口处向延伸方向逐渐减小,可知流速相应增大,符合流速大、压强小的流动定律,也符合圆管流动压降的原理。另外从入口处的压强分布可以看出,在圆管任何截面上,其压强分布也不是均匀的,也有分层现象。\

图 3 圆管内部压强分布

图4为圆管轴线上的速度分布。由图可以看出,在圆管的轴上,进口段流速分布变化较大,从进口流速v1=0.005m/s急剧上升到最大流速umax=0.00 848m/s。层流入口段长度有经验公式可以算的,即

L≈0.058 dRe (2)

可算得入口段长度约为1.18m,由图4显示效果可以看出,流速在离入口1.1m到1.2m之间,即入口段长度约为1.1~1.2m,符合书中理论计算结果。

图 4 圆管轴线上速度分布

图5为圆管内部x轴方向不同截面的流速分布,可看出流速在截面上从入口到出口的变化。水流在圆管内部的流速分层很明显,靠近壁面处流速接近于零。

图 5 主流方向截面流速分布图

图6为圆管紊流充分发展段某一截面的流速分布图。从图中可以看出在紊流充分发展段,截面流速散点图最高处几乎为一条直线,说明圆管内大多数流体流速趋于稳定,而是更加平滑。紊流过流断面的流速对数分布比层流的抛物面分布均匀得多,这在理论上符合紊流流速的对数分布律,即:

uu=1Klny+C(3)

图6 Y方向中心轴线的流速分布

(二)管路中的沿程阻力教学实例

在流体力学教学内容管中流动一章的教学实践中,笔者利用前期研发的程序[6]设置了以半扩散角为4o、扩散度为3.92的锥形渐扩管路内的不可压缩流动数值模拟算例,旨在将对接科研成果的教学模式用于辅助工程流体力学课程教学实践。已知条件:锥形渐扩管路前接管直径为30 mm,后续管直径为50 mm,总长度为70 mm。管内流动介质为空气,进口速度为1m/s。 网格模型如图7所示。

图7 锥形渐扩管路系统内流场网格模型

数值计算结果如图8所示。从图中可清晰看出,在突然扩大段,压力逐渐增大,表现扩压效果,但中心线上的速度呈下降趋,若扩散角增大时,在渐扩段会出现局部回流区,这是造成局部能量损失的重要原因。

图8 锥形渐扩管路内压力场

局部阻力误差分析:对于锥形渐扩管的局部阻力,可以用包达定理的形式表示:

hζ=ku1-u222g(4)

其中,k为经验系数。由式可知,锥形渐扩管局部阻力损失理论计算公式为:

hz = ku1 - u2 22g = k1 - A1 A2 2×u21 2g = k1 - A2 A1 2×u22 2g(5)

其中A1为渐扩管上游横截面积,A2为渐扩管下游横截面积(m2),u1为渐扩管上游平均流速(理论值),u2为渐扩管下游平均流速(理论值)。A1 = πd21 4 = π×124,A2 = πd22 4 = π×224,u1=1 m/s,g=9.8m/s2 。代入(5)式得:

hζ理=0.004 305 m

实际流体的伯努利方程为[7]:

Z1 + P1 ρg + u21 2g = Z2 + P2 ρg + u22 2g + hf + hζ (6)

将仿真结果代入上式,其中Z1=Z2=0 P1=-0.03pa,P2=0.4pa,u1=1.06m/s, u2=0.58 m/s, hf=0, 得 hζ模拟=0.00 435m。误差率为:

η=hζ模-hζ理hζ模×100%

=0.00 435-0.004 3050.00 435×100%=1.03%

(三) 后台阶流动教学实例

为让学生对雷诺数有更进一步的感性认识,利用开源CFD程序[8]可设置后台阶流动教学实例,比较不同入流Re数时台阶后涡的大小和长度,现选择四种Re数工况的计算结果进行后处理,得到如图9所示的流线图。从图中可以看出,随Re数的增加,台阶后方主涡的大小呈增大趋势,在Re=1 000时在上方有次生涡的出现。

图9 不同雷诺数下的流线图

三、 教学实践中的几点体会

(一) 理论教学与数值实验教学的合理利用

在工程流体力学理论教学时可结合数值实验教学加以辅助,例如在管中流动一章教学时,可以用上述相关教学实例。由于在进行课堂演示教学时,依计算机性能及不同问题的规模难易程度,数值模拟求解的时间将有不同,要掌握合理数值模拟时间。可采取让学生安装CFD程序及软件,并要求学生事先自学使用方法,尝试数值预测,预习理论知识。然后教师理论教学时对学生预测结果进行抽样调查分析,将理论结果与计算结果比较分析。条件许可的话,也可以通过高性能集群提交计算作业,在较短的时间内获得计算结果。这样学生对复杂的理论就能有深入的认识,同时也锻炼了学生的科研能力。

(二)适当安排精选案例教学

课堂教学演示案例的选取应做到简单且具有代表性。 案例简单能够减少计算机的运行时间,使教学更加紧凑;而有代表性的案例贴近生活或工程实际,则有利于提高教学趣味,开阔学生的视野。由于课堂教学时间有限,因此应在简单演示教学案例的基础上,精心布置较为复杂的课外任务。

(三) 源程序和软件互补

在数值模拟教学中结合利用软件和程序。软件不是万能的,商用软件所能解决的问题是已在学术界得到充分研究的问题,对于科学研究来说,自己编程是必不可少的。一方面,自编程能更好地理解CFD具体实施过程,对商用软件的理解和使用也是有帮助的。另一方面,自编程序还可以更好地对接科研成果,用于工程流体力学课程辅助教学。

四、结 语

通过上述几个数值模拟实例可以看出,数值模拟过程并不太难,但结果更形象直观。借助计算机辅助手段,在工程流体力学课堂教学中,利用CFD软件及源程序进行数值模拟辅助理论教学, 将理论性较强的内容形象化,可以开阔学生的视野, 激发学生的学习兴趣和创新意识, 加深学生对基础理论的理解。此外,通过对接科研成果,用源程序进行数值实验教学还可以培养学生的动手能力和科研能力,丰富数值实验教学内容。参考文献:

[1]J.H. Ferziger, M.Peric., Computational Method for Fluid Dynamics[M]. Springer,2002.

[2]张涵信,沈孟育.计算流体力学―差分方法的原理和应用 [M]. 北京: 国防工业出版社,2003.

[3]傅德薰,马延文.计算流体力学[M]. 北京: 高等教育出版社,2000.

[4]张也影.流体力学[M].2版.高等教育出版社,2009.

[5]郑捷庆,邹锋,张军,等. CFD软件在工程流体力学教学中的应用[J]. 中国现代教育装备, 2007(10):119-121.

[6]何永森,舒适,蒋光彪,等.管路内流体数值计算与仿真[M]. 湖南 湘潭: 湘潭大学出版社,2011.

[7]章梓雄,董曾南.粘性流体力学[M]. 北京: 清华大学出版社,1998.

源程序范文第6篇

杂谈之十七

为了研究正版卡的反制,特别是某地有线类型的高级反制,不仅要研究带Key的EMM,还要关注和跟踪修改EEPROM的EMM。一直关注这些EMM动向的朋友会得到正版卡修改后的EEPROM代码,它们一般以*.BIN的形式给出。朋友们打开装有PC仿真卡的微机程序目录,可以在MyTheatre\Plugins\Nagra\目录下看到不少的这类*.BIN文件。

如果得到了ROM卡的*.BIN文件,就可以了解到正版卡在EEPROM中加入了哪些新的补丁程序或采取了什么反制方法。

研究和了解的第一步是反汇编。反汇编是将机器指令或数据代码转为源程序的一种操作,它是汇编过程的反向操作,是反向工程的一种手段。

一般开发产品,自主编写源程序后,主要的工作是汇编,很少反汇编。但在我国卫视界破解的朋友中,却常常进行反汇编。

原因之一,是因为水平不够,无法自编源程序,只好用国外或国内高手赠送的目标代码通过反汇编来转为源程序,再进行学习和修改,这成了必要的步骤。

原因之二,是研究正版卡的反制方法与原理的需要,必须通过反汇编将EMM或EEPROM中的机器码转为易读的源程序,再进行分析和研究。

汇编是将源程序转换为目标代码的过程,它比较简单,指令或数据转为机器码时都是唯一的,没有二义性;而反汇编就复杂得多!由于二进制代码的多义性,即,同一个字节,可以代表多种信息,它即可以代表CPU的操作指令,又可以代表各种字符、无符号数、带符号数、浮点数和其它种种信息,因此,一般情况下反汇编是不可能返回汇编前的源程序的,如果反汇编能将指令或数据正确区别开来,就是很不错的了。

朋友们可能有疑问:要反汇编的是程序,只要转为助记符指令就可以了,怎么还会有转为数据的问题呢?为什么难以区别程序与数据呢?

原来,程序是指令与数据的集合,程序存储区中即可以存放CPU的指令,又可以存放程序使用的数据,它们都是二进制代码。在源程序中,不仅有CPU执行的指令,也还有程序用到的数据,这些数据是用数据定义伪指令来描述的。指令与数据汇编后产生的目标代码都是二进制数,它们可能是指令也可能是数据,单从二进制代码本身并不能区别出它们是指令还是数据。

以ROM10卡的EEPROM中的部分机器码反汇编为例:

在ROM10.BIN文件中,取从地址$CE18开始的机器码:CD CB 21 00 96 02 70 08 A6 01。

用反汇编软件,如EMMStudio中的Disassembler,反汇编得到的源程序(是错误的)见图17,正确的反汇编应当得到如图18的源程序。

对比以上两个反汇编的源程序,就可以看出,反汇编后的源程序差别有多大!

前面的反汇编没有正确区别指令与数据,得到的源程序将误导阅读者,使之无法了解正确的程序思路。

而后面的反汇编正确区别了数据与指令,阅读者就可以明白程序的思路。

像这样的情形大量发生在某地有线的超级反制程序中,正如Kid朋友给我代码时的附言所讲:“cb 与ce code内,有很多都是特别的subroutine,用emmstudio disassem 时要小心一点,否则会看得不明所以……尤其是‘cd’等字眼,多是地址位置而不是opcode。早一页我post 出的就是例子,自己用emmstudio 时会出现不同结果。而keychange 的bytedump 部分全是random parameters for MAP CALL,再多例子也没分别。”

反汇编是有志研究破解的人必须掌握的技能,它是一个再创造的过程,需要的能力绝不比编程低,不要小看了反汇编的技巧,不信?可以自己试一试将我的程序代码反汇编看看!

杂谈之十八

真正的源程序的价值是非常高的,而简单反汇编得到的所谓源程序就没有什么价值,因为这样的源程序难以阅读,难以修改。

如何能将目标代码转换成为真正的源程序呢?

以下是正确反汇编的基本步骤:

1、反汇编首先要选对反汇编的工具程序DisAssembler,反汇编工具应当针对目标代码适用的CPU。乱抓一个来用,也可以反汇编,但产生出来的是莫名其妙的东西。一般的汇编程序都顺便带有反汇编的功能,也有专门的反汇编工具可以使用。大型的反汇编工具使用起来比较复杂,初学者可以先试试简单的。

2、其次,反汇编得到的源程序要能再汇编成为目标代码,这个目标代码必须与原先用于反汇编的目标代码完全相同,这可以检验反汇编是否基本正确。

3、再次,反汇编得到的源程序必须经过人工的阅读、分析和判断,确定哪些是指令代码,哪些是数据,确定之后,再告诉反汇编工具程序,让它做相应的处理,产生更合理的源程序。这个步骤要反复进行,直到数据和指令正确分离为止。判断哪些是数据,哪些是指令,要有敏锐的观察力。通常,如果出现“Unknown”字样,或不合逻辑的指令(如对同一个变量重复赋值等),或程序没有入口标号等,就可以认为这部分是数据;如果程序中出现了不合理的标号,说明其它地方还存在数据被当成指令的错误。

4、最后,对这种反汇编得到的原始源程序进行人工修改,使用有意义的变量名、常数名和子程序名替换原来没有意义的标号,加上详细的注释,最终才形成真正的源程序。这一步是一个再创造的过程,是反汇编中最难和最关键的工作。不会编程的人,一般无法完成这一步,因此我说:“反汇编是一个再创造的过程,需要的能力绝不比编程低!”是否真正能得到可以供修改和继续开发的源程序,关键都在这一步。可以说,反汇编的工作,工具软件仅仅帮了我们反汇编工作的其中一小部分,仅处理了那些死板的固定套路的事,而关键的智力活动都必需要人来完成。

许多朋友过分相信和依赖工具软件,这是不正确的。好的工具软件可以帮助我们,减轻不少繁琐的劳动。但工具是死的,而人是活的,是创造性的源泉。反汇编这种需要高智力的劳动,更是单纯依靠工具软件不可能完成的。

以下例子是取自146 D卡中的部分Flash程序,用于说明上述反汇编过程:

A. *.HEX格式的Flash程序代码(部分)如图19。

B. 用DISAVR2.EXE来反汇编,得到如图20的代码。

C. 经过人工分析,正确分离出数据和指令,在修改变量名,程序入口名,加上注释,得到最后的源程序见图21(前面这部分是这段程序的理论依据,来自StuntGuy的FAQ,作为注释,放在源程序中,帮助理解和阅读)。

在人介入之前,反汇编得到的源程序没有什么价值;而通过人的智力劳动所得到的源程序,十分便于阅读,可以任意修改、搬移到任意地方、增加或删除指令等等,成为闪亮发光的珍宝!

杂谈之十九

要了解正版卡的反制原理,首先要反汇编ROM卡中EEPROM的程序。ROM卡使用的CPU是ST7,它是STMicroelectronix 8位处理器家族的成员,指令系统与硬件结构向下兼容Motorola的6805计算机,可以直接执行EMM中携带的6805指令集。

通过下行的信号对ROM卡更新后,产生了新的程序。这些新的EEPROM的信息往往以*.BIN文件的形式出现在网站上。我们得到后,可以选择文件中我们有兴趣的一部分信息,交给EMMStudio进行反汇编。之所以选择EMMStudio,是因为EMMStudio专门针对ROM卡,它的反汇编具有一定的智能,可以自动处理变量名、ROM卡中已知的子程序名和特定子程序夹带的数据等,还可以加上注释;之所以只对一部分代码反汇编,是因为EMMStudio对反汇编调入的代码长度有限制,不允许超过4kB即$1000。

下面以某地有线反制的EEPROM程序的反汇编为例,介绍ROM卡的*.BIN文件中部分代码进行反汇编的基本方法:

根据EMMStudio解开的EMM,我们可以看到某地有线下行的EMM中夹带了这样的一段程序(见图22)。

从中我们知道,一切的关键都在$CE02这个子程序中,必须要反汇编存在ROM卡的EEPROM中的地址为$CE02开始的程序。

1、将含有$CE02程序的*.BIN文件读入某种编程器的缓冲区,缓冲区地址从$0000开始。记住ROM10/ROM11文件的*.BIN文件是从$C000地址开始的(见图23)。

2、计算保存文件的开始地址=需要反汇编的程序地址的开始地址-$C090。如,希望反汇编$CE02开始的子程序,则计算出的保存文件开始地址=$CE02-$C090=$0D72。

3、用编程器保存文件的功能,保存一份文件,文件类型为*.BIN,保存的缓冲区地址为计算得到的开始地址,文件长度为$1000。注意:EMMStudio的DisAssembler只接受长度为$1000的文件。例,保存文件名定为:CE02.BIN,开始地址为$0D72,长度为$1000(见图24)。

4、进入EMMStudio,点击DisAssembler功能,点击“Extract BSs Code From EEPROM Image...”,选择在第3步中保存的文件名,将Initial Addresses 和 Code Base都改为程序的真实地址,如在上例中,地址都改为$CE02,选择ROM卡的类型,如ROM10,最后点击“DISASSEMB-

LER!”,完成反汇编(见图25)。

5、当然,特殊的子程序,如后面跟随数据的,反汇编可能不正确,需要人工判读,并采取特殊的处理(处理方法从略)。

杂谈之廿

前几篇“杂谈”谈了不少反汇编的方法,通过反汇编可以阅读程序,了解不少程序的原理,这种方法对于可以得到目标代码的情形,是十分直接和有用的方法,但对于MAP功能,却无能为力,因为MAP程序的代码无法得到!

对于MAP功能的分析,只有通过不断调用MAP的某个功能,用不同的输入数据“喂”给它,观察它的输出从而判断出MAP完成的是何种操作。

由于MAP协处理器在ROM卡的内部,因此要实现不断测试MAP功能的操作,需要特殊的方法:

1、需要编写一段特殊的类似“Trojan Horse(木马)”的程序(我称为“MAPLogger”),该程序的功能是在EEPROM中纪录MAP执行前ROM卡有关内存的数据,然后调用MAP功能,执行后再在EEPROM中纪录MAP调用后ROM卡有关内存的数据。

2、修改ROM卡EEPROM中的部分程序,用MAPLogger的调用取代原先MAP的调用,让MAPLogger程序起作用。

3、将特定的EMM发送给ROM卡,让它执行EMM中的程序,触发引起调用特定的MAP Call,这时,我们埋伏在其中的MAPLogger会起作用,记录下我们希望看到的数据。

4、将ROM卡的EEPROM区读出,取出MAPLogger纪录的数据,供分析和研究。

这种嵌入式Logging的方法是Cracker们研究的常用手段。

对于ROM卡而言,需要的工具与软件有:

1、Phoenix写卡器,写卡器的晶振频率应当为3.68MHz(见图26)。

2、NagraEdit软件(见图27)。

3、XNCS软件(见图28)。

写卡器的作用是配合NagraEdit和XNCS软件,完成以下任务:

1、往ROM10卡中写入*.BIN文件。

2、发送EMM或其它信息。

3、从ROM10卡的EEPROM中读出记录到的信息。

MAPLogger程序由某个高手编写成功,我反汇编后加上注释,列出如下,供参考(见图29)。

MAPLogger的嵌入与使用方法如图30。

这个工作要直接针对*.BIN文件修改,最好要有编程器,调入原来的*.BIN文件,查找定位到要修改的地方,直接将十六进制数改到缓冲区中,存盘后就得到了嵌入MAPLogger的*.BIN文件。

源程序范文第7篇

关键词:SQLeSvrerZ000;oracle11G;存储过程;转换技术

中图分类号:TP311.13 文献标识码:A 文章编号:1007-9416(2017)01-0048-01

1 存储过程的差异和转换

在SQL标准产生之前,数据库所使用的是大量的SQL专用语言,这些专用语言在一定程度上植入了个性化的特征,与此同时广受用户群体的青睐。伴随着SQL标准的相继完善,厂商们所用的专用语言也不断向前发展,在此过程中大量的专用语言被引入程序设计概念,从而实现强大的业务逻辑功能。功能中包含了异常处理机制、流控制语法以及众多的扩展功能。大多数专用语言从根本上彼此之间的规范存有显著的差异,就连在实现功能的技术上也是分门别类,但大量的专用语言中都含有条件处理、循环控制、变量声明赋值和异常处理等一系列程序设计语言机制。

SQL语言是SQLServer源程序当中的专用语言,当中的大部分特性并不能够获得Oarcle数据库专用语言的支持,尽管两者间所要实现的功能是相同的,可是两者之间所用的语言机制且截然不同。更为复杂的情况是两者间的语言特性无法对等实现,为了能够实现拥有这一特性的SQLServer存储过程的转换,需要使用PL/SQL相关语句进行模拟,这一过程中极易造成语义丢失或在结果中出现歧义。

下面以SQLeSrver2000的数据定义语句为例进行转换过程分析,其他语句的转换过程与此类似。

首先给出SQLServer20OO中CREATE PROCEDURE语句简化的上下文无关文法:

::=

CREATE PROC[EDURE]

[{@rameter}[OUTPUT]

][,…,n]

AS[…n]

::=

下面是Oracle11G中CREATEPROCEDURE语句简化的上下文无关文法:

::=

CREATE[OR REPLACE] PROCEDURE[.]

flsme)

[[IN!OUT]

[[IN!OUT〕]…

{IS{AS}{}; ::=

l(INSERT STATEMENT) …

根SQLServer2000的CREATEPROCEDURE语句上下文无关文法可构造实例如下,它是转换程序要进行分析处理的源程序:

CREATE PROCEDURE au_nfo

@lastnamevacrhar(40),

@firstnamevarehar(20)

AS

SELECT * FROM authors

WHERE au_fname=@firstname AND au_Iname=@lastname

2 设计思路及分析

2.1 存储过程转换设计

存储转换的具体设计中转换的前端部分较之程序设计语言编译程序的前端不尽相同,其主要的意义是借助于对Transact-SQL存储过程源程序的分析,从当中获得具体的语义,再转而用中间结构的形式来将其表达出来。后续部分则是依照中间结构进行目标程序的编写,并且目标程序的应与源程序之间使用同一语义。转换之前为了方便获取存储过程的源程序,需在相关数据库之中得到源数据,以实现存储过程源程序文本的最终获取。实施转换的前期我们要保证依托于源程序的数据库对象已经完成了自身向目标数据库的迁移。整体的存储转换是由一系列的功能模块所构成,功能模块相互间的协作与联系如图l所示。

2.2 词法及语法分析

在存储转换过程中的词法分析又被称之为扫描,其所实现的主要功能全部都可以被语法分析模块进行调用,同时也可作为多遍扫描的第l遍独立运行,词法分析主要主要的功能是针对存储过程源程序进行解析。借助于对源程序中每一个字符的读取,遵照相关规则表达式使它们组合成具有特殊意义的单词,所组合成的单词被称为存储过程源程序的最小有意义语言单位。源程序的最小有意义语言单位可以细分为标志符和关键字、分隔符、常量、注释等。

源程序的语法分析也可以称做是解析,其主要是按照Transact-SQL的上下文无关文法进行相关语句的分析,在进行分析的过程中还会在调用的基础上形成中间结构功能代码,也就是进行源程序分析的同时把所会用到的相关信息植入到中间结构中来,与此同时将所生成的中间结构发送给解释模块进行解释。存储转换过程自始至终都由语法分析进行控制,可将这种转换方法称为语法制导转换。

3 结语

通过对SQLServer2000到Oracle11G存储过程转换技术的测试发现,其可自动进行转换占到整体部分的百分之九十,相信随着相关转换技术的不断发展,在不久的将来势必会实现两者之间百分之百的自动转换。

参考文献

[1]徐峰,杨波,柳华霞.用JavaBaen实现对数据库存储过程的替代[J].济南大学学报,2004(l):61-62.

源程序范文第8篇

网站由三部分构成:域名、网站空间、网站源程序(网页代码)。

域名,俗称网址,相当于一个建筑的门牌号码。

网站空间是网络服务机构提供的专业化服务,用于存放网站源程序(网页代码)、应用数据等,主要恒量指标是存储空间大小、提供的网络服务速度、服务形式等。网站空间相当于一个建筑,评价指标相当于建筑面积(有效存储空间),温度、湿度等存储条件,配套交通条件等。

网站源程序(网页代码)是专业技术人员开发的计算机程序。可实现声音、图片、动画、文字等多种形式表现网站内容。

二、网站域名的申请

按行业,网站域名可以分为商业机构(com)、网络服务机构(net)、非营利性组织(org)、政府机构(gov)、教育机构(edu)、军事机构(mil)等。按等级,域名分为国际顶级域名(解析服务器主要设在美国)、国家、地区二级域名等,中国域名后缀为cn。域名的申请与商标注册一样采取时间优先原则,谁先申请注册,谁先拥有。

域名策划要能够代表企业,又便于记忆的英文缩写等,如CCTV等。可以到www.省略等中介机构查询拟注册的国际域名是否已经被注册,到www.省略等中介构查询是否已被注册。

域名通过互联网组织申请,如新网、万网等,这些机构同时提供域名解析服务。国际域名com价格一般首年约68元,国内域名一般首年约为168元。

三、网站空间申请

域名空间有多服务形式:虚拟空间(虚拟主机)、主机托管、服务器集群等。虚拟空间(虚拟主机),将一台专用计算的磁盘空间分割成若干份额,分配给多个客户,提供存储服务。此种形式较适合个人和小型企业。容量大小是衡量网站空间的重要指标之一。小企业一般选择100M空间能够用,服务费用每年约为168元。

四、网站源程序

网站源程序,通常由专业技术服务公司开发完成,一般分为需要分析、总体设计、美术平面创意开发、计算机技术程序开发、数据库性能优化等工作步骤。目前,主流技术方案有asp、jsp、php、html等。国内网站采用asp技术较多。在网站源程序开发过程中,企业要与开发公司充分交流,明确网站建设的目的、建设目标、艺术风格、表现形式等,在开发过程中,企业应参与开发过程,掌握开发进度,了解开发内容,开发出满足用户需求的网站。

五、几点注意事项

1.域名注册商及服务价格

注册域名时,尽量选择规模大、服务好的域名注册服务商。国内域名服务机构排名:

新网()、万网(HICHINA)、新网互联(.CN)、三五互联()、中资源()、商务中国()、时代互联()、易名中国()、铭万(MAINONE.省略(新购/续费):49/68元(新网),60/68元(商务中国、万网)。

中国国家顶级域名.省略(新购/续费):65/65元。

中文通用域名.中国/.公司/.省略(新购/续费):80/80元(新网),130/130元(商务中国)、85/85元(万网)。

中文.tv(新购/续费): 350/350元(新网),350/380元(商务中国)、280/280元(万网)。

.省略/.省略/.org(新购/续费):55/68元(新网),60/68元(商务中国)、80/80元(万网)。

.tel(新购/续费):100/100元(新网),90/80元(商务中国)、90/90元(万网)。

.me(新购/续费):180/180元(新网、Enom),130/130元(商务中国)、140/140元(万网)。

.asia(新购/续费):100/100元(新网),120/120元(商务中国、万网)、180/180元(Enom)。

.省略(新购/续费):200/200元(新网),180/180元。

.省略(新购/续费):130/130元(新网、商务中国),120/120元(万网),110/110元(Enom)。

.省略(新购/续费):360/360元(新网、商务中国)、400/400元(万网),350/350元。

中文.省略(新购/续费):150/150(新网),320/320元。

2.网站空间的选择

网站空间建议选择规模较大、具有专业机房的IDC服务商。我国南方电信公司网络建设规模较好,客户较好,我国北方联通公司网络建设规模较好,客户较好。选择网站空间考虑是用电信还是联通的,如果主要客户是全国性的,建议选择具有双线(电信公司和联通公司)。

3.网站源程序

网站源程序开发是网站建设的关键和核心环节,是网站建设工作的重中之重,网站源程序开发,既要考虑当前公司业务需要,同时要公司快速发展,对网站建设和升级的进一步需要,要有一定的前瞻性。在网站源程序开发中,要与开发公司充分交流,就网站艺术风格、表现形式、表现内容等全面达到共识,明确网站形成的知识产权,开发进度、验收标准、网站的技术升级及后续服务等,签订技术服务合同,同时,在开发的过程中,要分阶段,对开发工作进行监督,保证开发工作,按照合同进行,防止出现返工等重复劳动。工程竣工后,应按照合同,完成源程序的上传外,同时,还应收完成网站源程序、全部技术文档、合同文本等资料归档,保证技术文件的齐全、有效,为网站顺利运行、后续维护、技术升级等做好准备。

4.网站推广运行

源程序范文第9篇

【关键词】FPGA;VHDL;可变模计数器

1.引言

EDA是将数字系统以某一种特定的表达方式输入计算机开发平台进行处理,经由综合,仿真,下载到目标芯片,最终实现设计的智能化设计技术。其中输入文件的种类众多,有原理图输入法、硬件描述语言输入法、状态图输入法、波形输入法等。

硬件描述语言(HDL)是EDA技术的重要组成部分,是设计数字系统的重要表达手段,和原理图输入法,波形输入法相比,具有灵活度高,易于修改、升级,方便调用,库资源丰富等优点。常见的HDL主要有VHDL、Verilog HDL、ABEL、AHDL等,其中标准化语言VHDL、Verilog使用最广泛,可以被几乎所有的EDA工具支持。

可变模计数器是数字系统中广泛应用的一种电路模块,本文讨论了一种基于VHDL语言实现的可变模计数器的EDA设计方案,采用FPGA芯片作为设计载体,FPGA具有在线可重构的优点,如需对计数器的技术指标进行修改,只需修改源程序中的相应参数,重新进行编译、仿真、配置即可,使得系统本身灵活性好,便于升级和维护。

2.可变模计数器的功能指标

本文设计的计数器为5位输出可变模计数器,采用两位控制信号选择计数的模值,因此可进行四种模值的切换。计数器在工作时,可以通过控制信号m[1:0]的值选择相应的模值m,计数时,在每个时钟的上升沿进行加法计数,从0计到m-1,然后自动归零循环计数。在本设计中,输出端口为5位,可以实现模小于等于32的计数应用。如果需要增可选择模值的数量,只需要增加选择控制信号位数即可。随着模值的增大,还可以相应增加输出端口信号的位数来对应。

3.可变模计数器的实现方案

在本设计中,采用VHDL语言进行源程序的设计,源程序由实体和结构体两个部分组成,在实体中定义了系统的输入输出端口,在结构体中行描述了计数器的逻辑功能。令两位控制信号分别为m1、m0,计数脉冲为clk输入时钟信号,计数值输出为5位二进制信号y。假设当控制信号m[1:0]=0时,进行模19计数;m[1:0]=1时,进行模4计数;m[1:0]=2时,进行模10计数;m[1:0]=3时,进行模6计数.该程序通过信号传递参数,如果想修改计数器的功能指标,只需要修改源程序中相应的端口参数和信号参数即可,修改设计非常方便、灵活。采用VHDL描述的源程序如下:

以上源程序在集成开发环境下通过综合和适配,将行为和功能的高层次表达转换为门电路的低层次表达,最终在硬件上实现系统功能。

4.可变模计数器的编译与仿真结果

将编写好的源程序与实体名variable_m同名保存在工程项目路径下,文件名后缀为.vhd。本设计采用的芯片是Altera公司的Flex10k系列FPGA芯片EPF10K30ETC144-1,源文件通过编译后系统的提示编译成功,如图1所示。

建立波形仿真文件,设置控制信号m[1:0]的值分别为0和,2,在仿真窗口观察仿真波形,仿真结果正确。仿真波形见图2、图3。

5.结束语

在本文编写的源程序中,输出端口y的范围定义为0到20,是由于计数的模最大设置为19的缘故,这个定义在源程序编译后,会由编译器自动生成一个5位二进制的输出端口,即实际的输出端计数范围是0到31,而源程序中设定的计数模最大不能超过32。如果需要增加计数模的值,在定义端口y的时候,就要增大y的输出范围,而系统进行编译的时候会自动生成相应位数的输出端口,从这点来看,VHDL语言设计的灵活性要远远好于原理图输入法、状态图输入法、波形输入法。

参考文献

[1]潘松,黄继业.EDA技术实用教程[M].北京:科学出版社,2002.

[2]杨晓慧,杨永健.基于FPGA的EDA/SOPC技术与VHDL[M].北京:国防工业出版社,2007.

[3]谭会生,瞿遂春.EDA技术综合应用实例与分析[M].西安:西安电子科技大学出版社,2004.

[4]吴继华,王诚.Altera FPGA/CPLD设计(高级篇)[M].北京:人民邮电出版社,2005.

源程序范文第10篇

关键词:智能阅卷;正则表达式;无纸化考试;C#编译器

中图分类号:TP312 文献标识码:A 文章编号:16727800(2012)011004603

________________________________________

基金项目:常熟理工学院青年教师科研启动基金项目(QZ1107)

作者简介:黄瑜岳(1978-),男,硕士,常熟理工学院计算机科学与工程学院讲师,研究方向为无线传感器网络、算法设计。0 引言

随着计算机辅助处理、网络技术和多媒体技术的飞速发展,越来越多的课程考核都实现了基于网络的无纸化考试。网络无纸化考试系统具有组织方便、不受时间和地域限制、可以快速客观地给出考试成绩和降低考试成本等优点。考试系统中关于选择、判断和填空等主观题的自动阅卷算法只需根据学生的答案与标准答案的匹配结果即可判定得分,算法简单且成熟。然而,程序设计中的主观题由于实现方法的多样性可以具有多种解法,因此,没有唯一的标准答案,即使有,结果的匹配算法也相当复杂,难以实现,给主观题的计算机自动评阅带来了困难。

巨同升学者针对现有C语言程序自动阅卷系统的不足,提出了利用Windows管道技术和创建进程的方法实现C语言程序自动阅卷的思路及实现方法;余梓唐提出了通过匿名管道进行数据输入输出的实现方法,分析了自动评判机制中的主要问题及解决方法。丁卫平等学者针对C程序设计主观题评阅问题,提出了基于阅卷可信度和程序机器智能理解相结合的算法来进行程序设计题评计分数的方法,该方法具有较好的公正性和合理性。

C#是一种优秀的面向对象的程序设计语言,它拥有C/C++和Java等语言的优点,是当前主流的程序设计语言之一。在面向对象程序设计的基础教学中,控制台程序由于简单且运行方便,往往作为主要的练习对象。因此,本文针对C#控制台程序的特点,利用.net自带的csc编译器工作原理,提出了一种基于正则表达式的智能阅卷算法,综合考虑源程序的语法和得分点等,模拟人工阅卷的过程得出较为合理的判分结果。

1 程序设计主观题评阅方法比较

程序设计主观题的评阅主要分人工评阅和计算机自动评阅两种,各有优缺点。

1.1 人工评阅

一般来说,针对程序设计主观题的阅卷,人工阅卷方式受主观因素的影响较大。评阅过程中教师往往是凭借参考答案中的得分点,利用肉眼在学生源程序中查找匹配,效率低下。同时,由于同一功能可采用不同的语句实现,使评判的标准因人而异,缺乏客观性,且容易遗漏。另外,人工评阅方式一般不会考虑程序中存在的语法错误与运行结果是否正确等问题。

1.2 计算机自动评阅

主观题的计算机自动评阅相对人工评阅来说效率高,但目前还没有非常成熟的研究成果,现有自动评阅系统如文献[2]和文献[3],主要是通过调用相应编译器对学生的源程序进行编译运行,可以快速地获得学生程序的编译和运行结果,然后凭借运行结果的正确与否来判定其得分,对于错误结果的源程序只能借助于手工阅卷的方式来实现,显然也是不够理想。

因此,针对像C#这样的程序设计主观题评阅需要设计一种既能考虑得分点和语法分,又具有计算机评阅高效性的自动评阅算法,以获得满意的判分结果。

2 智能评阅算法与步骤

本文智能评阅算法思路是:首先,将获取的学生源代码交给代码预处理模块进行预处理;然后,将经过预处理的代码交给编译运行模块处理,对不能编译、存在死循环以及运行结果不正确的交给得分点匹配模块处理;最后,得出本题学生的最终得分。具体算法步骤如下:

(1)获取学生提交的C#程序代码存入字符变量CSource中。

(2)将CSource进行代码预处理并存入stuf.cs文件中,初始化本题的得分变量score=0。

(3)创建进程Pcsc调用TinyCC的编译程序csc.exe stuf.cs直接运行源文件stuf.cs。

(4)判断编译是否成功,如成功则语法分yf为满分,否则,转9。

(5)通过线程运行stuf.exe文件。

(6)根据题目的类型判断本题是否需要输入参数,如果有,就从数据库获取本题的分值、测试数据testArgs以及测试数据对应的结果信息Tresult,并将测试数据放入进程Pcsc的输入流,否则,只获取本题的测试结果Tresult,转7。

(7)如果在指定的时间(1s)之内没有获得运行结果,那么,判定存在死循环,转(9),否则,转(8)。

(8)如果result=Tresult,那么程序正确,本题Tscore获得满分,转(10),否则,转(9)。

(9)循环读取每一行程序代码,对每行代码与所有得分点的正则表达式进行匹配,如果有相应得分点匹配成功,则Tscore累加得分点分值。

(10)结束。

智能评阅算法流程图如图1所示。

图1 智能阅卷算法流程

3 主观题智能评阅算法的关键技术

要实现上述智能评阅算法,需要解决的关键技术有程序预处理技术、基于正则表达式的得分点描述技术以及在线编译运行源程序技术等。

3.1 源程序预处理技术

学生的源程序是不可预知的,里面存在大量影响评阅的无用字符,必须对源程序进行预处理,除掉跳格符、回车符和换行符等编辑性字符,为正则表达扫描提供了很大的方便。同时,程序也可能存在威胁系统的恶意代码,比如格式化硬盘、删除分区、移动文件、复制文件、删除文件等命令,必须先进行检测,预先做好防范,以提高系统的安全性。

3.2 基于正则表达式的得分点描述技术

C#程序设计主观题不同于选择、判断等主观题,其答题过程受主观因素的影响很大。程序中所使用的变量名因人而异,且同一功能可以采用不同的语句来实现,比如求1~100的和,可以用for循环也可以用while循环。如果参考答案中将for循环是否答对作为得分点,那么,在出题时除非限定学生使用for循环,否则,对得分点的判定将无法实现。

解决这一问题的技术就是正则表达式(Regular Expression),它是强大、便捷、高效的文本处理工具,赋予使用者描述和分析文本的能力。上述问题可以描述为如下形式:

While((w+)(,++)?

然后,利用这一正则表达式描述,灵活地对错误源程序进行静态的得分点匹配,只要学生答对了相应的知识点,就能得到相应的分数。

3.3 源程序的在线编译与运行技术

学生的C#源程序是否存在语法错误,是否能运行,需要通过C#编译器编译后才能确定,想要编写一个C#语言的编译系统是一件非常困难的工作。好在.net提供了C#的编译器csc.exe,可以采用类似文献[2]中的方法直接通过线程调用该编译器来实现对C#源程序的编译工作,获取编译结果。如果程序没有编译错误,将获得一个可以运行的可执行文件,然后,可以通过线程执行该可执行文件,配合预先设置的测试数据获取程序运行结果,最后,根据运行结果与测试结果的比较,决定进一步的处理。以下是用C#实现的在线编译的关键代码:

//创建进程信息对象psi

ProcessStartInfo psi= new ProcessStartInfo();

psi.FileName = @"framework安装路径v3.5csc.exe";

psi.WorkingDirectory = @"源文件路径";

psi.Arguments = @"stuf.cs";

//重定向标准输出到流

psi.RedirectStandardOutput = true;

//重定向标准输入为流

psi.RedirectStandardInput = true;

//重定向标准错误信息到流

psi.RedirectStandardError = true;

//不使用shell启动进程

psi.UseShellExecute = false;

//不显示窗口

psi.CreateNoWindow = true;

//创建pcsc进程并运行

Process pcsc = Process.Start(psi);

p.WaitForExit();

//获取输出信息

string output = p.StandardOutput.ReadToEnd();

编译成功后产生的stuf.exe文件的调用类似,不再赘述。

3.4 程序死循环的处理技术

学生程序可能存在死循环的情况,针对这一情况可以通过检测进程运行时间是否超过设定的时间来解决,一般而言,学生程序如果没有死循环的话可以在几十毫秒内结束运行并给出运行结果。因此,可以设定一个超时阀值,当进程运行时间超过这一阀值的时候系统即任务程序存在死循环,直接终止进程的运行将源程序交由得分点匹配模块处理,相应的关键代码如下:

//p为调用stuf.exe的进程

while (!p.HasExited)

{//ts为实时获取进程运行时间

TimeSpan ts = DateTime.Now - p.StartTime;

if (ts.Milliseconds > 1000) //判断超时

{

if (!p.HasExited)

{

p.Kill();//强制结束进程

return;

}

}

}

4 实例计算

为了全面验证基于正则表达式的智能评阅算法的评阅效果,选取了5套C#编程题的评阅数据作为测试样本,测试结果如表1。从表中人工阅卷和智能评阅的最终平均得分来看,本文提出的基于正则表达式的智能评阅算法所获得的评分结果非常接近人工评阅的结果,有效地模拟了人工阅卷的过程,且运行稳定、可靠。

表1 测试结果

题号 分值构成

满分 语法分 知识要点分

平均得分

人工评阅 自动评阅

1 6 2 4 5.8 5.7

2 9 3 6 8.0 8.2

3 9 3 6 7.8 8.1

4 10 3 7 9.0 8.7

5 10 3 7 7.7 7.5

5 结语

本文提出的基于正则表达式的C#程序设计主观题智能评阅算法有效地模拟了人工阅卷的过程,既考虑了程序的语法和知识点得分,又具有计算机自动评阅的高效性。但知识点的正则表达式描述比较复杂,需要出题人员熟悉正则表达式的描述,才能获得较好的评阅效果。因此,需要进一步设计得分点正则表达式自动生成的工具,以弥补这一不足。

参考文献:

[1] 高思丹,袁春风.主观试题的计算机自动批改技术研究[J].计算机应用研究,2004(2).

[2] 巨同升.C语言程序自动阅卷系统的改进[J].山东理工大学学报:自然科学版,2010(5).

[3] 余梓唐.C语言源程序的自动评判系统[J].计算机时代,2010(4).

[4] 丁卫平,管致锦,王杰华.计算机等级考试智能考试模式的研究[J].电气电子教学学报,2009(4).

上一篇:屏幕保护程序范文 下一篇:汇编程序范文