Найти среднее арифметическое простых чисел в массиве - 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.
Объясните пожалуйста значение каждого составного(begin..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.

Объяснение кода листинга программы

  1. Объявлены константа n=3, тип TInd=1..n и массив Tar=array[TInd]of integer.
  2. Создана переменная a:Tar для хранения массива.
  3. Введен цикл for i:=1 to n do read(a[i]);, который считывает значения массива a.
  4. Выполняется команда readln; для считывания символа новой строки.
  5. Инициализируются переменные s:=0; (сумма), kol:=0; (количество) и k:=0; (флаг простоты числа).
  6. Выполняется вложенный цикл for i:=1 to n do begin, который обрабатывает каждое число массива.
  7. Устанавливается флаг k := 1; для первого числа в массиве, которое считается простым.
  8. Выполняется проверка делимости числа a[i] на числа от 2 до корня из a[i].
  9. Если число делится без остатка на какое-либо число в диапазоне, то флаг k сбрасывается и внутренний цикл прерывается.
  10. Если число не делится ни на одно число в диапазоне, то оно считается простым и увеличивается счетчик kol и сумма s.
  11. После обработки всех чисел в массиве выполняется проверка if kol=0 then writeln('Нет простых чисел') и выводится сообщение, если простых чисел нет.
  12. В противном случае выводится сообщение writeln('sr=',s/kol:3:2); с вычисленным средним арифметическим простых чисел.
  13. Завершает работу программа с помощью readln;.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы