标签: pascal

挂其他问题?

什么是"悬挂其他"问题?(这是正确的名字吗?)

遵循C++编码标准(忘记哪一个)我总是使用带有控制结构的括号(块).所以我通常没有这个问题(最后(?)其他所有的"if"),但是为了理解外国代码中的可能问题,对这个问题有一个坚定的理解会很好.我记得多年前在一本关于Pascal的书中读过这篇文章,但我找不到那本书.

c++ pascal

4
推荐指数
2
解决办法
2525
查看次数

德尔福的"免费"做什么?

我在这里找到了以下代码片段:

with TClipper.Create do
  try
    AddPolygon(subject, ptSubject);
    AddPolygon(clip, ptClip);
    Execute(ctIntersection, solution);
  finally
    free;
  end
Run Code Online (Sandbox Code Playgroud)

只是很好奇,free声明/功能(在finally和之间end)做了什么?谷歌没有帮助.

delphi pascal

4
推荐指数
3
解决办法
1827
查看次数

如何检测Pascal中的经过时间?

我正在尝试用Pascal创建一个简单的游戏.它使用控制台.游戏的目标是在60秒内收集尽可能多的"苹果".游戏结构是一个简单的无限循环.每次迭代,你都可以一举一动.这就是问题 - 在你做出移动之前(readKey),时间可以按照自己的意愿传递.例如,用户可以在10秒后按键!有没有办法计算时间?我需要程序知道用户何时播放(按下按键之前和之后),所以我不知道如何防止用户"作弊".

这是我游戏的简单结构:

begin
    repeat
        {* ... *}
        case ReadKey of
            {* ... *}
        end;
        {* ... *}
    until false;
end.
Run Code Online (Sandbox Code Playgroud)

完整代码:http://non.dagrevis.lv/junk/pascal/Parad0x/Parad0x.pas.

据我所知,有两种可能的解决方案:

  1. getTime(来自DOS),
  2. 延迟(来自CRT).

...但我不知道如何在循环中使用它们.

console time pascal infinite-loop

4
推荐指数
1
解决办法
3956
查看次数

Divide(DIVS)没有在jack crenshaw上工作让我们构建一个编译器

我正在关注Jack Crenshaw在http://compilers.iecc.com/crenshaw上发表的优秀的Let's Build a Compiler教程.我正在使用Easy68k http://www.easy68k.com/ 68000编辑器/汇编器/模拟器测试生成的68k组件.我已经进入了第2部分http://compilers.iecc.com/crenshaw/tutor2.txt但是Divide程序对我来说不能正常工作.

...
{ Recognize and Translate a Divide }
procedure Divide;
begin
  Match('/');
  Factor;
  EmitLn('MOVE (SP)+,D1');
  EmitLn('DIVS D1,D0');
end;
...
Run Code Online (Sandbox Code Playgroud)

如果我输入"8/2"作为测试,则编译器生成以下代码:

MOVE #8,D0
MOVE D0,-(SP)
MOVE #2,D0
MOVE (SP)+,D1
DIVS D1,D0
Run Code Online (Sandbox Code Playgroud)

在我看来它实际上是在计算2/8(即它是错误的回合方式),因为之后D0中剩下的值是00020000.我可以通过将最后一行重写为DIVS D0,D1来解决这个问题,但是这会导致结果根据其他惯例,D1而不是D0,这样的开创性工作似乎不太可能.我搜索过互联网,但我看不到其他人遇到过这个问题.所以这意味着:1)我做错了 - 可能2)杰克做错了 - 不太可能3)Easy68k模拟器做错了 - 不太可能然而我只是看不出我做错了什么.请帮忙.

assembly pascal 68000

4
推荐指数
1
解决办法
497
查看次数

退出循环退出函数

我今天下午一直在Inno Setup编写代码,然后我阅读了一些Pascal文档,其中说exit用于退出循环.我尝试在我的代码中使用它,而是退出该函数.例如,在此函数中,永远不会显示消息框:

function NextButtonClick(CurPageID: Integer): Boolean;
var i: Integer;
begin
    Result := True;

    for i := 0 to 4 do
    begin
        exit
    end;

    MsgBox('test',mbInformation,MB_OK);
end;
Run Code Online (Sandbox Code Playgroud)

我做了一些谷歌搜索,Pascal也有break关键字,所以我使用它,它工作正常.难道exit真的要被用来退出该功能?我记得今天下午读到的Pascal没有相当于C风格的返回语句.

我真的需要一些关于Inno Setup正在使用的Pascal版本的文档.我已经阅读了Inno帮助页面,但它们没有涵盖这样的内容.谢谢

pascal inno-setup

4
推荐指数
1
解决办法
4934
查看次数

使用FPC编写Scheme解释器:分配和指针

作为一名历史学家,在FPC中编写一个Scheme解释器已经在第一阶段转向对我来说是一项严肃的任务.:)我正在关注Peter Michaux的博客,他在C中展示了如何做到这一点(还有一个Ada的翻译,可能对Pascal有帮助).

从Michaux的工作中考虑C中的这两个函数(v 0.1):

object *alloc_object(void) {
    object *obj;

    obj = malloc(sizeof(object));
    if (obj == NULL) {
        fprintf(stderr, "out of memory\n");
        exit(1);
    }
    return obj;
}

object *make_fixnum(long value) {
    object *obj;

    obj = alloc_object();
    obj->type = FIXNUM;
    obj->data.fixnum.value = value;
    return obj;
}
Run Code Online (Sandbox Code Playgroud)

据我所知(只是C中的基本阅读知识),构造函数make_fixnum返回一个指向struct的指针(类型为fixnum的标记数据); 对于构造的对象,必须分配内存(感谢@David Heffernan 昨天的观点).

这是我到目前为止对FPC的翻译,它编译时没有任何错误:

program scheme;

type
   TTag = (ScmFixnum);
   PScmObject = ^TScmObject;
   TScmObject = record
      case ScmObjectTag: TTag of
         ScmFixnum: (ScmObjectFixnum: integer); …
Run Code Online (Sandbox Code Playgroud)

delphi scheme pascal freepascal sicp

4
推荐指数
1
解决办法
243
查看次数

Innosetup中的字符串数组

我试图在一行中的InnoSetup中的子字符串后得到一个特定的整数.有Trim,TrimLeft,TrimRight函数但没有子串提取函数.

示例:

line string:    2345
line another string:     3456
Run Code Online (Sandbox Code Playgroud)

我想提取"2345"和"3456".

我正在加载数组中的文件内容,但无法通过array [count] [char_count]取消引用它.

pascal inno-setup

4
推荐指数
1
解决办法
6663
查看次数

帕斯卡套接字

如何在 Pascal 中使用网络套接字? xad\xc2\xx xc2\xad\xc2\xad\xc2\xad\xc2\xad\xc2\xad\xc2\xad\xc2\xad\xc2\xad\xc2\xad\ xc2\xad\xc2\xad\xc2\xad\xc2\ xad\xc2\xx xc2\xd\xc2\xd\xc2\xd

\n

sockets pascal

3
推荐指数
1
解决办法
7906
查看次数

Delphi中的MD5/Pascal/FreePascal用于短字符串

我试图为短字符串(短于64字节)实现简单的MD5.我正在使用维基百科的算法..一切都编译,但我的结果是字符串:

"hello world" 
Run Code Online (Sandbox Code Playgroud)

是:

BB3BB65ED0EE1EE0BB22CB93C3CD5A8F
Run Code Online (Sandbox Code Playgroud)

虽然它应该是:

5EB63BBBE01EEED093CB22BB8F5ACDC3
Run Code Online (Sandbox Code Playgroud)

完整代码在这里:

program Prog;

uses Classes, SysUtils;

function leftrotate(x, c: Cardinal): Cardinal;
begin
  leftrotate := (x shl c) or (x shr (32-c));
end;

const s: array[0..63] of Cardinal = (
    7, 12, 17, 22,  7, 12, 17, 22,  7, 12, 17, 22,  7, 12, 17, 22,
    5,  9, 14, 20,  5,  9, 14, 20,  5,  9, 14, 20,  5,  9, 14, 20,
    4, 11, 16, 23,  4, 11, 16, 23, …
Run Code Online (Sandbox Code Playgroud)

delphi pascal md5 freepascal turbo-pascal

3
推荐指数
1
解决办法
1657
查看次数

使用Firedac运行SQL存储过程

我试图弄清楚如何使用firedac运行存储过程

unit DataLayer.OilCommanderConnection;

interface

uses
  FireDAC.Phys.FB,
  Generics.Collections,
  Model.Sample,
  Model.Batch,

  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error,
  FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool,
  FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.MySQL, Data.DB,
  FireDAC.Comp.Client, FireDAC.Phys.MSSQL,
  FireDAC.DApt,
  FireDAC.Comp.UI
  ;

type
  TOilCommanderConnection = class
    strict private
    public
      Connection : TFDConnection;

      function GetSampleTypesForBatch(Batch : TBatch) : Boolean;  

      function Connect:Boolean;
      constructor Create;
      destructor Destroy; override;
  end;

implementation

uses
  SysUtils
  ;

function TOilCommanderConnection.Connect:Boolean;
var
    OK : Boolean;
begin
    OK := true;
    Connection := TFDConnection.Create(nil);
    try
        Connection.Params.LoadFromFile('MSSQL.ini');
    finally
        Result := OK;
    end;
end;

function TOilCommanderConnection.GetSampleTypesForBatch(Batch : TBatch) : Boolean; …
Run Code Online (Sandbox Code Playgroud)

sql sql-server delphi pascal firedac

3
推荐指数
1
解决办法
4192
查看次数