program ArmstrongZahlen(input,Output);
type
tNatZahl = 0..maxint;
var
ArmstrongZahl:boolean;
x,
y:tNatZahl;
function countziff(inZahl:tNatZahl):tNatZahl;
{gibt Stellenanzahl der inZahl an}
var
Stellenanzahl:tNatzahl;
begin
Stellenanzahl := 1;
while inZahl > 9 do
begin
inZahl := inZahl div 10;
Stellenanzahl := Stellenanzahl + 1;
end;
countziff := Stellenanzahl;
end;{countziff}
function potenziere (inZiffer,
inHoch:tNatZahl):tNatZahl;
{berechnet n-te Potenz einer Zahl}
Var
l,
Potenz:tNatzahl;
begin
Potenz := inZiffer;
for l := 1 to inHoch-1 do
Potenz := Potenz * inZiffer;
potenziere := Potenz;
end;{potenziere}
function isArmstrong(inZahl:tNatZahl):boolean;
{prft ob inZahl eine ArmstrongZahl ist}
var
i,
j,
ggfArmstrong,
AnzDerStellen,
ZwischErg,
EndErg,
Letzteziffer:tNatZahl;
begin
ggfArmstrong := inZahl;
AnzDerStellen := countZiff(inZahl);
endErg:=0;
for i:=1 to AnzDerStellen do
begin
Letzteziffer := ggfArmstrong mod 10;
ZwischErg := Potenziere(LetzteZiffer,AnzDerStellen);
ggfArmstrong := ggfArmstrong div 10;
EndErg := EndErg + ZwischErg;
end;
if EndErg = inZahl then
isArmstrong := true
else
isArmstrong := false;
end;{isArmstrong}
begin
writeln;
writeln('Dieses Programm ermittelt sogenannte Armstrongzahlen im');
writeln('Zahlenbereich. Die Armstrongzahl ist eine Zahl bei der die Summe');
writeln('der einzelnen Ziffern, jeweils mit der Anzahl der Ziffern');
writeln('potenziert, gleich der Zahl selbst ist!');
writeln;
repeat
writeln('Bitte geben Sie zwei ganze Zahlen zwischen 0 und Maxinteger ein!');
writeln('Maxinteger ist 8^5 oder 32767.');
writeln('Zwischen denen alle Armstrong zahlen ermittelt werden sollen.');
writeln;
readln(x);
readln(y);
if (x>0) and (y<maxint) and (x<y) then
begin
while x <= y do
begin
if isArmstrong(x) = true then
writeln(x ,' ist Armstrongzahl');
x := x+1;
end;
end
else
writeln('Eingabefehler');
until eof;
end.{Armstrongzahlen}
Anfang
zurück