You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pascal生成前N个素数存入数组运行无输出问题排查

代码存在的问题
  • isPrime函数逻辑错误
    1. 当输入参数a=2时,循环范围2 to round(sqrt(2))等价于2 to 1,循环不会执行,函数返回值未初始化,默认会判定2为非素数
    2. 循环逻辑存在漏洞:只要有一次取余不为0就设置返回值为true,未提前处理边界值,建议循环开始前先设置isPrime := true,只要发现能整除的因子就设为false并直接跳出循环即可
  • printPrime过程存储逻辑错误

    判定当前数为素数后,不应该用循环给数组所有位置赋值,这会导致第一个素数就填满整个数组,且primeCount直接累加到上限,循环直接终止。正确逻辑是找到素数后,只给df[primeCount+1]赋值,primeCount仅加1次

  • 主程序缺失输出逻辑

    调用完printPrime过程后没有任何打印数组的代码,自然不会输出结果

  • 数组长度限制问题

    你定义的prime_number类型固定长度为10,输入n>10时会出现数组越界错误

修正后可运行代码
program prime;
type
  // 可根据需求调整数组最大长度,这里调整为100适配更大的n
  prime_number = array [1..100] of Integer;
var
  dataset:prime_number;
  n,i:Integer;

function isPrime(a:Integer): Boolean;
var
  i: Integer;
begin
    if a <= 1 then
    begin
      isPrime := false;
      exit;
    end;
    if a = 2 then
    begin
      isPrime := true;
      exit;
    end;
    isPrime := true;
    for i := 2 to round(sqrt(a)) do
    begin
       if(a mod i = 0) then
       begin
         isPrime:=false;
         break;
       end;
    end;
end;


procedure printPrime(a:Integer;var df:prime_number);
var
  number,primeCount: Integer;
begin
      number:=2;
      primeCount:=0;
      while (primeCount < a) do
      begin
        if(isPrime(number)) then 
        begin
          primeCount:=primeCount+1; 
          df[primeCount]:=number;
        end;
        number:=number+1;   
      end;
end;

begin
  write('Enter n: ');read(n);
  printPrime(n,dataset);
  // 新增数组输出逻辑
  write('[');
  for i := 1 to n do
  begin
    if i > 1 then write(',');
    write(dataset[i]);
  end;
  writeln(']');
end.

内容的提问来源于stack exchange,提问作者Dio Brando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 23:06:06