| 61.186.173.* |
1楼 一、几个重要的函数和运算符 ODD()、TRUNC()、ORD()、CHR()、ROUND()、DIV、MOD、INC()、DEC() 例如:PROGRAM SAMPLE; VAR X:INTEGER; BEGIN X=5; WRITELN(ODD(5)); {true} WRITELN(ORD('a')); {97} WRITELN(CHR(97)); {'a'} WRITELN(ORD(true)); {1} WRITELN(TRUNC(3.7)); {3} WRITELN(ROUND(3.7)); {4} WRITELN(-4 DIV 3); {-1} WRITELN(3 DIV -4); {0} WRITELN(-4 MOD 3); {-1} WRITELN(4 MOD -3); {1} WRITELN(-3 MOD 4); {-3} WRITELN(3 MOD -4); {3} INC(X); {X:=X+1} WRITELN(X); {6} INC(X,-3); {X:=X+(-3)} WRITELN(X); {3} DEC(X); {X:=X-1} WRITELN(X); {2} DEC(X,-3); {X:=X-(-3)} WRITELN(X); {5} END. 二、三个重要的退出语句 HALT 结束程序,返回操作系统 EXIT 结束过程或函数,返回调用处(在主程序中同HALT) BREAK 是用来退出其所在的循环语句(CONTINUE是继续当前循环) 三、几种语句结束时可以不用分号的情况 1、程序或过程的最后一条语句 2、复合语句的最后一条语句(BEGIN ....END为复合语句) 注:1和2可总结为每一对BEGIN和END之间的最后一条语句 3、IF <布尔表达式>THEN 语句1 ELSE 语句2;(注意:此型IF语句中语句1后不能有";"号) 四、FreePascal中的基本数据类型 预定义整型<--tex4ht:label?: x26-260022--> <--tex4ht:inline--> 类型 范围 长度(字节) Byte 0 .. 255 1 Shortint -128 .. 127 1 Smallint -32768 .. 32767 2 Word 0 .. 65535 2 Integer either smallint, longint or int64 size 2,4 or 8 Cardinal either word, longword or qword size 2,4 or 8 Longint -2147483648 .. 2147483647 4 Longword 0..4294967295 4 Int64 -9223372036854775808 .. 9223372036854775807 8 QWord 0 .. 18446744073709551615 8<--lcr--> 支持的实型 <--tex4ht:label?: x27-300014--> <--tex4ht:inline--> 类型 范围 有效宽度 长度(字节) Real platform dependant ??? 4 or 8 Single 1.5E-45 .. 3.4E38 7-8 4 Double 5.0E-324 .. 1.7E308 15-16 8 Extended 1.9E-4951 .. 1.1E4932 19-20 10 Comp -2E64+1 .. 2E63-1 19-20 8 说明:数据类型受计算机硬件和操作系统的制约,故有些类型在你的计算机中不一定能实现 在初始化最小值时,要给他一个最大值;在初始化最大值时,要给他一下最小值。在FreePascal和TurboPascal中,MAXINT和MAXLONGINT分别代表最大的INTEGER和LONGINT,则最小的就分别为MAXINT-1和MAXLONGINT-1,具体是多少见上表 五、文件的标准操作 PROGRAM ONE(INPUT,OUTPUT); 在程序的头部声明标准输入输出文件变量 CONST INFILE='C:\IN.TXT'; OUTFILE='C:\OUT.TXT'; ... 或者 VAR INFILE,OUTFILE:STRING;{通过键盘输入 ,且输入一定要在文件定义前,因为一旦标准输入输出文件被定义则键盘和显示器在本程序中就被文件代替了,即便关闭文件也是如此且不能在输入输出了} BEGIN ASSIGN(INPUT,INFILE); ASSIGN(OUTPUT,OUTFILE); RESET(INPUT); 打开文件准备读 REWRITE(OUTPUT); 打开文件准备重写,要追加写用APPEND ... READ(?); 读一个数据 READLN(?); 读一行数据 READLN; 读换行符,这样之后才能读到下一行的数据 ... WHILE NOT EOLN(INPUT) DO BEGIN ... READ(?) ... END; 一个一个的读,直到一行读完 WHILE NOT EOF(INPUT) DO BEGIN ... END; 操作一直到文件尾 ... CLOSE(INPUT); 关闭输入文件,则不能输入 CLOSE(OUTPUT); 关闭输出文件,则不能输出 END. 说明:在完成了上述操作准备后,C:\IN.TXT文件将代替键盘做为程序的标准输入源;C:\OUT.TXT文件将代替显示器做为程序的标准输出; |
|
|
- 共有8篇贴子
| 61.186.173.* |
2楼 标准函数。Turbo Pascal语言提供了自变量为整型量的标准函数有顺序函数算术函数和转换函数等。 标准函数是Turbo Pascal语言预先定义的,它们实际上是能完成特定功能的称步子程序的程序段。每个标准函数都用一个标识符来标识,每个标准函数都能完成一个特定的功能,在程序中可以直接调用它们。Turbo Pascal语言中某些标准函数与数学中的函数有相似之处。 一、整数类型函数 整型是顺序类型,即所有的整型数都是按一定的顺序排列的。如3的后序数是4,350的后序数是351。以后介绍的布尔型、字符型、枚举类型和子界类型等都是顺序类型。顺序函数可以对顺序类型数据进行操作,但要注意它们自变量的取值范围。 ①前趋函数:Pred(x)函数值为x-l,例如: Pred (6)=5 Pred (-2.1)=-22 ②后继函数:Succ (x)函数值为x+l,例如: Succ (l5)=16 Succ (-114)= -113 ③绝对值函数:Abs (x)函数值为|X|,例如: Abs (-119)=119 Abs (101)=101 ④平方函数:Sqr (x)函数值为X2,例如: Sqr (-5)=,25 Sqr (l0)= 100 以上四个函数的结果仍是整型数。 ⑤奇函数:Odd (x),函数的结果为布尔型。当X为奇数时,函数值为true;当X为偶数时,函数值为false。例如: Odd (13)= True Odd (16)= False ⑥字符函数:Chr (X),函数值是序号的ASCII字符,属字符型。例如: Chr (65)=’A’ Chr (32)=’ ’ 二、实数类型函数 在下列算术函数中,X可以是实型或整型数的表达式。对于函数Abs和Sqr,其结果类型和变量X的类型相同,其他算术函数的结果类型都是实型。 绝对值函数Abs(x):函数值为x的绝对值 平方函数Sqr (x):函数值为x的平方 小数函数Frac (x):函数值为x的小数部分 整数函数Int (x):函数值为x的整数部分 正弦函数Sin (x):函数值为x的正弦,其申,的单位为弧度 余弦函数Cos (x):函数值为x的余弦,其中,的单位为弧度 指数函数Exp (x):函数值为了ex 对数函数Ln (X):函数值为x的自然对数 平方根函数的Sqrt (x):函数值为x的平方根 反正切函数Arctan(x):函数值为x的反正切,单位为弧度 随机函数Random:无自变量时,函数值取(0,1)间的随机小数;有自变量且为Word类型时,函数值取(0,自变量)间的随机整数。 三、字符类型函数 Turbo Pascal语言提供如下自变量为字符型的标准函数,其中Chr为字符型。 后继函数Succ (ch):例如,Succ (’8’)=’9’ Succ (’E’)=’F’ 对字符集的最后一个字符,Succ函数无意义。 前趋函数Pred (ch):例如,Pred (’7’)=’6’ Pred (’B’)=’ A’ 序数函数Ord (ch)::给出字符ch在ASCII字符集中的序号,结果为整型。 注意:Ord (’7’)<>7,正确的是:Ord (’7’)=Ord(’0’)+7=48+7=55 若ch是数字字符,则Ord (ch)-Ord ('0')是该数字字符的数值。例如:Ord (’7’)-Ord(’0’)=7 前面介绍的字符函数Chr (i)是Ord (ch)的逆函数。例如: Chr (55)= ’7’ Chr (Ord(’A’))=’A’ 三、布尔类型函数 Turbo Pascal语言提供布尔型函数主要是几个字符型函数。 Ord (B) 例如:Ord (false)=0 Ord (true)=1 |
|
|
| 61.186.173.* |
3楼 Pascal语言的大小写不敏感特性有一个例外:控件包中的Register 过程必须以大写字母R开始,因为需要与C++Builder 兼容。 ,编译器不编译代码中的空格、空行和Tab键空格,这些元素通称为空白,它们只用来提高代码的可读性,不影响编译过程。(也就是说: = 这样的写法没有问题,我原来还以为由问题那!) 记住要用代码模板(方便开发)快捷键:Ctrl+J Absolute 关键字是共享变量地址有些象C++的共用体 var Str: string[32]; StrLen: Byte absolute Str; 与大多数编程语言相反,Pascal语言中and和or运算符的优先级比关系运算符高。因此,如果你的代码为a < b and c < d,编译器首先会编译and运算符,由此导致编译出错。为此你应该把每个 < 表达式用小括号括起来: (a < b) and (c < d)。 集合,集合除了 并(+)差(-) 交(*) 等可以用INCLUDE和EXCLUDE效率更高 Include (Style, fsBold); 当时间和日期转换成字符串时,其转换格式取决于Windows 的系统设置。 Round转换一个实型值为四舍五入后的整型值 注意:在最近版本的Delphi Pascal 编译器中,Round 函数是以 CPU 的 FPU (浮点部件) 处理器为基础的。这种处理器采用了所谓的 "银行家舍入法",即对中间值 (如 5.5、6.5) 实施Round函数时,处理器根据小数点前数字的奇、偶性来确定舍入与否,如 5.5 Round 结果为 6,而 6.5 Round 结果也为6, 因为 6 是偶数。并不只是DELPHI这样(VB也这样 ) 注意:一般来说,你应该避免使用上述不命名类型,因为你不能把它们作为参数传给例程,也不能用于声名同一类型的其他变量。实际上,Pascal的类型兼容规则是基于类型名的,而不是基于实际的类型定义。两个类型相同的变量仍有可能是不兼容的,除非他们的类型有完全相同的名字。对于不命名类型,需要编译器给它分配一个内部名字,因此对于数据结构复杂的变量,要习惯于定义命名数据类型,你一定不会为此白费工夫的。 Delphi 编译会通过,但在运行时,如果你开启了范围检查编译选项(在工程选项对话框的编译器页设置),你将得到 Range check error (范围检测错误)信息。 注意:建议你在开发程序时开启上述编译选项,以使程序更健壮并易于调试。这样即使遇上错误,你也会得到一个明确的信息而不是难以琢磨的行为。最终完成程序时你可以去掉这个选项,使程序运行得快一些,不过影响很小。因此我建议你开启所有运行时的检测选项,如溢出检查和堆栈检查,甚至提交程序时仍然保留它们 Delphi 长字符串的情况略有不同,长字符串看起来象引用,但是如果你改变了该字符串的串变量,那么这个串在更新前将被拷贝下来。作为值参被传递的长字符串只在内存使用和操作速度方面才象引用,但是如果你改变了字符串的值,初始值将不受影响。相反,如果通过引用传递长字符串,那么串的初始值就可以改变。 实质上字符串的值传递类似引用,只不过系统在幕后进行了操作,这样效率会低。 在Delphi中不常使用指针,但是你经常会用一个极为相似的结构--引用(references)。每个对象实例实际上是一个隐含的指针,或说是对其实际数据的引用,利用引用,你能象用其他数据类型一样使用对象变量。 当通过引用传递参数时,引用参数用关键字var 标示 procedure DoubleTheValue (var Value: Integer); Delphi 3增加了一种新的参数:out。out参数没有初始值,只是用来返回一个值。out参数应只用于COM过程和函数,一般情况下最好使用更有效的var参数。除了没有初始值这一点之外,out参数与var参数相同。 常量参数,不能够在过程或函数中改变传递过来的值。只可使用。 果你只传递数组的一部分,可使用Slice 函数, 明一个过程或函数,而且只给出它的名字和参数,不列出其实现代码,需要在句尾加forward 关键字: 关键字表 关键字 作用 |
|
|
| 61.186.173.* |
4楼 abstract 指令 (方法) and 运算符 (布尔) array 类型 as 运算符 (RTTI) asm 语句 assembler 向后兼容 (汇编) at 语句 (异常处理) automated 访问类别符 (类) begin 块标记 case 语句 cdecl 函数调用协定 class 类型 const 声明或指令(参数) constructor 特殊方法 contains 运算符 (集合) default 指令 (属性) destructor 特殊方法 dispid dispinterface 界面类别符 dispinterface 类型 div 运算符 do 语句 downto 语句 (for) dynamic 指令 (方法) else 语句 (if 或 case) end 块标记 except 语句 (异常处理) export 向后兼容 (类) exports 声明 external 指令 (函数) far 向后兼容 (类) file 类型 finalization 单元结构 finally 语句 (异常处理) for 语句 forward 函数指令 function 声明 goto 语句 if 语句 implementation 单元结构 implements 指令 (属性) in 运算符 (集合) - 工程结构 index 指令 (dipinterface界面) inherited 语句 initialization 单元结构 inline 向后兼容 (见 asm) interface 类型 is 运算符 (RTTI) label 声明 library 程序结构 message 指令 (方法) mod 运算符 (数学) name 指令 (函数) near 向后兼容 (类) nil 数值 nodefault 指令 (属性) not 运算符 (布尔) object 向后兼容 (类) of 语句 (case) on 语句 (异常处理) or 运算符 (布尔) out 指令 (参数) overload 函数指令 override 函数指令 package 程序结构 (控件包) packed 指令 (记录) pascal 函数调用协定 private 访问类别符 (class) procedure 声明 program 程序结构 property 声明 protected 访问类别符 (类) public 访问类别符 (类) published 访问类别符 (类) raise 语句 (异常处理) read 属性类别符 readonly dispatch 界面类别符 record 类型 register 函数调用协定 reintroduce 函数指令 repeat 语句 requires 程序结构 (控件包) resident 指令 (函数) resourcestring 类型 safecall 函数调用协定 set 类型 shl 运算符 (数学) shr 运算符 (数学) stdcall 函数调用协定 stored 指令 (属性) string 类型 then 语句 (if) threadvar 声明 to 语句 (for) try 语句 (异常处理) type 声明 unit 单元结构 until 语句 uses 单元结构 var 声明 virtual 指令 (方法) while 语句 with 语句 write 属性类别符 writeonly dispatch 界面类别符 xor 运算符 (布尔) 运算符优先级表 单目运算符 (最高优先级) @ 取变量或函数的地址(返回一个指针) not 逻辑取反或按位取反 乘除及按位运算符 * 相乘或集合交集 / 浮点相除 div 整数相除 mod 取模 (整数相除的余数) as 程序运行阶段类型转换 (RTTI运算符) and 逻辑或按位求和 shl 按位左移 shr 按位右移 加减运算符 + 相加、集合并集、字符串连接或指针增加一个偏移量 - 相减、集合差集或指针减少一个偏移量 or 逻辑或按位或运算 xor 逻辑或按位异或运算 关系及比较运算符(最低优先级) = 判断是否相等 <> 判断是否不相等 < 判断是否小于 > 判断是否大于 <= 判断是否小于或等于,或是否是一个集合的子集 >= 判断是否大于或等于,或是否是一个集合的父集 in 判断是否是集合成员 is 判断对象是否类型兼容 (又一个RTTI运算符) |
|
|
| 61.186.173.* |
5楼 www.vijos.cn 2、动态规划教程 http://www.zsqz.com/jsbase/suanfa/dtguihua/index.htm 3、计算机知识百科: http://wiki.ccw.com.cn/64位计算 4、网络硬盘:(自己申请帐号) http://www.gbdisk.com/ |
|
|
| 61.186.173.* |
6楼 PASCAL给我们提供了一些标准函数,我们不用了解这些函数如何求出来的,只管直接调用它们,挺方便的。如正弦函数,余弦函数,算术平方根......有了这些函数,我们觉得很省事。如:求SIN(1)+SIN(2)+...+SIN(100)=?这个程序我们可以这样编写: 例1 PROGRAM e1(input,output); VAR i:integer; s:real; BEGIN s:=0; for i:=1 to 100 do s:=s+sin(i); writeln('s=',s); END. 在这个程序里,我们直接用到了正弦函数,至于SIN(1),SIN(2)如何求出来的我们不需过问,只管直接用它的结果便是了。 我们来看看下面一个例子:求:1!+2!+3!+...+10!=? 如果要编写程序,我们看到求阶乘的操作要执行10次,只不过每次所求的数不同。我们想:不至于编写10遍求阶乘的程序吧。我们希望有一个求阶乘的函数,假设为JS(X),那么我们就可以这样求这道题了: 例2 PROGRAM e1(input,output); VAR i:integer; s:real; BEGIN s:=0; for i:=1 to 10 do s:=s+js(i); writeln('s=',s); END. 现在的问题是:TURBO PASCAL没提供JS(X)这样一个标准函数,这个程序是通不过的。如果是PASCAL的标准函数,我们可以直接调用,如TRUNC(X),LN(X),SQRT(X)......而PASCAL提供给我们的可供直接调用的标准函数不多。没关系,我们编写自己的函数! · 函数的编写 自己编写一个函数,它的格式如下: FUNCTION 函数名(形式参数表):函数类型; VAR 函数的变量说明; BEGIN 函数体 END; 我们来分析一下,一个函数的编写可分成三部份:一是函数首部,即第一个语句。它必须以FUNCTION开头,函数名是自己取的,取名的原则是便于记忆,和文件名的取名规则类似。形式参数(简称形参)表以标识符的形式给出,相当于函数中的自变量。参数可以有多个,也可以有多种类型。不同类型的参数之间用“;”隔开,同类型的参数如有多个,则用“,”隔开,在其后得加上说明。如: FUNCTION A1(A,B,C:INTEGER;D,E,F:REAL):REAL; 在最后,函数属于哪种类型,还得表示出来。在本例中,该函数为实型。 第二部分是函数的变量说明部分,对在本函数中将要用到的变量作类型说明,这一点和以前学的变量一样。如果程序不用变量,则此部分也可省掉。 第三部分是函数体,本函数的功能实现就在于此,编写的语句就在里面。 例3 编写一求阶乘的函数。 我们给此函数取一名字就叫JS。 fUNCTION js(n:integer):longint; var i:integer; s:longint; begin s:=1; for i:=1 to n do s:=s*i; js:=s; end; 在本例中,函数名叫JS,只有一个INTEGER型的自变量N,函数JS属LONGINT型。在本函数中,要用到两个变量I,S,在VAR后已加以说明。在函数体中,是一个求阶乘的语句,但有一点要注意:虽然N的阶乘的值在S中,但最后必须将此值赋给函数JS,此时JS不带任何参数。在任何函数中,最后都要把最终结果赋给函数名,因为该函数的结果是靠函数名返回的。 在这里,函数的参数N是一个接口参数,说得更明确点是入口参数。如果我们调用函数:JS(3),那么在程序里所有有N的地方N被替代成3来计算。在这里,3就被称为值参。又如:SQRT(4),LN(5),这里的4,5叫值参。而SQRT(X),LN(Y)中的X,Y叫形参。 · 函数的调用 自定义的函数在调用前要先说明,在主程序中的位置如下: PROGRAM 程序名(INPUT,OUTPUT); |
|
|
| 61.186.173.* |
7楼 FOUNCTION 函数名(形参表):函数类型; VAR 函数变量说明; BEGIN 函数体 END;{FUNCTION} BEGIN 主程序 END .{PROGRM} 在主程序中,我们把函数的全部说明放在主程序的变量说明和程序体之间,然后在主程序的执行部分就可以直接调用自定义函数了。注意:在函数的说明部分,我们要用形参,但在程序的执行部分调用自定义函数时,就得用值参了。 例4 利用前面定义的阶乘函数,求5!,9!。 PROGRAM e59(input,outout); VAR a1,a2:longint; fUNCTION js(n:integer):longint; var i:integer; s:longint; begin s:=1; for i:=1 to n do s:=s*i; js:=s; end; BEGIN a1:=js(5); a2:=js(9); writeln('5!=',a1,' ','9!=',a2); END. 在这个程序中,在主程序的BEGIN之前,我们对函数进行了一次说明,在后面的程序中都可以象标准函数那样直接调用自定义函数了。在FUNCTION语句中,用的是形参N,在主程序调用中,调用函数是用的值参,如:JS(5);程序执行到这儿会自动将5代入前面的FUNCTION函数中,用5 取代所有的N,最终将结果赋值给JS。所以在A1中一定是5!,A2中是9!。另外,函数不能单独使用,一定要结合主程序才能运行。 如果是求1!+2!+3!+...+10!,则只需把主程序改成: A1:=0; FOR J:=1 TO 10 DO A1:=A1+JS(J); WRITELN(A1); 在例4中,主程序的变量A1,A2叫全程变量,它们除了主程序外,还可以在函数中出现;在函数说明中用到的变量I,S则是局部变量,只能在函数部分使用,一旦出了函数则失去意义;别外要注意:全程变量和局部变量尽量不要同名。 例5 任意输入10组三角形的三边,求其面积。 已知三角形的三边,是可以求出面积的。我们可以定义一个已知三角形三边求其面积的函数,设为AREA(a1,a2,a3)。 PROGRAM e5(inmput,output); VAR a,b,c,s:real; i:integer; FUNCTION area(a1,a2,a3:real):real; var s1,d:real; begin d:=(a1+a2+a3)/2; s1:=Sqrt(d*(d-a1)*(d-a2)*(d-a3)); area:=s1; end; BEGIN for i:=1 to 10 do begin writeln('input a,b,c'); readln(a,b,c); if (a+b<=c) or (a+c<=b) or(b+c<=a) then writeln('data error!') else writeln('s=',area(a,b,c)); end; END. 在函数说明中,如果形参的个数不止一个,那么在程序中调用函数的实参个数一定要与形参的个数一致,第一个实参对应第一个形参,第二个实参对应第二个形参......次序不能调。 例6 定义一个函数CHECK(N,D),让它返回一个布尔值。如果数字D在整数N的某位中出现则送回TRUE,否则送回FALSE。 例如:CHECK(325719,3)=TRUE; CHECK(77829,1)=FALSE; PROGRAM e6(input,output); VAR a,b:integer; FUNCTION check(n,d:integer):boolean; var f:boolean; e:integer; begin f:=false; while (n>0) and (not f) do begin e:=n mod 10; n:=n div 10; if e=d then f:=true; end; check:=f; end; BEGIN writeln('input n,d'); read(a,b); writeln(check(a,b)); END. 练习:编写一个函数,返回布尔值判别输入三个字符是按序或无序排列。程序中若输入abc则显示顺序排列,若输入cba则显示逆序排列,其他情况显示无序排列,当输入***程序结束。 |
|
|
| 61.186.173.* |
8楼 |
|
|