欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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