Arrays 数组中的Pascal最新N素数

Arrays 数组中的Pascal最新N素数,arrays,pascal,freepascal,Arrays,Pascal,Freepascal,我想打印n个素数的数组,比如如果输入是5,那么它将打印[2,3,5,7,11]。 这是我的密码 program prime; type prime_number = array [1..10] of Integer; var dataset:prime_number; n,i,j,count,angka:Integer; function isPrime(a:Integer): Boolean; var i: Integer; begin for i := 2 to r

我想打印n个素数的数组,比如如果输入是5,那么它将打印[2,3,5,7,11]。 这是我的密码

program prime;
type
  prime_number = array [1..10] of Integer;
var
  dataset:prime_number;
  n,i,j,count,angka:Integer;

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


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

end;

begin
  write('Enter n: ');read(n);
  printPrime(n,dataset);
end.
程序素数;
类型
素数=整数的数组[1..10];
变量
数据集:素数;
n、 i,j,count,angka:整数;
函数isPrime(a:整数):布尔型;
变量
i:整数;
开始
对于i:=2到四舍五入(sqrt(a))do
开始
如果(a mod i=0),则isPrime:=false
否则isPrime:=真;
结束;
结束;
过程printPrime(a:整数;var-df:素数);
变量
数字,素数,i:整数;
开始
编号:=2;
primeCount:=0;
而(primeCount

当我运行程序时,它完全正常,但它不会打印任何内容而不是数组:(有人问我的代码有什么问题吗?

我发现至少有几个问题

首先,
isPrime
:当您看到某个值除以测试值,
a
,您将希望打破循环,因此它应该更像

function isPrime(a:Integer): Boolean;
var
  i: Integer;
begin
    for i := 2 to round(sqrt(a)) do
    begin
       if(a mod i = 0) then begin
         isPrime:=false;
         exit;
       end;
    end;
    isPrime:=true;
end;
然后,在
printPrime
中,坦率地说,您有一些奇怪的逻辑

首先,你不能在这个过程中的任何地方打印任何东西

然后,当你找到一个素数时,你将
df
中的所有值初始化到该值的大小,为什么不将该值设置为
primeCount

procedure printPrime(a:Integer;var df:prime_number);
var
  number,primeCount,i: 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;
过程printPrime(a:整数;var-df:素数);
变量
数字,素数,i:整数;
开始
编号:=2;
primeCount:=0;
而(primeCount
我至少看到了几个问题

首先,
isPrime
:当您看到某个值除以测试值,
a
,您将希望打破循环,因此它应该更像

function isPrime(a:Integer): Boolean;
var
  i: Integer;
begin
    for i := 2 to round(sqrt(a)) do
    begin
       if(a mod i = 0) then begin
         isPrime:=false;
         exit;
       end;
    end;
    isPrime:=true;
end;
然后,在
printPrime
中,坦率地说,您有一些奇怪的逻辑

首先,你不能在这个过程中的任何地方打印任何东西

然后,当你找到一个素数时,你将
df
中的所有值初始化到该值的大小,为什么不将该值设置为
primeCount

procedure printPrime(a:Integer;var df:prime_number);
var
  number,primeCount,i: 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;
过程printPrime(a:整数;var-df:素数);
变量
数字,素数,i:整数;
开始
编号:=2;
primeCount:=0;
而(primeCount
Woow谢谢你,是的,我忘了制作程序来显示数组中的所有值:)。我现在很好谢谢你,是的,我忘了做一个程序来显示数组中的所有值:)。我现在很好