如何在pascal中设置大数组大小?

时间:2017-11-14 11:43:44

标签: arrays size pascal

我需要在pascal中创建一个巨大的数组,这样的事情可能吗? 我知道大小号码,我的意思是它不是n或未知,它只是一个非常大的数字:

2 ^ 255

我可以这样做吗?如果没有,还有什么其他方法可以让这样的事情发生吗? 提前致谢

更新: 我试图解决的问题是,通过给出1到255之间的数字(包括1和255),我需要打印所有格雷码,其长度为该数字,例如: 给n = 2的程序应该打印: 00,01,11,10

因为我有可以输入的最大大小数量,所以我假设我用最大数字制作一个数组,事情可能是我可以通过递归来解决这个问题,但是我对pascal很新我不知道我怎么能这样做(至少现在还没有)

这就是我的意思: type arr = array[1..255,1..MAXINT] of integer;

提示和提示可能非常有用< 3

2 个答案:

答案 0 :(得分:0)

我猜这是一个XY problem。在数组中存储如此大量的数据而不是按需获取它似乎毫无用处。

原因如下:

  1. 假定的数组必须以编程方式填充(人类无法手动填充此类数组),这意味着您肯定有一个算法用于此目的。
  2. 如何分配10 ^ 64 GB(由@ Alex-K计算)的内存来存储所有这些数据?
  3. Windows 7/8 Ultimate x64的最大RAM限制分别为192 GB和512 GB(仅适用于x32 - 4 GB)。
  4. 您认为初始化此数组并为其成员分配值需要多长时间?
  5. 结论:

    1. 为什么不使用意图填充数组的function Foo(const bt:byte; const it: cardinal): integer;来获取必要的值?您将从Foo(100 ,32000)而不是MyArray[100, 32000]
    2. 中获取数据
    3. 如果您有一些排除(值与用户在运行时更改的Foo计算的值不同),您可以将它们存储在array of TMyRec(或TList)中{{1} }。

答案 1 :(得分:0)

我不熟练帕斯卡,但这是我写的东西。它需要一个数字输入并将其转换为二进制,然后转换为格雷码。

这是我能做的最好的事情,因为Pascal不再是我的主要工作。 :)

Uses Math;

var
a,b,d,e,f:integer;
c:array[1..255] of integer;

begin
write('input a decimal number! ');
readln(a);
write('grey code of decimal ',a,' is ');

if a<=1 then write(a) else

repeat
 b:=b+1;
 d:=a div 2;
 c[b]:=a mod 2;
 if d<=1 then
 begin
  b:=b+1;
  c[b]:=d;
 end;
 a:=d;
until d<=1;

for e:=b downto 1 do
begin
 //HERE YOU WOULD NEED TO EDIT AND FIX THIS, I THINK THIS WILL ONLY WORK FOR 
 //1-9
 write(c[e -1] xor 1 shl (c[e]>>1));
end;

readln
end.