дня 4 морально разлагался)решил написать небольшой юнит для работы с СС,думаю студентам\школьникам пригодится.Переводит из 10 в другие(двоичную,3,4,5,6,7,8,9,16) и назад.
unit Notation;
interface
uses sysutils;
function DECtoX(x:longint;z:word):string;
function XtoDEC(s:string;x:word):extended;
implementation
function DECtoX(x:longint;z:word):string;
var q,i:integer;
s,t,num:string;
begin
repeat
q:=x mod z;
x:=x div z;
if q>9 then t:=chr(ord('A')-10+q)
else str(q,t);
s:=s+t;
until x=0;
for i:=1 to length(s) do
num:=num+s[length(s)-i+1];
result:=num;
end;
function in_extent(a,b:extended):extended;
begin
result:=exp(b*ln(a));
end;
function XtoDEC(s:string;x:word):extended;
var q:extended;
i,n,e:integer;
begin
q:=0;
for i:=1 to length(s) do
begin
val(s[i],n,e);
if e<>0 then n:=10+ord(UpCase(s[i]))-ord('A');
q:=q+in_extent(x,length(s)-i)*n;
end;
result:=q;
end;
end.
Пример использования:
a:=xtodec('A',16);
f:=dectox(round(a),2);
ну и т.д.
unit Notation;
interface
uses sysutils;
function DECtoX(x:longint;z:word):string;
function XtoDEC(s:string;x:word):extended;
implementation
function DECtoX(x:longint;z:word):string;
var q,i:integer;
s,t,num:string;
begin
repeat
q:=x mod z;
x:=x div z;
if q>9 then t:=chr(ord('A')-10+q)
else str(q,t);
s:=s+t;
until x=0;
for i:=1 to length(s) do
num:=num+s[length(s)-i+1];
result:=num;
end;
function in_extent(a,b:extended):extended;
begin
result:=exp(b*ln(a));
end;
function XtoDEC(s:string;x:word):extended;
var q:extended;
i,n,e:integer;
begin
q:=0;
for i:=1 to length(s) do
begin
val(s[i],n,e);
if e<>0 then n:=10+ord(UpCase(s[i]))-ord('A');
q:=q+in_extent(x,length(s)-i)*n;
end;
result:=q;
end;
end.
Пример использования:
a:=xtodec('A',16);
f:=dectox(round(a),2);
ну и т.д.
Комментариев нет:
Отправить комментарий