Вывести первые 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.

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


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

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

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