【问题标题】:Count prime numbers from an array in Pascal从 Pascal 中的数组中计算素数
【发布时间】:2014-12-10 19:52:49
【问题描述】:

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

【问题讨论】:

  • 我看到的主要问题是您没有重新初始化sum 变量,所以在sum 值变为1 后,它始终为1。在if(sum=0) then count:=count+1; 之后添加sum := 0;。但是您的代码中也存在一些错误。例如,您的数组索引从 1 开始,但循环 for i := 0 to size do 从 0 开始,因此在第一次迭代时您将在 arr[i] 中出现错误。
  • 我已经有一段时间没有做任何帕斯卡(34 年)了,但索引要么从零开始,要么从一开始。你同时使用。所以我猜这就是问题所在
  • 这是学习使用调试器的好时机。顺便说一句,您不太可能同时使用 Free Pascal、Pascal Script 和 Turbo Pascal,因为它们与您编写的代码远不兼容。只添加实际应用到您的问题的标签 - 不要只是随机添加那些看起来相似的标签。在这种情况下,这些似乎只有 pascalfreepascalpascalturbo-pascal(但不是全部)。

标签: pascal freepascal pascalscript turbo-pascal


【解决方案1】:

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

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

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

【讨论】:

  • 你能编辑我的代码吗?我编辑了但不起作用
  • 等等,你想让我为你写你的程序吗?你确定这不是作业吗?
  • @Harea:不,这里没有人会为您编辑您的程序。您已获得解决问题所需的信息。现在由您来使用它。
猜你喜欢
  • 2022-01-15
  • 2022-11-23
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 2020-09-17
相关资源
最近更新 更多