Найти все числа Армстронга в диапазоне от а до b (процедура) - Pascal
Формулировка задачи:
найти все числа Армстронга в диапазоне от а до b, где а и b целые натуральные числа. Вот функциия, помогите переделать в процедуру
function PP1(n: integer):integer; //находит сумму цифр входящего числа,возведенных в степень,равную 3
var k,l,sum,nn: integer;
begin
sum:=0;
while n>0 do //вытаскиваем в цикле цифры и считаем сумму....
begin
l:=n mod 10;
sum:=sum+round(power(l,3));
n:=n div 10;
end;
PP1:=sum;
end;
function PP(n: integer):integer; //находит сумму цифр входящего числа,возведенных в степень,равную количеству цифр в числе
var k,l,sum,nn: integer;
begin
k:=0; nn:=n;
while nn>0 do //ищем количество цифр в числе
begin l:=nn mod 10;k:=k+1;nn:=nn div 10;end;
sum:=0;
while n>0 do //вытаскиваем в цикле цифры и считаем сумму....
begin
l:=n mod 10;
sum:=sum+round(power(l,k));
n:=n div 10;
end;
PP:=sum;
end;
var i,a,b: integer;
begin
writeln('Введите a,b');
readln(a,b);
for i:=a to b do
if (i=PP(i))then
begin
writeln(i, '; сумма кубов цифр числа ',pp1(i));
end;
writeln;
end.Решение задачи: «Найти все числа Армстронга в диапазоне от а до b (процедура)»
textual
Листинг программы
procedure PP(n: integer; var sum:integer); //находит сумму цифр входящего числа,
//возведенных в степень,равную количеству цифр в числе
var k,l,nn: integer;
begin
k:=0;
nn:=n;
while nn>0 do //ищем количество цифр в числе
begin
l:=nn mod 10;
k:=k+1;
nn:=nn div 10;
end;
sum:=0;
while n>0 do //вытаскиваем в цикле цифры и считаем сумму....
begin
l:=n mod 10;
sum:=sum+round(power(l,k));
n:=n div 10;
end;
end;
var i,a,b,sum: integer;
begin
writeln('Введите a,b');
readln(a,b);
for i:=a to b do
begin
PP(i,sum);
if (i=sum)then writeln(i);//почему кубы? а не 3х значные, например 5,1634,54748?
end;
end.
Объяснение кода листинга программы
procedure PP(n: integer; var sum: integer);- объявляется процедура PP с двумя параметрами: n (целое число на вход) и sum (целое число по ссылке).var k, l, nn: integer;- объявляются целочисленные переменные k, l и nn.while nn>0 do- начинается цикл, который находит количество цифр в числе n.l := nn mod 10;- получается последняя цифра числа nn.k := k + 1;- увеличивается счётчик цифр.nn := nn div 10;- удаляется последняя цифра числа.
sum := 0;- инициализация переменной sum.while n>0 do- начинается цикл, который вычисляет сумму цифр, возведенных в степень k.l := n mod 10;- получается последняя цифра числа n.sum := sum + round(power(l, k));- к сумме прибавляется значение, полученное возведением цифры в степень k.n := n div 10;- удаляется последняя цифра числа.
var i, a, b, sum: integer;- объявляются целочисленные переменные i, a, b и sum.readln(a, b);- вводятся значения для переменных a и b.for i := a to b do- начинается цикл, в котором вызывается процедура PP для каждого числа i в диапазоне от a до b.PP(i, sum);- процедура PP вызывается для числа i.if (i = sum) then writeln(i);- если i равно sum, то выводится значение i.
end;- окончание цикла.end.- конец программы.