什么是"悬挂其他"问题?(这是正确的名字吗?)
遵循C++编码标准(忘记哪一个)我总是使用带有控制结构的括号(块).所以我通常没有这个问题(最后(?)其他所有的"if"),但是为了理解外国代码中的可能问题,对这个问题有一个坚定的理解会很好.我记得多年前在一本关于Pascal的书中读过这篇文章,但我找不到那本书.
我在这里找到了以下代码片段:
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)做了什么?谷歌没有帮助.
我正在尝试用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.
据我所知,有两种可能的解决方案:
...但我不知道如何在循环中使用它们.
我正在关注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模拟器做错了 - 不太可能然而我只是看不出我做错了什么.请帮忙.
我今天下午一直在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帮助页面,但它们没有涵盖这样的内容.谢谢
作为一名历史学家,在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) 我试图在一行中的InnoSetup中的子字符串后得到一个特定的整数.有Trim,TrimLeft,TrimRight函数但没有子串提取函数.
示例:
line string: 2345
line another string: 3456
Run Code Online (Sandbox Code Playgroud)
我想提取"2345"和"3456".
我正在加载数组中的文件内容,但无法通过array [count] [char_count]取消引用它.
如何在 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我试图为短字符串(短于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) 我试图弄清楚如何使用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) pascal ×10
delphi ×4
freepascal ×2
inno-setup ×2
68000 ×1
assembly ×1
c++ ×1
console ×1
firedac ×1
md5 ×1
scheme ×1
sicp ×1
sockets ×1
sql ×1
sql-server ×1
time ×1
turbo-pascal ×1