unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Edit2: TEdit;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Edit2Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure eingabefehler;
begin
showmessage('Eingabefehler');
abort;
end;
procedure checkmulti(multi:integer);
begin
if multi > strtoint(form1.edit2.text)-1
then eingabefehler;
end;
function getmulti(input:string; i:integer):integer;
var tmp:integer;
begin
tmp:=length(input)-i;
if (ord(input[tmp]) >= 65) and (ord(input[tmp]) <= 90)
then result := ord(input[tmp]) - 55
else result := strtoint(input[tmp]);
end;
function getoutput(tmp:integer):string;
begin
if tmp > 9
then result := chr(tmp+55)
else result:= inttostr(tmp)[1];
end;
procedure TForm1.Button1Click(Sender: TObject);
var output:string;
input,numbersystem,tmp:integer;
begin
try
input:=strtoint(edit1.Text);
output:='';
numbersystem:=strtoint(edit2.text);
repeat
tmp:=input mod numbersystem;
input:=input div numbersystem;
output:=getoutput(tmp)+output;
until input=0;
label1.caption:=output;
except on EConvertError do eingabefehler;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var input:string;
i,multi,numbersystem:integer;
output:extended;
begin
try
input:=edit1.text;
output:=0;
numbersystem:=strtoint(edit2.text);
for i := 0 to length(input)-1 do begin
multi:=getmulti(input,i);
checkmulti(multi);
output := output + (multi * power(numbersystem,i));
end;
label1.caption:=floattostr(output);
except on EConvertError do eingabefehler;
end;
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
if strtoint(edit2.Text) > 32
then edit2.Text:='32';
end;
end.