Найти среднее арифметическое простых чисел в массиве - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. const n=3;
  2. Type TInd=1..n;
  3. Tar=array[TInd]of integer;
  4. var a:Tar;i,s,k,kol,l:integer;
  5. begin
  6. writeln('Введите массив');
  7. for i:=1 to n do read(a[i]);
  8. readln;
  9. k:=0;
  10. s:=0;
  11. kol:=0;
  12. for i:=1 to n do begin
  13. for l:=2 to a[i]-1 do
  14. if a[i] mod 2<>0 then k:=0 else begin k:=1;
  15. break;
  16. end;
  17. if k=0 then begin
  18. kol:=0;
  19. s:=0;
  20. end;
  21. end;
  22. if kol=0 then writeln('Нет простых чисел') else
  23. writeln('sr=',s/kol:3:2);
  24. readln;
  25. end.
Объясните пожалуйста значение каждого составного(begin..end оператора.И можно ли как-то упростить эту программу.
И ещё вопрос , что конкретно прерывает break.Программа не моя нашел на этом сайте.В целом все понятно но с синтаксисом все плохо.Искал информацию про операторные скобки в интернете.Максимум что нашел так это Составной оператор предназначен для объединения нескольких операторов в один.Но на практики непонятно.Если кто может скиньте пожалуйста ссылку на какую-нибудь книгу или сайт где понятно все расписано.

Решение задачи: «Найти среднее арифметическое простых чисел в массиве»

textual
Листинг программы
  1. const n=3;
  2. type
  3.   TInd=1..n;
  4.   Tar=array[TInd]of integer;
  5.  
  6. var
  7.   a:Tar;
  8.   i,s,k,kol,l:integer;
  9. begin
  10.   writeln('Введите массив');
  11.   for i:=1 to n do read(a[i]);
  12.   readln;
  13.  
  14.   s:=0; kol:=0;
  15.   for i:=1 to n do
  16.   begin // обрабатываем каждое число массива
  17.     k := 1; // флажок: при k = 1 считаем, что число - простое
  18.     for l:=2 to trunc(sqrt(a[i])) do // проверяем, делится ли a[i] без остатка на любое из чисел в диапазоне 2 .. корень из a[i]
  19.     if a[i] mod l = 0 then
  20.     begin
  21.       k:=0; // если делится - сбрасываем флаг (число уже нельзя назвать простым), и уходим из внутреннего цикла
  22.       break;
  23.     end;
  24.  
  25.     if k=1 then // если число все-таки осталось простым - то увеличиваем сумму и количество
  26.     begin
  27.       kol := kol+1;
  28.       s:=s+a[i];
  29.     end;
  30.   end;
  31.  
  32.   // проверяем количество найденных простых чисел, и считаем среднее, если это возможно...
  33.   if kol=0 then writeln('Нет простых чисел')
  34.   else writeln('sr=',s/kol:3:2);
  35.   readln;
  36. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы