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;
  {prft 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