У меня проблема в PAscal. Я хочу, чтобы сосчитать простые числа, но нет результата: Мой код:Количество простых чисел из массива в 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. Добавьте 'sum: = 0;' after 'if (sum = 0), тогда count: = count + 1; '. Но есть и некоторые ошибки в коде. Например, индекс вашего массива начинается с 1, но цикл 'for i: = 0 до size do' начинается с 0, поэтому на первой итерации вы будете иметь ошибку в' arr [i] '. – Abelisto
Прошло некоторое время с тех пор, как я сделал какой-либо паскаль (34 года), но либо индекс начинается с нуля, либо один. И вы используете оба. Поэтому я бы догадался, что проблема в том, что проблема – Vorsprung
Это было бы замечательное время, чтобы научиться использовать отладчик. Очень маловероятно, BTW, что вы используете Free Pascal, Pascal Script и Turbo Pascal в одно и то же время, так как они нигде не совместимы с кодом, который вы написали. Добавляйте только теги, которые * на самом деле применяют * к вашему вопросу, - не просто произвольно добавляйте те, которые кажутся похожими. В этом случае они выглядят как «pascal» и «freepascal» или «pascal» и «turbo-pascal» (но не все). –