1

我在 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;
   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……我不明白我的问题出在哪里。请帮帮我

4

1 回答 1

5

你有type a = array [1..size] of integer;,但是你使用 . 遍历数组for i := 0 to size。下标需要与声明的范围相匹配。

sum := 0;在进入该循环之前进行了设置,但永远不会再次将其设置回零。一旦你找到一个非素数,你就会设置sum := 1;,它会一直留在那里。一旦检测到非素数,就永远不会检测到素数。

你找到的两个素数是垃圾在 处arr[0],而 1 在 处arr[1]。请注意,1不是质数,但您的代码会得出结论。7是质数,但您的代码会认为它不是质数,因为它最终会注意到它可以被自己整除。

于 2014-12-10T20:31:20.973 回答