Pascal基础(二) 数据类型与控制流程(续)
程序员文章站
2022-04-05 12:49:52
...
命令行编译
如果没有使用IDE,可以使用命令行来编译,最简单的用法就是fpc main.pas
,具体用法可以fpc -h
来查看.另外可以使用fpc -al -Amasm main.ps
来生成汇编文件,里面把pas源码作为了汇编代码的注释,可是对照参考.
结构类型举例
枚举
type Color = (Red,Green,Blue);
子界
var age:0..120;
或者使用枚举作子界的起始type Month=(Jan,Feb,Mar,Apr,May);
type Spring = Jan..Mar;
数组
type
array-identifier = array[index-type] of element-type;
type vector = array [0..24] of integer;
type temp = array[-10..50] of real;
type color = (Red,Blue,Green,Silver);
var a:vector;b:temp;c:color;d:array [1..10] of integer;
e:array[1..5,1..10] of integer;
数组定义后就不能修改大小了,这个很多语言(C语言等)都是这样的,如果想要使用运行时大小的数据则:
type darray = array of integer;
var a:darray;
b:array of array of integer;
begin
setlength(a,100);
end;
集合
var s1: set of 'a' .. 'z';
s2:set of 'a'..'z';
s3: set of 'a'..'z';
s1 := ['a','b','c'];
s2 := ['c','e','d'] ;
s3 := s1 + s2; //union
s3 := s1 - s2; //difference
s3 := s1 * s2; // intersection
集合元素不重复,可以支持交,并,差等集合操作
文件和记录
type Student = record
id:integer;
name:string[20];
end;
var FileA:file of integer;
FileB:file of Student;
FileC: textfile;
s:Student;
begin
assignfile(FileC,"file-c.txt");
append(FileC);
writeln(fileC,'Hello');
closefile(FileC);
assignfile(FileB,'file-b.dat');
rewrite(FileB);
s.id := 10;
s.name := 'tom';
write(f,s);
closefile(f);
end;
类
看到前面有记录record,class和record类似.record出现的早,class是后来加的.
record 特点:
- 不支持继承
- 不支持方法
- 支持栈,堆内存
- 支持变体
- 不支持作用域
class 特点:
- 支持继承
- 支持方法
- 支持堆内存
- 不支持变体类型
- 支持作用域
代码示例
//无具体要解决的问题,只是演示pascal语法
program demo02;
{$mode delphi}{$H+}
{$I+} // Errors will lead to an EInOutError exception (default)
uses SysUtils,Classes;
type Gender = (Male,Female);
type Weekday = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);
type Workday = Monday..Friday;
type Weekend = Saturday..Sunday;
type Person = record
id:integer;
name:string[20];
end;
type Student = record
id :integer;
name:string;
fgender:Gender;
other:variant;
end;
type Teacher = class
private
FId :integer;
FName:string;
LessionAt: array of Weekday; //上课时间
procedure SetName(n:string);
public
property Id:integer read FId write FId;
property Name:string read FName write SetName;
procedure Hello();
end;
procedure Teacher.SetName(n:string);
begin
// data validation
Self.FName := n;
end;
procedure Teacher.Hello();
begin
writeln(FId,FName);
end;
procedure StudentHello(s:Student);
begin
writeln(s.id,s.name);
end;
var s:Student;
s2:^Student;
t:Teacher;
p:Person;
f1: file of integer;
f2: file of Person;
f3: TextFile;
ss:string;
begin
s.id := 10;
s.name := 'tom';
s.other := TRUE;
s.other := 'test';
StudentHello(s);
s2 := getmem(sizeof(Student));
s2.id := 20;
s2.name := 'jerry';
StudentHello(s2^);
freemem(s2);
new(s2);
if not assigned(s2) then
begin
writeln('error ');
exit();
end
else
begin
s2.id := 50;
s2.name := 'Tomas';
StudentHello(s2^);
freemem(s2);
end;
t := Teacher.Create;
try
t.id := 30;
t.name := 'davaid';
setlength(t.LessionAt,3);
t.LessionAt[0] := Wednesday;
t.LessionAt[1] := Thursday;
t.LessionAt[2] := Friday;
t.Hello();
finally
t.Free;
end;
AssignFile(f1,'f1.dat');
try
rewrite(f1);
write(f1,10);
write(f1,20);
CloseFile(f1);
except on E: EInOutError do
writeln('File handling error occurred. Details: ', E.Message);
end;
AssignFile(f2,'f2.dat');
rewrite(f2);
p.id := 120;
p.name := 'mike';
write(f2,p);
CloseFile(f2);
p.name := 'tom';
AssignFile(f2,'f2.dat');
reset(f2);
read(f2,p);
assert(p.name = 'mike');
CloseFile(f2);
AssignFile(f3,'f3.txt');
if FileExists('f3.txt') then
append(f3)
else
rewrite(f3);
writeln(f3,'hello world');
writeln(f3,'bye');
CloseFile(f3);
AssignFile(f3,'d02.pas');
reset(f3);
while not eof(f3) do
begin
readln(f3, ss);
writeln(ss);
end;
CloseFile(f3);
end.
上一篇: pascal类型
下一篇: js创建对象的几种方式(推荐)