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