Program Umrechne(input,output);

Type TBasis=2..36;

VAR Zahl     :LongInt;
    ABas,NBas:TBasis;

Procedure Einlesen(var Zahl:Longint;Basis:TBasis);
{Liest eine Zahl der Basis ein}
var Taste:char;  {Eingegebene Taste}
BEGIN
    Zahl :=0; {Wert initialisieren}
    while TRUE do begin
          read(taste);
          case taste of {Ziffer Auswerten}
               '0'..'9'       : Zahl:=Zahl*Basis+ord(Taste)-ord('0');
               'a'..'z'       : Zahl:=Zahl*Basis+ord(Taste)-ord('a')+10;
               'A'..'A'       : Zahl:=Zahl*Basis+ord(Taste)-ord('0')+10;
               chr(10),chr(13): exit; {irgendwann hat alles ein Ende}
          END
    END
END;

function Ziffer(Stelle:Integer):char;
{"berechnet" das Zeichen fr die darzustellende Ziffer aus dem Wert
 der entsprechenden Stelle}
BEGIN
   if stelle<10 then {"normale" Ziffer}
      Ziffer:=chr(stelle+ord('0')   )

   else              {"Buchstabenziffer"}
      Ziffer:=chr(stelle+ord('A')-10)
END;

Procedure Ausgeben(Zahl:LongInt;Basis:TBasis);
{Gibt eine Zahl rekursiv aus (siehe frheres bungsblatt)}
var stelle:char;
Begin
     IF Zahl>0 THEN BEGIN {ist berhaupt noch was zu tun?}
        stelle:=Ziffer(Zahl MOD Basis); {Wert der jetztigen Stelle}
        Zahl:=zahl DIV Basis;           {Rest der Zahl}
        Ausgeben(Zahl,Basis);           {rekursiver Aufruf}
        write(stelle);                  {Ausgabe}
     END
END;

begin
     WriteLn('Geben sie die alte Basis ein:');{Eingeben der Werte}
     ReadLn(ABas);
     WriteLn('Geben sie die neue Basis ein:');
     ReadLn(NBas);
     WriteLn('Geben sie die Zahl ein:');
     Einlesen(Zahl,ABas);

     WriteLn('Die Zahl ist:'); {Ausgeben im "normalen" Zehnersystem}
     WriteLn(Zahl);

     WriteLn('Und in der Basis ',NBas,':'); {und in der neuen Basis}
     Ausgeben(Zahl,NBas);
end
.

