需要帮助修复Pascal中的错误201
need help to fix Error 201 in Pascal
我正试图将此C++代码转换为Pascal,但遇到错误201。有人能帮我修吗?
C++代码:
int n;
bool a[100];
void show()
{
for (int i=1; i<=n; i++)
if (a[i])
printf("%d ", i);
printf("n");
}
void bt(int u)
{
if (u==n+1)
{
show();
return ;
}
a[u]=0;
bt(u+1);
a[u]=1;
bt(u+1);
}
main()
{
scanf("%d", &n);
bt(1);
}
Pascal代码:
type data = integer; var i,n:integer; a:array[0..100] of integer; b:array[0..100] of integer;
procedure show; var i:data; begin
for i:=1 to n do
begin
if (b[i]=0) then
writeln(a[i]);
end; end;
procedure bt(i:data); var u:data; begin
if (u=n+1) then
begin
show();
end
else
b[u]:=0;
bt(u+1);
b[u]:=1;
bt(u+1);
end;
begin
write('Nhap n ');
readln(n);
bt(1); end.
谢谢,很抱歉我的英语水平
我的c++有点生疏,但对我来说这不是一个准确的翻译
type
data = integer;
var
// i,
n : integer;
a : array[0..100] of boolean; // integer;
// b : array[0..100] of integer;
procedure SetUp;
var
i : Integer;
begin
for i := 0 to 100 do
a[i] := True;
end;
procedure show;
var
i : data;
begin
for i := 1 to n do
begin
if a[i] then
write(i);
end;
writeln;
end;
procedure bt(i : data);
var
u : data;
begin
if ( u = n + 1) then
begin
show();
end;
/// else
// b[u] := False;
bt(u + 1);
a[u] := True;
bt(u+1);
end;
begin
SetUp;
write('Nhap n ');
readln(n);
bt(1);
readln;
end.
Pascal有一个原生的Boolean类型,因此我更改了数组a的声明。我包含了一个例程SetUp来显式初始化它。我不确定你的数组b来自哪里。
顺便说一句,如果SetUp将a元素的值设置为false,那么您将得到的所有输出都是一系列空行。
一个尽可能精确的转换是:
program StackOverflow1;
{$APPTYPE CONSOLE}
var
n: Integer;
a: array[0..99] of Boolean;
procedure show;
var
i: Integer;
begin
for i := 1 to n do // This is very suspicious!
if a[i] then
Write(i, ' ');
Writeln;
end;
procedure bt(u: Integer);
begin
if u = n + 1 then
begin
Show;
Exit;
end;
a[u] := False;
bt(u + 1);
a[u] := True;
bt(u + 1);
end;
begin
Writeln('enter n:');
Readln(n);
bt(1);
end.
线路
for i := 1 to n do // for (int i=1; i<=n; i++)
看起来应该是
for i := 0 to n - 1 do // for (int i=0; i<n; i++)
C没有范围检查,所以它不会给你一个错误。但是您的Pascal有,这个循环可能就是您得到运行时错误201的原因。
我不知道这个程序应该做什么,但如果C程序没有提供正确的结果,我也不会感到惊讶。
如果n
的值接近99,您会得到堆栈溢出错误(或其等效的运行时数),我也不会感到惊讶。如果用户输入n > 99
的值,这可能会导致范围检查错误,有时,如果堆栈溢出错误不是第一个出现的话。
我尝试了n = 80
,它花了很长时间,所以我Ctrl+C就搞定了。
或者,您可以使用
a: array[1..100] of Boolean;
但是这与C程序不匹配。在C中,所有数组都是以零为基础的。如果原始的C程序工作正常,那么我的Pascal翻译也应该正常。
错误201似乎是范围检查错误(http://www.freepascal.org/docs-html/user/userap4.html)。
在过程bt
中,即使尚未初始化u
,也要将u
与n+1
进行比较。这可能会导致奇怪的结果,因为它可能是任何有效的整数。与某些其他语言不同,但与C语言类似,Pascal不会将变量初始化为默认值(http://www.freepascal.org/docs-html/ref/refse23.html)。
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 需要帮助修复Pascal中的错误201