Ich hab es jetzt mal Versucht, aber ich habe vorher noch nie mit 'procedure' gearbeitet, deswegen klappt es auch wahrscheinlich nicht. Hier mein Code:
Code:
program HexToDez;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
procedure EingabeEinlesenUndPruefen(Sender: HexToDez)
procedure WandleHexInDez(Sender: HexToDez);
var
y: string;
begin
repeat
EingabeEinlesenUndPruefen;
writeln('Beenden? [y]');
readln(y);
until y='y';
end;
procedure EingabeEinlesenUndPruefen;
var
erfolgreich: Boolean;
eingabe: string;
i: Integer;
begin
erfolgreich := True;
repeat
writeln('Bitte Hexadezimalzahl eingeben:');
readln(eingabe);
for i := 1 to Length(eingabe) do
begin
if not (AnsiChar(eingabe[i]) in ['0'..'9','A'..'F','a'..'f']) then
begin
Writeln('Fehlerhafte Eingabe!');
erfolgreich := False;
Break;
end;
end;
until erfolgreich;
WandleHexInDez(eingabe);
end;
procedure WandleHexInDez;
var
a,b,d: integer;
h,c,y: string;
begin
writeln('Bitte Hexadezimalzahl eingeben:');
readln(h);
a:= 1;
c:= Upcase(h[a]);
if c='A' then
begin
d:=10;
c:=IntToStr(d);
end;
if c='B' then
begin
d:=11;
c:=IntToStr(d);
end;
if c='C' then
begin
d:=12;
c:=IntToStr(d);
end;
if c='D' then
begin
d:=13;
c:=IntToStr(d);
end;
if c='E' then
begin
d:=14;
c:=IntToStr(d);
end;
if c='F' then
begin
d:=15;
c:=IntToStr(d);
end;
d:=StrToInt(c);
b:=d;
while a < length(h) do
begin
a:=a+1;
c:=upcase(h[a]);
if c='A' then
begin
d:=10;
c:=IntToStr(d);
end;
if c='B' then
begin
d:=11;
c:=IntToStr(d);
end;
if c='C' then
begin
d:=12;
c:=IntToStr(d);
end;
if c='D' then
begin
d:=13;
c:=IntToStr(d);
end;
if c='E' then
begin
d:=14;
c:=IntToStr(d);
end;
if c='F' then
begin
d:=15;
c:=IntToStr(d);
end;
d:=StrToInt(c);
b:=b*16+d;
end;
writeln('');
writeln('Zahl im Dezimalsystem:');
writeln(b);
writeln('');
end;
end.