Заполнить одномерный массив простыми числами - Turbo Pascal (29055)
Формулировка задачи:
Выручайте. На этом форуме неправильное решение
Решение задачи: «Заполнить одномерный массив простыми числами»
textual
Листинг программы
uses crt;
const nmax=100;
var a:array[1..nmax] of integer;
n,m,i,k,lm:integer;
f:boolean;
begin
clrscr;
repeat
write('Размер массива от 1 до ',nmax,' n=');
readln(n);
until n in [1..nmax];
a[1]:=2; {записываем в массив простых чисел одно известное}
k:=1; {число найденных простых чисел}
m:=3; {первый "кандидат" в простые числа}
while k<n do
begin
lm:=trunc(sqrt(m));
f:=true;
i:=1;
while (i<=k) and f and (a[i]<=lm)do
{условие проверки делимости числа n}
if m mod a[i]=0 then f:=false else i:=i+1;
if f then
begin
k:=k+1; {добавляем найденное n}
a[k]:=m {в массив простых чисел}
end;
m:=m+2 {следующий кандидат в простые числа}
end;
for k:=1 to n do
write(a[k]:4);
readln
end.
Объяснение кода листинга программы
- Создается подключение к библиотеке crt.
- Объявляются константы и переменные: nmax, n, m, i, k, lm, f.
- Очищается экран с помощью функции clrscr.
- Пользователю предлагается ввести размер массива от 1 до nmax.
- Записывается в массив a первое простое число, равное 2.
- Инициализируются переменные k и m: k=1, m=3.
- Запускается цикл while, который будет выполняться до тех пор, пока k меньше n и все числа в массиве a меньше или равны lm.
- В цикле выполняется проверка делимости числа n на каждое число в массиве a. Если число m делится на a[i] без остатка, то переменная f устанавливается в false, иначе i увеличивается на 1.
- Если значение переменной f равно true, то увеличивается значение переменной k на 1 и в массив a записывается число m.
- После завершения внутреннего цикла while, если значение переменной f равно true, то выполняется шаг 9.
- Для каждого числа k от 1 до n выполняется операция записи в массив a значения a[k].
- Выполняется операция чтения из массива a значений, которые соответствуют найденным простым числам.
- Программа завершается.