- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[建筑]编程基本能力和技巧
编程基本能力和技巧
1 数组及其应用这里还是只讲一些应用,基础知识自己看书或我提供的几个INTERNET资源。1.下标的灵活运用例如对称的情形,可以把下标设成:a:array[-5..5] of integer;只要a[i]:=a[-i];就进行了一次“对称”的赋值。
2.常量数组善用可以减少不少程序量。例如P1-9《公式变形》。我的参考程序只有三十多行,主要是因为灵活的应用了数组,包括一个常量数组一个变量数组,减少了不少麻烦。
典型的常量数组有:
增量型:如在国际象棋棋盘上“马”的八个方向的活动可以用两的增量数组表示:dx:array[1..8] of shortint=(1,2,2,1,-1,-2,-2,-1);dy:array[1..8] of shortint=(-2,-1,1,2,2,1,-1,-2);移动第d个方向只需要:x:=x+dx[d];y:=y+dy[d];
枚举型:例如平年一年第N个月的天数:dcount:array[1..12] of shortint=(31,28,31,30,31,30,31,31,30,31,30,31);便于修改。
3.避免下标越界方法是{$R+}
4.数组的插入与删除虽然数组应该避免频繁的插入与删除,但有时不可避免。方法如下:插入:插入点以后每个元素往后移动一个位置,再插入:for i:=len downto p doa[i+1]:=a[i];a[p]:=x;inc(len);
删除:删除点以后的每个元素往前移动一个位置,如:for i:=p to last doa[i]:=a[i+1];dec(len);
2 字符串处理
字符串处理因为其灵活性常使初学者头疼!我以前也怕它,不过很快就适应了。一般常用的处理是:(以下的例子中s是一个字符串)1.扫描字符
第i个字符是s[i]例如s=Hello, world!则s[1]=H, s[6]=,, s[7]= ; s[13]=!s的长度是length(s)
那么把字符串反转后输出的方法就是for i:=length(s) downto 1 dowrite(s[i]);
2.定位就是查找子串例如s1=Hello, my friend!;s2=my;
则pos(s2,s1)=8,即s2在s1的第8个字符处出现但pos(him,history)=0,因为him在history中并不出现
3.分割,合并,删除仅举几个例子。1)copycopy(Hello, my friend!,3,2)=ll
2)delete若s=Hello, my friend;执行delete(s,4,4)后s=Helmy friend;
3)s1=Hi,;s2=Alan;则s1+s2=Hi,Alan
4.与数字互化s=1234;执行val(s,v,code)后v=1234; code=0; code=0说明成功的将字符串转化为了数字,否则code0
v=4567;执行str(v,s)后s=4567;
5.字符的ASCII码请自己看有关的书籍,一定要掌握!
注意:对于时间要求严格的题目,字符串操作的时间问题也不能忽视。
6.一个例子:输入k个字符串(中间可能有多个空格),把他们反着连在一起输出。如:输入:abc d e f gh输出:ghfedabc分析:只要把空格删除,就可以得到这些字符串。varp:integer;s,s2:string;beginreadln(s);s2:=;repeatwhile s[1]= do delete(s,1,1); {删去开头的多余空格}p:=pos( ,s); {找第一个空格};if p=0 then s2:=s+s2 {没有找到}else begins2:=copy(s,1,p-1)+s2; {加入到s2的前面}delete(s,1,p); {删去}end;until p=0; {没有空格了}writeln(s2);end.
3 整数的处理主要是利用数学工具了。下面举几个例子。1.求最大公约数gcd(greatest common divisor)用欧几里德辗转相除法:function gcd(a,b:longint):longint;beginif a mod b=0 then gcd:=belse gcd:=gcd(b,a mod b);end;
2.求最小公倍数利用(a,b)*[a,b]=a*b 即可。例如:100和140的最大公约数为20,那么最小公倍数=100*140 div 20=700
3.分离数字很简单,涉及到数字的问题都可以借助于字符串。例如反
文档评论(0)