Найти среднее арифметическое простых чисел в массиве - Free Pascal
Формулировка задачи:
const n=3;
Type TInd=1..n;
Tar=array[TInd]of integer;
var a:Tar;i,s,k,kol,l:integer;
begin
writeln('Введите массив');
for i:=1 to n do read(a[i]);
readln;
k:=0;
s:=0;
kol:=0;
for i:=1 to n do begin
for l:=2 to a[i]-1 do
if a[i] mod 2<>0 then k:=0 else begin k:=1;
break;
end;
if k=0 then begin
kol:=0;
s:=0;
end;
end;
if kol=0 then writeln('Нет простых чисел') else
writeln('sr=',s/kol:3:2);
readln;
end.
И ещё вопрос , что конкретно прерывает break.Программа не моя нашел на этом сайте.В целом все понятно но с синтаксисом все плохо.Искал информацию про операторные скобки в интернете.Максимум что нашел так это Составной оператор предназначен для объединения нескольких операторов в один.Но на практики непонятно.Если кто может скиньте пожалуйста ссылку на какую-нибудь книгу или сайт где понятно все расписано.
Решение задачи: «Найти среднее арифметическое простых чисел в массиве»
textual
Листинг программы
const n=3;
type
TInd=1..n;
Tar=array[TInd]of integer;
var
a:Tar;
i,s,k,kol,l:integer;
begin
writeln('Введите массив');
for i:=1 to n do read(a[i]);
readln;
s:=0; kol:=0;
for i:=1 to n do
begin // обрабатываем каждое число массива
k := 1; // флажок: при k = 1 считаем, что число - простое
for l:=2 to trunc(sqrt(a[i])) do // проверяем, делится ли a[i] без остатка на любое из чисел в диапазоне 2 .. корень из a[i]
if a[i] mod l = 0 then
begin
k:=0; // если делится - сбрасываем флаг (число уже нельзя назвать простым), и уходим из внутреннего цикла
break;
end;
if k=1 then // если число все-таки осталось простым - то увеличиваем сумму и количество
begin
kol := kol+1;
s:=s+a[i];
end;
end;
// проверяем количество найденных простых чисел, и считаем среднее, если это возможно...
if kol=0 then writeln('Нет простых чисел')
else writeln('sr=',s/kol:3:2);
readln;
end.
Объяснение кода листинга программы
- Объявлены константа
n=3, типTInd=1..nи массивTar=array[TInd]of integer. - Создана переменная
a:Tarдля хранения массива. - Введен цикл
for i:=1 to n do read(a[i]);, который считывает значения массиваa. - Выполняется команда
readln;для считывания символа новой строки. - Инициализируются переменные
s:=0;(сумма),kol:=0;(количество) иk:=0;(флаг простоты числа). - Выполняется вложенный цикл
for i:=1 to n do begin, который обрабатывает каждое число массива. - Устанавливается флаг
k := 1;для первого числа в массиве, которое считается простым. - Выполняется проверка делимости числа
a[i]на числа от 2 до корня изa[i]. - Если число делится без остатка на какое-либо число в диапазоне, то флаг
kсбрасывается и внутренний цикл прерывается. - Если число не делится ни на одно число в диапазоне, то оно считается простым и увеличивается счетчик
kolи суммаs. - После обработки всех чисел в массиве выполняется проверка
if kol=0 then writeln('Нет простых чисел')и выводится сообщение, если простых чисел нет. - В противном случае выводится сообщение
writeln('sr=',s/kol:3:2);с вычисленным средним арифметическим простых чисел. - Завершает работу программа с помощью
readln;.