Вывести все простые числа, оканчивающиеся на 1 - Pascal ABC

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

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

Создать файл из 250 целых чисел, лежащих на отрезке [150,5000]U[6350,10000], используя генератор случайных чисел. -Вывести все данные на экран. -Вывести все простые числа, оканчивающиеся на 1. -Найти числа, отличающиеся от среднего арифметического более чем на 100. Помогите пожалуйста. Надо сдать что бы был допуск к экзамену.

Решение задачи: «Вывести все простые числа, оканчивающиеся на 1»

textual
Листинг программы
var i, k, n: integer;
    sr: real;
    f: file of integer;
    p, b: boolean;
begin
  randomize; {инициализация генератора псевдослучайных чисел}
  assign(f, 'test.dat'); {связывание файловой переменной с файлом}
  rewrite(f); {открыть (типизированный) файл для чтения-записи и стереть содержимое файла}
  {-- Генерируем файл, заодно вычисляем среднее арифметическое --}
  sr := 0;
  for i := 1 to 250 do
    begin
      repeat
        n := random(9851) + 150 {интервал чисел 150..10000}
      until (5000 >= n) or (n <= 6350); {если 5000 < n > 6350, генерируем заново}
      write(f, n); {пишем в файл}
      sr := sr + n {находим сумму чисел}
    end;
  sr := sr / 250; {находим среднее арифметическое чисел}
  {-- Вывести все данные на экран --}
  reset(f); {установить указатель в начало файла}
  writeln('Исходный файл:');
  for i := 1 to 250 do
    begin
      read(f, n); {читаем из файла}
      write(n:5) {выводим на экран}
    end;
  writeln;
  {-- Вывести все простые числа, оканчивающиеся на 1 --}
  reset(f); {установить указатель в начало файла}
  p := false; {простые числа пока не найдены}
  writeln('Простые числа, оканчивающиеся на 1:');
  for i := 1 to 250 do
    begin
      read(f, n); {читаем из файла}
      if n mod 10 = 1 {если число оканчивается на 1,}
        then begin {то проверяем, простое ли оно}
          for k := 3 to trunc(sqrt(n)) do {перебираем возможные делители}
            begin
              b := n mod k > 0; {если b = true, то не делится}
              if not b then break {если на что-то разделилось, значит, число составное}
            end;
          if b {если простое,}
            then begin {то}
              write(n:5); {выводим число на экран}
              p := true {помечаем, что простое число найдено}
            end
        end;
    end;
  if not p then write('Не найдены'); {если нужые числа не найдены, выводим сообщение}
  writeln;
  {-- Найти числа, отличающиеся от среднего арифметического более чем на 100 --}
  reset(f); {установить указатель в начало файла}
  p := false; {требуемые числа пока не найдены}
  writeln('Среднее арифметическое чисел = ', sr:0:3);
  writeln('Числа, отличающиеся от среднего арифметического более чем на 100:');
  for i := 1 to 250 do
    begin
      read(f, n); {читаем из файла}
      if abs(n - sr) > 100
        then begin
          write(n:5); {выводим число на экран}
          p := true {помечаем, что требуемое число найдено}
        end
    end;
  if not p then write('Не найдены'); {если нужые числа не найдены, выводим сообщение}
  writeln;
  close(f); {закрываем файл}
  readln
end.

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

var i, k, n: integer; sr: real; f: file of integer; p, b: boolean; begin randomize; assign(f, 'test.dat'); rewrite(f); // Генерируем файл и вычисляем среднее арифметическое sr := 0; for i := 1 to 250 do begin repeat n := random(9851) + 150; until (5000 >= n) or (n <= 6350); write(f, n); sr := sr + n; end; sr := sr / 250; // Выводим все данные на экран reset(f); writeln('Исходный файл:'); for i := 1 to 250 do begin read(f, n); write(n:5); end; writeln; // Выводим все простые числа, оканчивающиеся на 1 reset(f); p := false; writeln('Простые числа, оканчивающиеся на 1:'); for i := 1 to 250 do begin read(f, n); if n mod 10 = 1 then begin for k := 3 to trunc(sqrt(n)) do begin b := n mod k > 0; if not b then break; end; if b then begin write(n:5); p := true; end; end; end; if not p then write('Не найдены'); writeln; // Находим числа, отличающиеся от среднего арифметического более чем на 100 reset(f); p := false; writeln('Среднее арифметическое чисел = ', sr:0:3); writeln('Числа, отличающиеся от среднего арифметического более чем на 100:'); for i := 1 to 250 do begin read(f, n); if abs(n — sr) > 100 then begin write(n:5); p := true; end; end; if not p then write('Не найдены'); writeln; close(f); readln; end.

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


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

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

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