Вывести все простые числа, оканчивающиеся на 1 - Pascal ABC
Формулировка задачи:
Решение задачи: «Вывести все простые числа, оканчивающиеся на 1»
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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д