Подсчет простых чисел из массива в Паскале

У меня проблема в 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... Я не понимаю, где моя проблема. Помоги мне, пожалуйста

1 ответ

У тебя есть type a = array [1..size] of integer;, но затем вы перебираете массив, используя for i := 0 to size, Индекс должен соответствовать заявленному диапазону.

Ты устанавливаешь sum := 0; перед входом в этот цикл, но никогда не устанавливайте его снова на ноль. Как только вы найдете не простое число, вы установите sum := 1;и там оно и останется. Вы никогда не обнаружите простое число, если обнаружите не простое.

Два простых числа, которые вы нашли, были тем мусором на arr[0]и 1 в arr[1], Обратите внимание, что 1 не простое число, но ваш код сделает вывод, что это так. 7 простое число, но ваш код будет думать, что это не так, потому что он в конечном итоге заметит, что он делится сам по себе.

Другие вопросы по тегам