Найти среднее арифметическое простых чисел в массиве - 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;
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д