用Pascal从数组中计算素数

用Pascal从数组中计算素数,pascal,freepascal,pascalscript,turbo-pascal,Pascal,Freepascal,Pascalscript,Turbo Pascal,我的帕斯卡有问题。我想数数素数,但没有结果: 我的代码是: Program arrayToFunction; const size = 5; type a = array [1..size] of integer; var aNumbers: a = (1, 7, 3, 4, 5); iCountNumbers: integer; function countPrimeNumbers( var arr: a) : integer; var i :0..size; su

我的帕斯卡有问题。我想数数素数,但没有结果: 我的代码是:

Program arrayToFunction;
const
 size = 5;
type
  a = array [1..size] of integer;
var
 aNumbers:  a = (1, 7, 3, 4, 5);
 iCountNumbers: integer;
function countPrimeNumbers( var arr: a) : integer;
  var
   i :0..size;
   sum,j,count: integer;
  begin
  sum := 0;count:=0;
  for i := 0 to size do
  begin
      for j := 2 to arr[i] do
          begin
               if(arr[i] mod j = 0) then sum:=1;
          end;
      if(sum=0) then count:=count+1;

  end;
 countPrimeNumbers := count;
end;
begin
 iCountNumbers := countPrimeNumbers( aNumbers ) ;*)
  writeln( 'Numbers: ', iCountNumbers);
  readln;
end.  
对于这个数组,我想得到3,但我得到2…我不知道我的问题在哪里。请帮助我

您输入了整数的a=数组[1..size];,但是,然后使用for i:=0来迭代数组。下标需要与声明的范围匹配

设置总和:=0;在进入该循环之前,但不要再将其设置回零。找到非素数后,将sum设置为=1;,它会留在那里。一旦检测到非素数,就永远不会检测到素数

您找到的两个素数是arr[0]处的垃圾,以及arr[1]处的1。请注意,1不是素数,但您的代码会得出结论,它是素数。7是素数,但您的代码会认为它不是素数,因为它最终会注意到它本身是可除的。

您有一个整型的类型a=array[1..size];,但是,然后使用for i:=0来迭代数组。下标需要与声明的范围匹配

设置总和:=0;在进入该循环之前,但不要再将其设置回零。找到非素数后,将sum设置为=1;,它会留在那里。一旦检测到非素数,就永远不会检测到素数


您找到的两个素数是arr[0]处的垃圾,以及arr[1]处的1。请注意,1不是素数,但您的代码会得出结论,它是素数。7是素数,但您的代码会认为它不是素数,因为它最终会注意到它本身是可除的。

我看到的主要问题是,您没有重新初始化sum变量,所以在sum值变为1后,它始终是1。加和:=0;在ifsum=0之后,则count:=count+1;。但是代码中也有一些错误。例如,数组索引从1开始,但i:=0到size do的循环从0开始,因此在第一次迭代时,arr[i]中会出现错误。我已经有一段时间没有使用任何pascal 34年了,但索引从0或1开始。你两者都用。所以我想这就是问题所在。现在是学习使用调试器的好时机。顺便说一句,您不太可能同时使用免费的Pascal、Pascal脚本和Turbo Pascal,因为它们与您编写的代码不兼容。只添加真正适用于你的问题的标签——不要随意添加那些看起来相似的标签。在这种情况下,这些似乎只是pascal和freepascal或pascal和turbo pascal,但不是全部。我看到的主要问题是,您没有重新初始化sum变量,所以在sum值变为1后,它总是1。加和:=0;在ifsum=0之后,则count:=count+1;。但是代码中也有一些错误。例如,数组索引从1开始,但i:=0到size do的循环从0开始,因此在第一次迭代时,arr[i]中会出现错误。我已经有一段时间没有使用任何pascal 34年了,但索引从0或1开始。你两者都用。所以我想这就是问题所在。现在是学习使用调试器的好时机。顺便说一句,您不太可能同时使用免费的Pascal、Pascal脚本和Turbo Pascal,因为它们与您编写的代码不兼容。只添加真正适用于你的问题的标签——不要随意添加那些看起来相似的标签。在这种情况下,这些似乎只是pascal和freepascal或pascal和turbo pascal,但不是全部。你能编辑我的代码吗?我编辑了但不工作等等,你想让我为你写程序吗?你确定这不是家庭作业吗?@Harea:不,这里没有人会帮你编辑程序。您已获得解决问题所需的信息。现在由你来使用它。你能编辑我的代码吗?我编辑了但不工作等等,你想让我为你写程序吗?你确定这不是家庭作业吗?@Harea:不,这里没有人会帮你编辑程序。您已获得解决问题所需的信息。现在由你来使用它。