Вывести первые N (N<5) совершенных чисел на экран - Pascal ABC
Формулировка задачи:
Натуральное число называется совершенным, если оно равно сумме всех своих делителей, включая единицу и исключая себя. Например, 6=1+2+3 – число совершенное. Вывести первые N (N<5) совершенных чисел на экран
Можете просто написать решение
Решение задачи: «Вывести первые N (N<5) совершенных чисел на экран»
textual
Листинг программы
var s:string; st,sover,i:longint; k,n:byte; function sov(x:longint):boolean; var f:boolean; i,d:longint; begin f:=false;d:=0; for i:=1 to x-1 do if x mod i = 0 then inc(d,i); if x=d then f:=true; sov:=f end; begin repeat writeln('n=?,0<n<5: ');readln(n); until (n>0)and(n<5); s:='110';k:=0; repeat st:=1;sover:=0; for i:= length(s) downto 1 do begin sover:=sover+(ord(s[i])-48)*st; st:=st*2 end; if sov(sover) then begin write(sover,' ');inc(k) end; s:='1'+s+'0'; until k=n; end.
Объяснение кода листинга программы
В данном коде используется язык программирования Pascal ABC. Переменные:
- s: строка, в которой хранится число для проверки на совершенное число.
- st, sover, i: длины строки, переменная для хранения наибольшего общего делителя.
- k, n: байты, счетчики для цикла.
- f: логическое значение, флаг, указывающий на то, является ли число совершенным.
- d: целое число, переменная для хранения суммы делителей числа.
Функция sov(x: longint): boolean - проверяет, является ли число x совершенным. Алгоритм проверки основан на поиске наибольшего общего делителя (НОД) числа x и его разности с 48 (так как все числа вводятся в виде строки, а 48 - это код цифры
1
в ASCII таблице). Если НОД не равен нулю, то число x не является совершенным, и функция возвращает false. Если НОД равен нулю, то число x является совершенным, и функция возвращает true. Цикл repeat-until используется для ввода числа n от пользователя. Цикл продолжается до тех пор, пока n больше 0 и меньше 5. Внутри цикла repeat-until переменная s инициализируется значением110
. Переменная k инициализируется значением 0. Затем следует цикл for, который начинается с длины строки s и продолжается до 1. Внутри цикла переменная sover инициализируется значением 0, а переменная st инициализируется значением 1. Затем следует цикл for, который начинается с длины строки s и продолжается до 1. Внутри цикла переменная sover и переменная st обновляются согласно алгоритму поиска НОД. Если НОД не равен нулю, то значение переменной sover увеличивается на (ord(s[i])-48)*st, а переменная st умножается на 2. Если после завершения внутреннего цикла значение переменной sover равно значению переменной s, то значение переменной sover выводится на экран, и счетчик k увеличивается на 1. Затем значение переменной s обновляется путем добавления символа1
в начало и символа0
в конец. Цикл repeat-until продолжается до тех пор, пока значение переменной k не станет равным значению переменной n.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д