编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   
 擦拭 - 帕斯卡旋风
指数 -> 一般编程
查看上一个主题 可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
WTD.




邮政发布: 星期四2006年6月29日12:19下午12:19  帖子主题:WIP - Pascal Whirlwind

你好,帕斯卡!

让我只需打开我的文本编辑器并创建一个名为hellopascal.pas的文件。

代码:
节目HelloPascal;
开始
   writeln('Hello, Pascal!')
结尾。


然后假设我已经安装了免费的Pascal编译器,我只是拒绝了我的命令行,运行“FPC HelloPascal”,我用同名的二进制文件留下了。我不需要附加“.pas”扩展。编译器知道要查看具有该扩展名的源文件。

名称for things

让我们给出这个消息一个名字。

代码:
节目HelloPascal;
const
   问候='你好,帕斯卡!';
开始
   writeln(greeting)
结尾。


帕斯卡致敬,即我所做的就是很容易看到。我已经开始了一个const子句,其中我定义了常量值并给出名称。

但为什么半冒号 那里? Pascal使用半冒号作为分离器。半冒号指示我希望分离两件事的编译器。在此案例中,我将常量问候语的定义分开,以及Begin关键字。呼叫Writeln程序后,一个是不是必需的,因为帕斯卡尔特别重视“结束”关键字。

让我们说我现在希望向写作这条消息的行为的名字。我将创建一个过程,SICNE程序和FUCNTIONS是如何可执行代码主要分组和命名的。

代码:
节目HelloPascal;
const
   问候='你好,帕斯卡!';
   
   程序编写;
   begin
      writeln(greeting)
   end;
开始
   WriteMessage
结尾。


迎接ing anyone

有点灵活性会很好。为此,我将定义一个名称参数的迎宾过程,然后在我打电话时通过“世界”作为参数。

代码:
节目HelloPascal;
const
   问候='你好,帕斯卡!';

   程序编写;
   begin
      writeln(greeting)
   end;

   procedure Greet(name: string);
   begin
      writeln('你好,'+ name +'!')
   end;
开始
   WriteMessage;
   Greet('world')
结尾。


让我们歧视

代码:
节目HelloPascal;
   procedure Greet(name: string);
   begin
     如果name ='wtd'则
         writeln(name + '?!  That cur!')
      else
         writeln('你好,'+ name +'!')
   end;
开始
   Greet('wtd')
结尾。


但这只对WTD表示一件事,那就是不够的。

代码:
节目HelloPascal;
   procedure Greet(name: string);
   begin
     如果name ='wtd'则
         begin
            writeln(name + '?!  That cur!');
            writeln(“和邪恶的头脑一起关闭!”)
         end
      else
         writeln('你好,'+ name +'!')
   end;
开始
   Greet('wtd')
结尾。


快速注意

帕斯卡是不区分大小写的,所以你可以看到代码,如果或if。没关系。您可以定义redord,然后使用它作为问候,这也很好。最好的建议是选择一个风格并坚持下去。

让我们使用一种类型

让我们创建一个包含一个更复杂的名称的记录类型,以及一个操作它的过程。

代码:
节目HelloPascal;
类型
   name = record
      first, last : string;
   end;

   procedure Greet(n : name);
   begin
      writeln('你好,',n.first,'',n.last,'!')
   end;

var.
   bobsName : name;
开始
   bobsName.first := 'Bob';
   bobsName.last := 'Smith';

   Greet(bobsName)
结尾。


让我们添加一点糖

代码:
节目HelloPascal;
类型
   name = record
      first, last : string;
   end;

   procedure Greet(n : name);
   begin
      with n do
         writeln('你好,',第一个,'',最后,'!')
   end;

var.
   bobsName : name;
开始
   bobsName.first := 'Bob';
   bobsName.last := 'Smith';

   Greet(bobsName)
结尾。


盛大一致吗?

代码:
节目HelloPascal;
类型
   name = record
      first, last : string;
   end;

   procedure Greet(n : name);
   begin
      with n do
         writeln('你好,',第一个,'',最后,'!')
   end;

var.
   bobsName : name;
开始
   与bobsname做开始
      first := 'Bob';
      last := 'Smith';
   end;

   Greet(bobsName)
结尾。


注意如何向使用构造提供一块代码,而不是单个语句。您还应该注意到这是我对条件的方式做的方式。

新名称很好

因此,让我们创建一个帮助我们创建它们的过程。

代码:
节目HelloPascal;
类型
   name = record
      first, last : string;
   end;
   
   过程italyizename.(var n : name; first, last : string);
   begin
      n.first := first;
      n.last := last
   end;

   procedure Greet(n : name);
   begin
      with n do
         writeln('你好,',第一个,'',最后,'!')
   end;

var.
   bobsName : name;
开始
   InitializeName(Bobsname,'bob','smith');

   Greet(bobsName)
结尾。


只有一个问题......

为了初始化名称,我必须有一个名称变量。我不能只创建一个名称并直接使用它。因为我需要一个职能。

代码:
节目HelloPascal;
类型
   name = record
      first, last : string;
   end;
   
   function NewName(first, last : string) : name;
   var
      n : name;
   begin
      n.first := first;
      n.last := last;
     
      NewName := n
   end;

   procedure Greet(n : name);
   begin
      with n do
         writeln('你好,',第一个,'',最后,'!')
   end;

var.
   bobsName : name;
开始
   bobsName := NewName('Bob', 'Smith');

   Greet(bobsName)
结尾。


要不就:

代码:
节目HelloPascal;
类型
   name = record
      first, last : string;
   end;
   
   function NewName(first, last : string) : name;
   var
      n : name;
   begin
      n.first := first;
      n.last := last;
     
      NewName := n
   end;

   procedure Greet(n : name);
   begin
      with n do
         writeln('你好,',第一个,'',最后,'!')
   end;
开始
   Greet(NewName('Bob', 'Smith'))
结尾。


有些清理的时间

我们现在有一个体面的计划,这很好。但如果我想在其他地方使用我的名字类型和它相关的例程,该怎么办?

嗯,让我们创建一个名为nameunit.pas的文件,该文件包含一个单位或代码模块。

代码:
单位名称恩纳特;

界面

   type
       name = record
          first, last : string;
      end;

   function NewName(first, last : string) : name;
   procedure Greet(n : name);

执行

   function NewName(first, last : string) : name;
   var
      n : name;
   begin
      n.first := first;
      n.last := last;

      NewName := n
   end;

   procedure Greet(n : name);
   begin
      with n do
         writeln('你好,',第一个,'',最后,'!')
   end;

结尾。


现在我们将重写我们的HelloPascal.PAS计划。

代码:
节目HelloPascal;
用途
   NameUnit;
开始
   Greet(NewName('Bob', 'Smith'))
结尾。


很好,呃?

虽然以前的程序已被编写为“FPC HelloPascal”,但该新设置应使用“FPC HelloPascal NameUnit”编译。

一个毫无意义的阵列

代码:
节目HelloPascal;
用途
   NameUnit;
var.
   names :数组[1..10]的名称;
开始
   names[1] := NewName('Bob', 'Smith');
   Greet(names[1])
结尾。


略微不那么毫无意义

代码:
节目HelloPascal;
用途
   NameUnit;
var.
   names :数组[1..10]的名称;
   i : Integer;
开始
   for i := 1 to 10 do
      names[i] := NewName('Bob', 'Smith');

   for i := 1 to 10 do
      Greet(names[1])
结尾。


也许:

代码:
节目HelloPascal;
用途
   NameUnit;
var.
   names :数组[1..10]的名称;
   i : Integer;
开始
   for i := 1 to 10 do
   begin
      names[i].first := 'Bob';
      names[i].last := 'Smith';
   end;

   for i := 1 to 10 do
      Greet(names[1])
结尾。


甚至:

代码:
节目HelloPascal;
用途
   NameUnit;
var.
   names :数组[1..10]的名称;
   i : Integer;
开始
   for i := 1 to 10 do
   with names[i] do
   begin
      first := 'Bob';
      last := 'Smith';
   end;

   for i := 1 to 10 do
      Greet(names[1])
结尾。


指针加长!

阵列是如此静止。让我们使用链接列表。这意味着指针。

代码:
节目HelloPascal;
用途
   NameUnit;
类型
   PNode = ^TNode;

   TNode = record
      Data : Name;
      Next : PNode;
   end;
var.
   list : PNode;

   程序打招呼(list : PNode);
   var
      current : PNode;
   begin
      current := list;

      while current <> nil do
      with current^ do
      begin
         Greet(data);

         current := next;
      end;
   end;

   procedure NewList(var list : PNode; value : Name);
   begin
      New(list);

      with list^ do
      begin
         data := value;
         next := nil;
      end;
   end;

   程序阑尾博物馆(var list : PNode; value : Name);
   var
      current, last : PNode;
   begin
      if list = nil then
         NewList(list, value)
      else begin
         current := list;

         while current <> nil do
         with current^ do
         begin
            last := current;
            current := next;
         end;

         NewList(last^.next, value);
      end;
   end;
开始
   AppendToList(list, NewName('Foo', 'Bar'));
   AppendToList(list, NewName('Bob', 'Smith'));

   GreetAllInList(list);
结尾。


不是对象盛大?

世界卫生大会?!帕斯卡有物体?好吧,是的,Pascal有能力与物体合作。在以下内容我将使用免费的Pascal编译器的OO扩展。因此,我必须使用“-s2”选项编译。

代码:
程序测试;
用途
   Name, NameList;
var.
   list : TNameList;
开始
   list := TNameList.Create;

   list.Append(TName.Create('Bob', 'Smith'));
   list.Append(TName.Create('Foo', 'Bar'));

   list.GreetAll;
结尾。


并做出以下两个单位。

代码:
单位名称;

界面

   type
      TName = class
             First, Last : String;
      public
             constructor Create(f, l : String);

             function FullName : String;
             procedure Greet;
      end;

执行

   构造函数tname.create.(f, l : String);
   begin
      First := f;
      Last := l;
   end;

   函数tname.fullname.: String;
   begin
      FullName := First +''+最后;
   end;

   过程TName.greet;
   begin
      writeln('你好,',fullname,'!');
   end;

结尾。


代码:
单位Namelist;

界面

   uses

      Name;

   type
      PNode = ^TNode;

      TNode = record
         Data : TName;
         Next : PNode;
      end;

      TNameList = class
         Head : PNode;
      public
         constructor Create;

         procedure Append(NewName : TName);
         procedure GreetAll;
      end;

执行

   构造函数T列表.CREATE;
   begin
      Head := nil;
   end;

   程序Tnelist.Append.(NewName : TName);
   var
      current : PNode;
   begin
      if Head = nil then
         begin
            New(Head);
            Head^.Data := NewName;
            Head^.Next := nil;
         end
      else
         begin
            current := Head;

           虽然当前^ .next<> nil do
               current := current^.Next;

            New(current^.Next);
           使用当前^ .next ^ do
            begin
               Data := NewName;
               Next := nil;
            end;
         end;
   end;

   手术泰名列表。
   var
      current : PNode;
   begin
      current := Head;

      while current <> nil do
      begin
         current^.Data.Greet;
         current := current^.Next;
      end;
   end;

结尾。


对象和界面

所以我们已经看到它有可能在帕斯卡尔拥有物体。但是,有些人争辩说,接口是面向对象编程的关键概念。帕斯卡也可以处理。

代码:
程序interfacetest;

类型
   IHasName = interface
      function Name : string;
   end;

   TName = class(tinterfacedobject,ihasname.)
      constructor Create(f, l : string);

      function First : string;
      function Last : string;
      function Name : string;
   private
      FFirst, FLast : string;
   end;

   TSingleName = class(tinterfacedobject,ihasname.)
      constructor Create(n : string);

      function Name : string;
   private
      FName : string;
   end;

   {reduct函数}

   procedure Greet(n : IHasName);
   begin
      writeln('你好,',n.name,'!');
   end;

   { Implement TName }

   构造函数tname.create.(f, l : string);
   begin
      FFirst := f;
      FLast := l;
   end;

   函数tname.first.: string;
   begin
      First := FFirst;
   end;

   function TName.Last : string;
   begin
      Last := FLast;
   end;

   function TName.Name : string;
   begin
      Name := ffirst +''+ flast;
   end;

   {实现Tsinglename}

   构造函数tsinglename.create.(n : string);
   begin
      FName := n;
   end;

   函数tsinglename.name.: string;
   begin
      Name := FName;
   end;

var.
   Names :array [1..2]的ihasname;
   Index : integer;
   
开始
   Names[1] := TName.Create('Bob', 'Smith');
   Names[2] := TSingleName.Create('Foo');

   for Index := 1 to 2 do Greet(Names[Index]);
结尾。


抽象基类

当然,我们可以与抽象级别相同。

代码:
程序AbstractClasstest;

类型
   TNameBase = class(TObject)
      function Name :细绳;虚拟的;抽象的;
      procedure Greet;
   end;

   TName = class(TNameBase)
      constructor Create(f, l : string);

      function First : string;
      function Last : string;
      function Name : string; override;
   private
      FFirst, FLast : string;
   end;

   TSingleName = class(TNameBase)
      constructor Create(n : string);

      function Name : string; override;
   private
      FName : string;
   end;

   {实现tnamebase}

   过程TNameBase.greet;
   begin
      writeln('Hello, ', Name, '!');
   end;

   { Implement TName }

   构造函数tname.create.(f, l : string);
   begin
      FFirst := f;
      FLast := l;
   end;

   函数tname.first.: string;
   begin
      First := FFirst;
   end;

   function TName.Last : string;
   begin
      Last := FLast;
   end;

   function TName.Name : string;
   begin
      Name := ffirst +''+ flast;
   end;

   {实现Tsinglename}

   构造函数tsinglename.create.(n : string);
   begin
      FName := n;
   end;

   函数tsinglename.name.: string;
   begin
      Name := FName;
   end;

var.
   Names :tnamebase的数组[1..2];
   Index : integer;

开始
   Names[1] := TName.Create('Bob', 'Smith');
   Names[2] := TSingleName.Create('Foo');

   for Index := 1到2 do名称[index] .greet;

结尾。
赞助
赞助
赞助
赞助
安迪




邮政发布: 周四2006年6月2日1:52  帖子主题:(没有主题)

谢谢wtd!我一直想学习帕斯卡尔..甘娜找到了一些时间在考试后通过这个阅读。
塞万提斯




邮政发布: 2006年6月29日星期四:下午8:28  帖子主题:(没有主题)

GOHH WTD,你是最好的。我现在真的可以看到他们为什么这么说定期的语法是由帕斯卡的启发。

作为一个特别的要求,下一个旋风可以在方案中吗?我可以想到至少一个肯定对此感兴趣的人。 眨眼

这假设你愿意做另一个旋风。我意识到这是很多工作,而不是试图对你带来任何压力。
克莱顿




邮政发布: 周四2006年6月28日8:55  帖子主题:(没有主题)

omg,我实际上可以讲述什么 很高兴 它很容易读,它很容易在眼睛上,这总是一个奖金,等于案例不敏感,更容易尝试写,你在哪里可以得到这个神奇的帕斯卡编译器?唔?
[Gandalf]




邮政发布: 星期四2006年6月9:09 PM  帖子主题:(没有主题)

Superfreak,做谷歌搜索。

WTD,另一个大旋风。除了一个伟大的程序员之外,您肯定是一个专业的教程作者。 眨眼 我一旦完成C版本就会通过它阅读。说到哪个......
WTD.




邮政发布: 周五2006年6月30日上午10:50  帖子主题:(没有主题)

与C旋风一样,经常检查更新。
WTD.




邮政发布: 星期五2006年6月30日12:38 PM  帖子主题:(没有主题)

塞万提斯写道:
作为一个特别的要求,下一个旋风可以在方案中吗?我可以想到至少一个肯定对此感兴趣的人。 眨眼


方案太容易要求这样的东西。
WTD.




邮政发布: 2006年7月10日星期一:下午4:32  帖子主题:(没有主题)

更新添加。阵列上的一些部分。
赞助
赞助
赞助
赞助
WTD.




邮政发布: 孙08年10月,2006年11:34 AM  帖子主题:(没有主题)

更多的东西在帕斯卡尔oop上添加。
m




邮政发布: 太阳08年10月8日,2006年4:16 PM  帖子主题:(没有主题)

现在我几乎想要回到帕斯卡......如果只有课程实施一点点不同,C ++样式语法对我来说似乎更加自然。
缺口




邮政发布: 2007年8月15日星期三上午11:50  发布主题:RE:WIP - Pascal Whirlwind

非常感谢我下载Pascal Atm(特别感谢Rdrake的所有帮助)以来,这是伟大的
从上一个显示帖子:   
   指数 -> 一般编程
查看上一个主题 告诉一个朋友可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题

11  [ 11 Posts ]
跳到:   


Style:  
搜索: