Pascal语法小全
- 格式:doc
- 大小:78.00 KB
- 文档页数:26
Pascal语法小结请同学们牢记:计算机的实质是对存储器中(容器)的数据进行修改。
不能被计算机语言的语法所迷惑。
对一个程序要一眼就看到本质,找到程序中最关键的容器,然后围绕容器进行操作。
一:容器操作目前Pascal程序允许对容器的操作有:1:写入即向容器写入数据操作实现:读入语句:readln(a);read(a);赋值语句:a:=3+2;2:读出:即从容器中读出数据(容器中的原来的值不变)赋值语句:a:=3+2;输出语句:writeln(a);write(a);二:对大量容器的操作注:程序中一条语句只能对一个容器进行操作,要同时对多个容器进行操作只有写多个语句来实现如果要在程序中对a[1]..a[10000]进行操作,一种方法是一句句写(天啦)。
第二种就是用循环(聪明)。
熟练掌握循环语句是成为程序高手的必要条件和后续算法学习的基础,希望每个同学引起足够的重视,并一定要完全掌握。
以下语句如果不能完全理解就说明循环还有问题,请务必花时间弄懂例1:要对a[1]…a[10000]全部赋值为100for I:=1 to 10000 do a[I]:=100;例2:依次输出a[1]…a[10000]的值for I:=1 to 10000 do writeln(a[I]);例3:对二维数组(没学过,没关系,自学或不学,以后程序看多了自然就理解了)进行以下操作:将a[1,1]..a[1,100]赋值为1将a[2,1]..a[2,100]赋值为2……将a[10,1]..a[10,100]赋值为10for I:=1 to 10 dofor j:=1 to 100 doa[I,j]:=I;例4:输出a[1,1],a[1,2]…a[10,100]的值for I:=1 to 10 dobeginfor j:=1 to 100 do write(a[I,j]);writeln;end;三:程序模块化模块化的目的:1:增强程序的可读性。
Pascal 语言精要基本概念:标识符、保留字、常量、变量、运算符、表达式、标准数据类型 Pascal 数 据 类 型简单类型标准类型 整型 integer -32768~32767 shortint -128~127 longint -2147483648~2147483647 byte 0~255 word 0~65535 实型 real 绝对值在1E-38~1E38间 singel (单精度型) double (双精度型) extended (扩展型) comp (装配十进制型) 字符型char (字符)string (字符串) boolean 只有两个值true 和false 用户自定义类型 枚举型 子界型 构造类型 数组类型记录类型集合类型 文件类型指针类型PASCAL 标准数据类型一共有4个:整型、实型、字符型、布尔型,分别用保留字integer 、real 、char 、boolean 来标记它们。
其取值范围和运算如下:整型(integer):范围 -32768—32767(16位运算);运算 + - * / mod div 实型(real): 范围 运算 + - * /字符型(char): 范围 可显示的ASCII 字符布尔型(boolean):范围 true false ;运算 and or not1.整型类型 数值范围 占字节数 格式 shortint -128..128 1 带符号8位 integer -32768..32767 2 带符号16位 longint -2147483648..2147483647 4 带符号32位 byte 0..255 1 带符号8位 word 0..65535 2 带符号16位Pascal 规定了两个预定义整型常量标识符maxint 和maxlongint ,他们各表示确定的常数值,maxint 为32767, maxlongint 为2147483647,他们的类型分别是integer 和longint2.实型Pascal 支持五种预定义实型,它们是real (基本实型)、 single (单精度实型)、double (双精度实型)、extended (扩展实型)、comp (装配实型),Pascal 分别用不相同的名字作为他们的标识符。
Pascal语言语法1. 简介Pascal是由Niklaus Wirth于1968年发明的一种程序设计语言。
它是一种结构化的高级编程语言,特别适用于教育和科学计算领域。
Pascal语言语法严谨而清晰,在许多大学的计算机科学课程中被用于教授基本的编程概念。
2. 变量和数据类型在Pascal中,变量必须在使用之前先声明。
可以使用var关键字声明一个或多个变量。
例如:varx, y, z: integer;name: string;rate: real;对于变量的声明,你需要指定变量的名称和数据类型。
Pascal支持多种数据类型,包括整数(integer)、实数(real)、字符(char)、字符串(string)等。
3. 控制结构Pascal语言支持常见的控制结构,如条件语句和循环语句。
3.1 条件语句条件语句用于根据不同的条件执行不同的代码块。
Pascal中的条件语句有if-then和if-then-else两种形式。
例如,下面是一个使用if-then-else语句的示例:if x > 0thenwriteln('x is positive')else if x < 0thenwriteln('x is negative')elsewriteln('x is zero');3.2 循环语句循环语句用于重复执行一段代码块,直到某个条件不再满足。
Pascal中的循环语句有while、repeat和for三种形式。
下面是一个使用while循环的示例,计算从1加到n的和:varn, sum, i: integer;sum := 0;i := 1;while i <= n dobeginsum := sum + i;i := i + 1;end;writeln('Sum = ', sum);4. 过程和函数Pascal中的过程和函数用于封装一段可重复使用的代码。
第七课:pascal专题-pascal语言语法大全及应用配套视频★qq语音课主讲内容★:1、pascal语法专用字符:a~z,a~z,0~9,+,-,*,/,=,<>,<=,>=,<,>,(,),[,],{,},:=,,,;,、,:,、、,’,^ ;ﻫ【解说】ﻫa~z:大写得26个英文字母;ﻫa~z:小写得26个英文字母;0~9:10个数字;ﻫ+: 加法运算符;-: 减法运算符;*: 乘法运算符;/: 除法运算符;ﻫ=:比较运算符:等于;ﻫ<>:比较运算符:不等于;<=: 比较运算符:小于等于;>=: 比较运算符:大于等于;ﻫ<: 比较运算符:小于;ﻫ>: 比较运算符:大于; (,):优先级与参数表达符:左右括号;ﻫ[,]: 索引号表达符:中括号;{,}: 段落屏蔽与备注符:大括号;:=:赋值运算符;ﻫ,: 排列式表达符:逗号;ﻫ;: 代码(功能)行结束符;ﻫ、: 主从代码分隔符:点号;ﻫ:: 变量定义分隔符:冒号;、、: 子界定义表达符;’: 字符串标识符:单引号;^ :指针定义符:尖号。
2、 pascal语法保留字:and,array,begin,case,const,div,do,downto,else,end,,function,goto,if,in,label,mod,nil,not,of,or,packed,procedure,program,record,repeat,set,then,to,type,until,var,while,with,exports,shr,string,asm,object,unit,constructor,implementation,destructor,uses,inhe rited,inline,interface,library,xor,shl ;ﻫ【解说】ﻫand:逻辑运算符:逻辑与;ﻫarray:数组定义符:array of …;ﻫbegin: 程序“块”得开始标识符;case: 多条件分支语句得开始标识符;const: 常量定义符;ﻫdiv: 算术运算符:除法取整数结果;ﻫdo: 执行命令;ﻫdownto:单步反循环语句中得命令;Else:分支语句中得命令,“否则”得意思;end:“结束”标识符;ﻫfile:类型文件标识符 ;ﻫfor: 单步循环语句得开始标识符;function:函数定义得命令符;ﻫgoto:跳转指令 :ﻫif:单条件分支语句得开始标识符;in: 集合运算符;ﻫlabel:定义标号 ;ﻫmod:算术运算符:除法取余数结果; nil: 一个表示“空值”得常量;ﻫnot: 逻辑运算符:逻辑非;of: 多种组合命令得辅助符,array of…,case of…等;ﻫor: 逻辑运算符:逻辑或;ﻫpacked: 用于压缩与打包得指令;ﻫprocedure: 过程定义符;ﻫpr ogram: delphi工程文件标识符;record: 记录类型标识符;repeat: 循环语句标识符;ﻫset: 集合定义符;ﻫthen:组合命令得辅助符,if…Then…Else…;to:组合命令得辅助符,for…To …Do…;type:类型定义符;ﻫuntil:循环语句中得辅助符,repeat…Until…;ﻫvar: 变量定义符;ﻫwhile:循环语句定义符;while …Do…;ﻫwith:组合命令得定义符:with …Do begin…End;ﻫexports:动态链接库输出项目定义符; shr: 二进制右移运算符;string: 字符串类型标识符;ﻫasm: 汇编语言标识符;object:对象标识符;unit: 单元标识符;ﻫconstructor:构造函数定义符;implementation: 单元中“实现部分开始”得标识符;destructor:析构函数定义符;uses: 单元引用标识符;inherited: 类继承指令;ﻫinline:过程与函数得调用指令;ﻫinterfac e:单元中“声明部分开始”得标识符;ﻫlibrary: dll工程定义符;xor:二进制位运算符:异或;shl:二进制位运算符:按位左移。
Pascal 教程目录第一章简单程序 (2)第一节Pascal 程序结构和基本语句 (2)第二节顺序结构程序与基本数据类型 (6)第二章分支程序 (10)第一节条件语句与复合语句 (10)第二节情况语句与算术标准函数 (12)第三章循环程序 (16)第一节for 循环 (16)第二节repeat 循环 (22)第三节While 循环 (27)第四章函数与过程 (32)第一节函数 (32)第二节自定义过程 (35)第五章Pascal的自定义数据类型 (40)第一节数组与子界类型 (40)第二节二维数组与枚举类型 (48)第三节集合类型 (56)第四节记录类型和文件类型 (60)第五节指针类型与动态数据结构 (67)第六章程序设计与基本算法 (73)第一节递推与递归算法 (73)第二节回溯算法 (80)第七章数据结构及其应用 (86)第一节线性表 (86)第二节队列 (90)第三节栈 (93)第四节数组 (97)第八章搜索 (100)第一节深度优先搜索 (100)第二节广度优先搜索 (111)第九章其他常用知识和算法 (115)第一节图论及其基本算法 (115)第二节动态规划 (122)第一章简单程序无论做任何事情,都要有一定的方式方法与处理步骤。
计算机程序设计比日常生活中的事务处理更具有严谨性、规范性、可行性。
为了使计算机有效地解决某些问题,须将处理步骤编排好,用计算机语言组成“序列”,让计算机自动识别并执行这个用计算机语言组成的“序列”,完成预定的任务。
将处理问题的步骤编排好,用计算机语言组成序列,也就是常说的编写程序。
在Pascal语言中,执行每条语句都是由计算机完成相应的操作。
编写Pascal 程序,是利用Pascal语句的功能来实现和达到预定的处理要求。
“千里之行,始于足下”,我们从简单程序学起,逐步了解和掌握怎样编写程序。
第一节Pascal 程序结构和基本语句在未系统学习Pascal语言之前,暂且绕过那些繁琐的语法规则细节,通过下面的简单例题,可以速成掌握Pascal程序的基本组成和基本语句的用法,让初学者直接模仿学习编简单程序。
PASCAL全教程Pascal基本教程第一章第一章 Pascal语言概述与预备知识1 关于Turbo PascalPascal是一种计算机通用的高级程序设计语言。
它由瑞士Niklaus Wirth 教授于六十年代末设计并创立。
以法国数学家命名的Pascal语言现已成为使用最广泛的基于DOS的语言之一,其主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强。
正因为上述特点,Pascal语言可以被方便地用于描述各种算法与数据结构。
尤其是对于程序设计的初学者,Pascal语言有益于培养良好的程序设计风格和习惯。
IOI(国际奥林匹克信息学竞赛)把Pascal语言作为三种程序设计语言之一, NOI(全国奥林匹克信息学竞赛)把Pascal语言定为唯一提倡的程序设计语言,在大学中Pascal语言也常常被用作学习数据结构与算法的教学语言。
在Pascal问世以来的三十余年间,先后产生了适合于不同机型的各种各样版本。
其中影响最大的莫过于Turbo Pascal系列软件。
它是由美国Borland公司设计、研制的一种适用于微机的Pascal编译系统。
该编译系统由1983年推出1.0版本发展到1992年推出的7.0版本,其版本不断更新,而功能更趋完善。
下面列出Turbo Pascal编年史出版年代版本名称主要特色1983Turbo Pascal 1.0Turbo Pascal 2.0Turbo-87 Pascal提高实数运算速度并扩大值域1985Turbo Pascal 3.0增加图形功能Turbo BCD Pascal特别适合应用于商业1987Turbo Pascal 4.0提供集成开发环境(IDE),引入单元概念1988Turbo Pascal 5.0增加调试功能1989Turbo Pascal 5.5支持面向对象的程序设计(OPP)1990Turbo Pascal 6.0提供面向对象的应用框架和库(Turbo Vision)1992Turbo Pascal 7.0面向对象的应用系统、更完善的IDETurbo Vision 2.01993Borland Pascal 7.0开发 Object Windows库、(For Windows)提供对OLE多媒体应用开发的支持1995DelphiVisual PascalTurbo Pascal语言是编译型程序语言,它提供了一个集成环境的工作系统,集编辑、编译、运行、调试等多功能于一体。
delphi的object Pascal语法(部分)1.注释三种:花括号,圆括号+星号,c++风格的双斜杠注释。
不同注释符号可以嵌套,而相同注释符号不可以嵌套。
2.对象命名大小写不敏感,不同于C/C++/java/C#.良好命名习惯1.用意义明确的英文单词和词组命名。
2.单词首字母大写。
java:类名首字母大写,对象名小写。
3.若用多个单词命名一个对象,则单词之间不能插入空格,每一个单词的首字母大写(驼峰格式)。
4.名称的第一个字母尽量不要用T,F,I这三个字母。
T开头的命名一般代表一个类,F往往用于类中私有成员的命名,I表示此命名为接口。
3.代码组织代码缩进:通常使代码的每一级向内缩进2格。
4.标识符可以由任意长的一个不带空格的字符串组成,但是只有前面的255个字符有效。
组成规则和C相同。
5.变量1.变量的声明var VariableName :type;2.局部变量和全局变量全局变量一般在implementation后面声明,它可以在声明时直接被初始化为一个值。
而局部变量在声明时不能进行初始化。
在没有初始化的情况下,所有的全局变量会自动初始化为0,而局部变量则根据变量类型的不同而不同。
变量在声明后系统都会给分配一个内存空间。
5.常量const variablename=value;和变量不同的是,常量的类型就是常量说明中其所代表的值的类型。
6.预定义类型object pascal有多个预定义类型,其中包含整型,实型,布尔型,字符型,指针型,字符串型。
1.整型(integer),2字节。
shortint,1字节。
longint,4字节。
byte,1字节。
word,2字节。
2.实型(single),4字节。
double,8字节。
extended,10字节。
comp,8字节。
3.布尔型(boolean)只包含TRUE或FALSE两个值,1字节。
4.字符型(char):一个ASCII字符。
字符串类型string最长可达255个ASCII字符。
Pascal语法小全OBJECT P ASCAL P ROGRAMING (WRITED B Y C.Y.C A TTENTION S YSTEM D EVELOPMENT C O,.)1.标记(TOKEN)1.1 特别符号(Symbols)字母(Letters):A..Z ,a..z数字(Digits):0..9十六进位数字(Hex D igits):0..9,A..F(OR a..f)空白(Blank):A SCII 32单字元符号:+-*/=<>[].,():;^@{}$#多字元符号:<=,>=,:=,..,(*,*),(.,.)1.2 识别字(Identifiers)表示:常数,型态,变数,程序,函数,程式单元,程式,栏位....长度:63位内有效,不分大小写字首:字母,_识别字不得重复,若有重复必需采限定识别字:U nit1.IdentName1.3 标笺(Label):0..9999 o r 识别字1.4 字元字串'ATTN' ----------- A TTN'You''ll s ee' ---- Y oy'll s ee'' --------------- 空字串''-------------- 空白字元'Line 1'#13#10'Line 2' ------ L ine 1L ine 21.5 注释{x xxxxxx }{x xxxxxxxx xxxxxx xxxx }// x xxxxxxx2.常数宣告(使用标记=)2.1一般常数宣告C ONSTM in =0;M ax =100;C enter =(M ax -M in )D iv 2;B lank =C hr(32);N umChr =O rd('Z')-O rd('A')+1;E rrMsg ='Out O f R ang';E rrDtl ='Out O f R ang' +':Item 10';N umeric =['0'..'9' ];A lpha =['A'..'Z','a'..'z'];A lphNum =A lpha +N umeric;2.1型态常数(Typed c onstant)宣告C ONSTM axInt :I nteger =9999;F ixReal :R eal =-0.12;L istStr :S tring[4] ='This';A A :P char ='abcedf';D im :A rray[0..1,0..1,0..1] o f I nteger =(((0,1),(2,3)),((4,5),(6,7))); {D im(0,0,0)=0D im(0,0,1)=1D im(0,1,0)=2D im(0,1,1)=3D im(1,0,0)=4D im(1,0,1)=5D im(1,1,0)=6D im(1,1,1)=7}--------------------------------T YPET rec =r ecordf l1,fl2 :I nteger;e nd;C ONSTI ntRec :T rec =(f l1:1;fl2:2);------------------------------------------3.型态宣告(使用标记=):当宣告一个变数时,必须指明其型态3.1 例子(1)T YPET rang =I nteger;T Number =I nteger;T Color =(R ed ,G reen ,B lue );T CharVal =O rd('A')..Ord('Z');T testIndex =1..100;T testValue =-99..99;T testList =A rray[TtestIndex] o f T testvalue;p testList =^TtestList; =>指标型态T date =C lassY ear :I nteger;M onth :1..12;D ay :1..31;P rocedure S etDate(D,M,Y:Integer);F unction S howDate :S tring;e nd;T MeasureList =A rray[1..50] o f T Measuredate;T name =S tring[80]; =>定长度T sex =(Male ,F emale); =>0 1P personData =r ecordN ame ,F irstName :T name;A ge :I nteger;M arried :B oolean;T Father,TChild,TSibling :P PersonData;C ase s: T sex o f =>0和1之间M aie :(B earded :B oolean );F emale :(Pregnant :B oolean );E nd;T PersonBuf =A rray[0..Size(TPsersonData)-1]o f B yte; T People =F ile O f T PersonData; =>定type3.2 简单型态3.2.1序数型态(1)整数型态:基础型态(Fundmental)S hortint -128..127 8-bitS mallint -32768..32767 16-bitL ongint -2147483648..2147483647 32-bitB yte 0..255 8-bitW ord 0.65535 16-bit通用型态(Generic)I nteger -2147483648..2147483647 32-bitC ardinal 0..2147483647 32-bit若16bitI nteger -32768..32767 16-bitC ardinal 0.65535 16-bit(2)字元型态基础型态(Fundmental)A nsiChar A SCII 1-BytW ideChar U nicode 2-Byt通用型态(Generic)C har A SCII 1-Byt(3)列举型态(Enumerated T ype)============================================== T Color =(R ed ,G reen ,B lue );==============================================(4)逻辑型态(Boolean T ype)基础型态(Fundmental)B yteBool 0..1 1-BytW ordBool 0..1 2-BytL ongBool 0..1 4-Byt通用型态(Generic)B oolean 1-Byt============================================== M arried :B oolean;F alse <T rueO rd(False)=0O rd(True)=1S ucc(False)=TrueP red(True)=False==============================================(5)子集型态(Subrang t ype)============================================== T testIndex =1..100;==============================================3.2.2实数型态型态有效位数位元组大小R eal 11-12 6S ingle 7-8 4D ouible 15-16 8E xTended 10-20 10C omp 19-20 8C urrency 19-20 8=================================================== 例子R eal 6byt 共48 b it1-1 2-40 41-48s f e有效值vi f (e>0)a nd (e<= 255 )t henv=(-1)**s *2** (e -129)*(1.f)e lse if e=0t hen v=0;===================================================3.3 字串型态3.3.1 基础型态(Fundmental)(1)S hortString 短字串1-255 (又称pascal s tring)(2)A nsiString 长字串1-2G(3)P Chr N ull-Terminated s tring3.3.2 通用型态(Generic)S tring 32位元时等於A nsiString16位元时等於S hortString=================================================== (1)字串为一以零为基底的字元阵列(Zero-base c haracter a rray)例-----------------------T YPET StringBuf =A rray[0..79] o f C har;c onstS tringBuf :T StringBuf ='This i s t est';-----------------------(2)v ar s:S hortStringL ength(s)=O rd(s[0])(3)长字串以4-byt指标,指到动态配置之记忆体,没有[0]之长度数值一个动态记忆体配置之长字串会自动以一空字元(null C haracter)结束(4)P Chr 以字元阵列来储存,结尾以(null C haracter)结束,使用指标来管理(5)P Chr型态与String型态在指定叙述上是相容例:-----------------------------v ar p:pchr;b eginp:= 'this i s t est';e nd;-----------------------------P rocedure P rintStr(Str:Pchr);呼叫时可用P rintStr('This i s t est');-----------------------------3.4 结构型态(Strictured t ype)3.4.1 阵列型态(Array t ype)T Dim1 =A rray[0..79] o f C har;T Dim2 =A rray[1..3,1..10] o f C har;V ARD im1 :T dim1;I:I nteger;b eginf or I:= L ow(Dim1)t o H igh(Dim1)d oD im1[I] := #32;e nd;===================================================3.4.2 记录型态(Record T ype)T YPET dateRec =R ecordY ear :I nteger;M onth :1..12;D ay :1..31;e nd;何谓变动栏位?3.4.3 集合型态(Set T ype)T YPET menber =(L ee ,W hite ,S ton );T menbers =S et O f T menber;v ar M embers :T menbers;b eginM enbers := [W hite ,S ton ];e nd;集合型态不能超过256个可能值3.4.4 档案型态(File T ype)(1)记录型态档案T YPET employee =r ecordn ame :s tring[10];a ddress :s tring[50];e nd;T employeeFile =F ile O f T employee;v arE mployeeFile :T employeeFile;同E mployeeFile :F ile O f T employee;(2)文件型态档案T MyTextFile =T extFile;v arM yTextFile :T MyTextFile;o rM yTextFile :T extFile;R eadText :S tring;-----------------------------A ssignFile(M yTextFile ,'c:\MyFile.txt'); R eset(M yTextFile );W hile N ot E of(M yTextFile )d ob eginR eadln(M yTextFile ,R eadText );e nd;C loseFile(M yTextFile );注:Rewrite(MyTextFile); 开启唯写W riteln(MyTextFile ,R eadText);(3)其它型态档案T Book =F ile O f C har;T numFile =F ile O f I nteger;3.4.5 类别型态(Class T ype)T DBText =c lass(TCustomLabel)p rivateF DataLink: T FieldDataLink;p rocedure D ataChange(Sender: T Object);f unction G etDataField: s tring;f unction G etDataSource: T DataSource;f unction G etField: T Field;f unction G etFieldText: s tring;p rocedure S etDataField(const V alue: s tring);p rocedure S etDataSource(Value: T DataSource);p rocedure C MGetDataLink(var M essage: T Message); m essage C M_GETDATALINK; p rotectedf unction G etLabelText: s tring; o verride;p rocedure N otification(AComponent: T Component;O peration: T Operation); o verride;p rocedure S etAutoSize(Value: B oolean); o verride;p ublicc onstructor C reate(AOwner: T Component); o verride;d estructor D estroy; o verride;p roperty F ield: T Field r ead G etField;p ublishedp roperty A lign;p roperty A lignment;p roperty A utoSize d efault F alse;p roperty C olor;p roperty D ataField: s tring r ead G etDataField w rite S etDataField;p roperty D ataSource: T DataSource r ead G etDataSource w rite S etDataSource;p roperty D ragCursor;p roperty D ragMode;p roperty E nabled;p roperty F ont;p roperty P arentColor;p roperty P arentFont;p roperty P arentShowHint;p roperty P opupMenu;p roperty T ransparent;p roperty S howHint;p roperty V isible;p roperty W ordWrap;p roperty O nClick;p roperty O nDblClick;p roperty O nDragDrop;p roperty O nDragOver;p roperty O nEndDrag;p roperty O nMouseDown;p roperty O nMouseMove;p roperty O nMouseUp;p roperty O nStartDrag;e nd;元件之可见性注-1:同一unit中Private,Protect,Public,published皆同Public不同unit时其特性不同P rivate :所属unit才有可见性P rotect :只有继承时才有可见性P ublic :所有uses者皆有可见性p ublished :所有uses者皆有可见性,且提供元件设计时之栏位可见性注-2:若宣告没有注明4P,则表示3.5 指标型态(Pointer t ype)3.5.1 字元指标(character p ointer)在s ystem u nit 中,有下列宣告T YPEP AnsiChar =^AnsiChar;P WideChar =^WideChar;P Char =P AnsiChar;所以在2.0版中,PChar和PAnsiChar 是一样的3.5.2 通用指标T YPET MyPointer =P ointer;通用指标可以被型态转换後来参考3.6 程序型态(Procedure t ype)3.6.1 全域程序指标T YPET StrProc =P rocedure(C onst s: S tring );T MyFunc =F unction(X:Integer ):S tring;3.6.2 方法程序指标T YPET NotifyEven =P rocedure(Sender :Tobject)o f O bject;3.6.3 程序数值一个程序型态变数可以被指定程序数值T YPET MainForm =C lass(TForm)P rocedure B uttonClick(Sender:Tobject);e nd;V ARM yForm :T MainForm;M yFunc :T MathFunc;F unction C hgFunc(X:Integer):Integer;Far;B eginR esult := X+X;e nd;M yFunc := C hgFunc;X:= M yFunc(X); {等於X:= C hgFunc(X)}==========================================一个程序变数未被指定数值时其数值是n il,但未被指定数值之程序或函数不能执行,故安全之呼叫是I f A ssigned(OnClick)T hen O nClick(Self);3.7 变动型态(Variant t ype)(1)变动型态和其它型态一起使用会作自动型态转换=>使用arrey V arV1,V2,V3,V4,V5 :V ariant;I:I nteger;D:Double; 浮点S:String;B eginV1 := 1;V2 := 1234.5678;V3 := 'This i s t est';V4 := '1000';V5 := V1 +V2 +V4; {实数2235.5678}I:= V1; {I =1}D:= V2; {D =1234.5678}S:= V3; {S ='This i s t est'}I:= V4; {I =1000}S:= V5; {S ='2235.5678'}e nd;虽然变动型态提供很大弹性,但它耗用更多记忆体,也比静态型态来得慢(2)变动阵列v arA:V ariant; =>变动型态I:I nteger;B eginA:= V arArrayCreate([0,4],VarOleStr);F or I:= 0t o 4D o A[I] := 'AAAA';V arArrayRedim(A,9); =>加大F or I:= 5t o 9D o A[I] := 'BBBB';e nd;4.变数宣告(使用标记:):当宣告一个变数时,必须指明其型态4.1 例子X,Y,Z :D ouble;I,J,K :I nteger;D ig :0..9;C:C olor;D one,Error :B oolean; =>通常为一个bytsO perater :(P lus ,M unus ,T imes );H1,H2 :S et O f C olor;T oday :D ate;M yDim :A rray[1..10,1..5] O f D ouble;4.2 全域变数:在程序和函数之外宣告之变数4.3 区域变数:在程序和函数之内宣告之变4.3 变数初始化值:M yInt :I nteger =123; {注意不可为区域变数指定初值}4.4 限定词:4.4.1阵列索引:M yDim[I][J] 同MyDim[I,J]4.4.2栏位指示词:M yRec.MyField {在一个with叙述中可以省略栏位指示参考4.4.3物件指示词:f orm1.Button1.Caption4.4.4指标和动态变数: p1^,@p14.5 变数型态转换{例-1}T YPET byteRec =r ecordF l1 ,F l2: B yte;e nd;V ARW:W ord;B:B yte;B eginW:= 256 *10 +128;B:= T byteRec(W).Fl1; {B=10}*** w ord ─────>换成byte型态B:= T byteRec(W).Fl2; {B=128}e nd;{例-2}W ith S ender a s M dbedit d o =>代上一层型态T ext := 'This i s t est';{例-3}M dbedit(S ender ).Text := 'This i s t est';5.运算式语法5.1 运算元及运算优先次序(1)@,not 单运算子运算元=>@变数住置(2)*,/,div,mod,and,shl,shr,as 乘除(3)+,-,or,xor 加减(4)=,<>,<,>,<=,>=,in,is 关系5.2 ()有优先运算评量, 由内外之运算优先5.3 相同优先次序,则由左至右之运算优先5.4 捷径评量(short-Circuit)w hile (I <= L ength(S))a nd(S[I] <>'')d oI nc(I)捷径评量严格执行由左至右之运算,一旦运算结果己可知後便停止,可使得一些原本不合法之运算架构变成可以运算5.5 运算元分类5.5.1 数学运算元:+,-,*,/d iv 整数相除之商m od 整数相除之余数{I m od J=I-(I d iv J)*J}5.5.2 逻辑运算元:n ot ,A nd ,O r ,X or ,S hl ,S hr5.5.3 字串运算元:+S:= 'aaaaa' +'bbbb'; {s =a aaaabbbb}5.5.4 集合运算元:+,-,*+:连集-:差集*:交集5.5.5 关系运算元:=,<>,<,>,<=,>=,in =>in 判断有效值I n :成员t ypeM onth =(J an ,F eb ,M ar ,A pr ,M ay ,J un ,J ul ,A ug ,S ep ,O ct ,N ov ,D ec );S pring =s et o f F eb..Apr..Mar;M str =a rray[ 0.. 11 ]o f s tring[ 3];c onstC Mstr :M str =('Jan' ,'Feb' ,'Mar' ,'Apr' ,'May' ,'Jun' ,'Jul' ,'Aug' ,'Sep' ,'Oct' ,'Nov' ,'Dec' ); v arM:M onth;S Spring :S pring;b eginS Spring := [F eb..Apr ];w riteln('The S pring M onth i s :');f or M:= J an t o D ec d oi f M i n S Spring t henw riteln(C Mstr[ O rd(M)]);e nd;5.5.6 类别运算元:is ,A si f (S ender i s M butten )a nd(M butten(S ender ).tag <>0)t hen ...;w ith S ender A s M dbedit d ot ext := 'aaaaaa';5.5.7 位置运算元:@5.5.8 指标运算元:^v arM,N:i nteger;P1 ,P2 :^integer; =>指标b eginM:= 6;P1 := @M; =>@位置L abel1.Caption := 'P1^ ='+I ntToStr(P1^ ); P2 := P1;N:= P2^;L abel2.Caption := 'N ='+I ntToStr(N);e nd;6.叙述语法6.1 g otol abel a a;v ar i:i nteger;b egin..i f (i =0)t hen g oto a a;a a:begin..e nd;e nd;6.2 i fi f (x>10 )a nd {注意关系运算必须()} (y>5)t henz:= x+y{注意没;}e lse z:= 2*(x+y);6.3 c asev ars:s tring;r:i nteger;b egini f s<>'' t henb eginc ase s[1] o f =>S之第一个BYTE'1' :r:= 1; =>由小到大'2' :r:= 2;'3' :r:= 3;e lse r:= 4;e nd;e nd;6.4 w hileW hile (i>0)d ob eginx=X+I;I=I-1;e nd;w hile T rue d ob egini f (i=0)t hen b reak; =>break 中断x=X+I;I=I-1;e nd;6.5 R epeat =>先做再检查r epeatk:= i m od j;i:= j;j:= k;u ntil j=0;6.6 f orf or i:= 1t o 10 d ob egini f i=5t hen c ontinue;x:= X+I;e nd;7.程式区块7.1 单元结构u nit <单元名称>i nterface {界面部份}u ses <l ist o f u nits>;{public d eclarations}I mplementation {实作部份}u ses <l ist o f u nits>;{Private d eclarations}{implementation o f p rocedure a nd f unction}e nd.7.2 单元叫用u ses <u nitname l ist>;u nitname 会自动加上延伸档名.dcu其它单元己编释过,故不是i nclude s ource f ile 方式若使用单元有使用到相同变数,必须采限定识别u nit.IdName7.3 间接单元参考p rogram p rog;u ses u nit1;b egine nd.u nit u nit1;i nterfaceu ses u nit2;c onst b=c;i mplementatione nd.u nit u nit2;i nterfacec onst c=1;i mplementationc onst d=2;e nd.7.4 单元间交互参考允许交互参考,但不能产生循环参考(Circular u nit r eferences),若有发生必须有一单元之uses 放在i mplementation 下p rogram p rog;u ses u nit1;c onst a=b;b egine nd.u nit u nit1;i nterfaceu ses u nit2;c onst b=c;i mplementatione nd.u nit u nit2;c onst c=1;i mplementationu ses u nit1; {避开循环参考}c onst d=b;e nd.8.程序与函式8.1 程序: p rocedure 程序名(参数;参数..);l abel {标记宣告}t ype {型态定义}v ar {变数宣告}p roceduref unctionb egin{exit;}e nd;例如: P rocedure p rint(p Str :S tring );b eginw riteln(P str );e nd;8.2 函数: f unction 程序名(参数;参数..):传回资料型态; l abel {标记宣告}c onst {常数定义}t ype {型态定义}v ar {变数宣告}p roceduref unctionb egin{exit;}e nd;例如f unction a dd(n1 ,n2 :I nteger ):I nteger;a dd := n1 +n2;{r esult := N1 +N2; }e nd;8.3 传值呼叫与传址呼叫p rocedure A dd(V ar s um :I nteger ;n1 ,n2 :i nteger );b egin ---{传址识别字}s um := n1 +n2;n1 := 0;n2 := 0;e nd;p rocedure t est;v ars um ,a,b:i nteger;b egina:= 100;b:= 200;a dd(s um ,a,b); {sum =300 ,a=100 ,b=200 }e nd;8.3 f orward (前置宣告)前置宣告不须使用在i nterface 之公有宣告!,公有宣告形同forword 作用p rocedure a dd(V ar s um :i nteger ;n1 ,n2 :i nteger ); f orward;p rocedure b ase;v ar s um :i nteger;b egina dd(sum,4,5);e nd;p rocedure a dd (V ar s um :i nteger ;n1 ,n2 :i nteger );b egins um := n1 +n2;e nd;8.4 E xternal (外部函数宣告)F unction M essageBox(H wnd :I nteger ;t ext ,c aption :P char;F lags :I nteger ):I nteger ;S tdcall;e xternal 'User32.dll' N ame 'MessageBoxa';8.5 呼叫惯例编译器指令次序清除呼叫惯例r egister 由左至右函数使用暂存器p ascalp ascal 由左至右函数使用堆叠p ascal o r cc decl 由右至左呼叫者使用堆叠p ascal o r cs tdcall 由右至左函数使用堆叠W indows A pi9.例外处理9.1 r aise(引发)注意-1 :r aise 启动一个物件,而不是一个物件,通常呼叫例外类别的C reate 来快速建立例:SysUtils E xecptionc onstructor E xception.Create(const M sg: s tring);b eginF Message := M sg;e nd;c onstructor E xception.CreateFmt(const M sg: s tring;c onst A rgs: a rray o f c onst);b eginF Message := F ormat(Msg, A rgs);e nd;--------------------------------------------------F unction S trToIntRange(V ar s:string;Min,Max:Longint):Longint;b eginR esult := S trToInt(s);I f (R esult <M in )o r(r esult >M ax )t henr aise E RangeError.CreateFmt(%d i s n ot w ithin t he v alid r ange o f %d..%d',e nd; [result,Min,Max]);注意-2 :控制不会从一个raise 叙述中回传,但在例外程式区块中允许再度引发例外,9.2 T ry ... E xcept语法t ry..e xcepto n E rrorclass1 d o ..;o n E rrorclass2 d o ..;o n E rrorclass3 d o ..;e lse{othes h andle...};e nd;没有on ... d o 之语法t ry..e xcept{exception h andle}e nd;例子-1t ryr esult := s um d iv n um;e xcepto n E ZeroDivide d o r esult := 0;o n E OverFlow d o r esult := 0;o n E Matherror d o r esult := 0;{由上而下检查择一处理,注意各种错误类别间之继承顺序} e lser esult := 0;e nd;9.3 T ry ... F inally例:r eset(F);t ryp rocessFile(F);f inallyc loseFile(F);e nd;9.4 e xit ,b reak ,c ontinue 与t ry .. f inally 之运作例:p rocedure T Form1.MButton1Click(Sender: T Object);v arI:i nteger;s:s tring;b eginI:= 10;s:= '正常结束!';t ryw hile I<>0d ob eginI:= I-1;i f I=5t henb egins:= 'exit 结束';e xit;e nd;e nd;f inallyS howmessage(s); {显示exit 结束}e nd;e nd;10.DLL (动态库}10.1 D LL 特徵p roject 使用之单元是采静态连结(Statically L inked),而DLLs 采动态连结(Dynamically L inked),故Projectl 中并包含DDLs之拷贝D LLs 可用任何遵守windows D LL 之开发工具来开发或使用,适合多种开发工具同时开发环境10.2 D LL 使用(1)藉由名称(循序寻找)P rocedure I mportByName; E xternal 'TestLib.dll';(2)藉由重新名称P rocedure I mportByNewName;E xternal 'TestLib.dll' n ame 'ImportByName';(3)藉由序号(找到程式的最快方法)P rocedure I mportByOrdName;E xternal 'TestLib.dll' I ndex 1;(4)W indows A pi 之呼叫F unction M essageBox(H wnd: I nteger ;T ext,Caption:Pchr F lags:Integer):Integer;Stdcall;E xternal 'User32.dll' N ame 'MessageBox';(5)动态库之输入程式单元(例-1):Delphi 之开发环境中之u ses w indows(例-2):u nit D ateTime;{动态库之输入程式单元}i nterfacet ypeT TimeRec =R ecords s :i nteger;m i :I nteger;h h :I nteger;e nd;t ypeT DateRec =R ecordy y:Integer;m m:Integer;d d:Integer;e nd;P rocedure S etTime(Var T ime:TTimeRec);P rocedure G etTime(Var T ime:TTimeRec);P rocedure S etDate(Var D ate:TDateRec);P rocedure G etDate(Var D ate:TDateRec);I mplementationP rocedure S etTime; E xternal 'DATETIME' i ndex 1; P rocedure G etTime; E xternal 'DATETIME' i ndex 2; P rocedure S etDate; E xternal 'DATETIME' i ndex 3; P rocedure G etDate; E xternal 'DATETIME' i ndex 4;e nd;------------------------------------------------------p rogram S howTime; {呼叫程式}u ses W inCrt ,D ateTime;v arT ime :T timeRec;b eginG etTime(Time);W ith T ime D oW riteLn('Time i s',hh,':',mi,':',ss);e nd;-----------------------------------------------------(6)DDLs 之动态使用p rogram S howTime;u ses W inProcs ,W inTypesWinCrt;t ypeT TimeRec =R ecords s :i nteger;m i :I nteger;h h :I nteger;e nd;T GETTime =P rocedure(v ar T ime :T TimeRec ); V arT ime :T TimeRec;H andle :T Handle;G etTime :T GetTime;B eginH andle := L oadLibrary('DATETIME.DLL');i f H andle >= 32 t henB egin@GetTime := G etProcAddress(H andle ,'GETTIME' );I f @GetTime <>n il T hen {or I f A ssigned(GetTime)t hen }B eginG etTime(Time)W ith T ime d oW riteLn('Time i s ',hh,':',mi,':',ss);e nd;F reeLibrary(handle);e nd;e nd.10.3 D DLs 之撰写10.3.1 例子l ibrary m inmax;f unction M in(X,Y:I nteger ):I nteger;S tdCall;{避免非Delphi之程式呼叫,没有支援r egister 呼叫惯例(内定值)} B eginI f X<Y T hen M in := Xe lse M in := Y;e nd;f unction M ax(X,Y:I nteger ):I nteger;StdCall;B eginI f X>Y T hen M ax := Xe lse M ax := Y;e nd;e xportsM in i ndex 1n ame M in R esident;M ax i ndex 2n ame M ax R esident;B egine nd.。