Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
ВнизАлгоритм перевода десятиричного числа в двоичный в HEX OCT и т.д. Найти похожие ветки
← →
TJ (2003-12-24 23:09) [0]Алгоритм перевода десятиричного числа в двоичный в HEX OCT и т.д. Звучит как в 1-ом классе, но помогите посмотрите в загажниках
← →
Всеволод Соловьёв (2003-12-24 23:20) [1]это было написано в ТР 7.0
на быстрость итд итп не претендует, но работает
var n:longint;
s:string;
function int2hex(n: longint): char;
var c: string;
begin
if n = 15 then c := "F" else
if n = 14 then c := "E" else
if n = 13 then c := "D" else
if n = 12 then c := "C" else
if n = 11 then c := "B" else
if n = 10 then c := "A" else
str(n, c);
int2hex := c[1];
end;
function int2oct(n: longint): char;
var c: string;
begin
str(n, c);
int2oct := c[1];
end;
begin
write("Vvedite chislo: ");
readln(n);
s:="";
while n>0 do
begin
s := s + int2oct(n mod 8);
n := n div 8;
end;
for n := length(S) downto 1 do
begin
s := s + s[n];
delete(s, n, 1);
end;
writeln(s);
readln;
end.
← →
Talla2k (2003-12-25 01:29) [2]inttohex(12,2)
memo1.lines.add(inttohex(12,2)); увидишь 0с
А для остальных надо самому писать процедуры
← →
Talla2k (2003-12-25 01:38) [3]Ну вот еще откопал(писал очень давно,так что проверь)
function MakeStr(C: Char; N: Integer): string;
begin
if N < 1 then Result := ""
else begin
{$IFNDEF WIN32}
if N > 255 then N := 255;
{$ENDIF WIN32}
SetLength(Result, N);
FillChar(Result[1], Length(Result), C);
end;
end;
function AddChar(C: Char; const S: string; N: Int64): string;
begin
if Length(S) < N then
Result := MakeStr(C, N - Length(S)) + S
else Result := S;
end;
function Dec2Numb(N:int64; A, B: Byte): string;
var
C: int64;
Number: int64;
begin
if N = 0 then Result := "0"
else begin
Number := int64(N);
Result := "";
while Number > 0 do begin
C := Number mod B;
if C > 9 then C := C + 55
else C := C + 48;
Result := Chr(C) + Result;
Number := Number div B;
end;
end;
if Result <> "" then Result := AddChar("0", Result, A);
end;
function Hex2Dec(const S: string): int64;
var
HexStr: string;
begin
if Pos("$", S) = 0 then HexStr := "$" + S
else HexStr := S;
Result := StrToInt64Def(HexStr, 0);
end;
function Dec2Hex(N: LongInt; A: Byte): string;
begin
Result := IntToHex(N, A);
end;
function bytetoint(data:string):int64;
var s:string;
i,ii,z:integer;ch:char;
begin
s:="";
for i:=length(data)downto 1 do begin
ch:=data[i];
z:=0;
for ii:=1 to 255 do if ch=chr(ii) then z:=ii;
s:=s+dec2hex(z,2);
end;
result:=hex2dec(s);
end;
← →
Babay (2003-12-25 05:02) [4]Когдато очень давно попалась мне курсовая работа по алгоритмам перевода чисел из одной системы в другую. И конечно тама была прога это делающая. Написано все было на ТР. Я перестроил это дело в функцию и теперь перевожу свободно из системы в систему.
Так что на авторство не претендую, но даю функцию. Жаль немогу указать автора. (по молодости лет не предавал значения таким вещам а теперь вот жалею)
Function TranslationNumber(a,isxS,konS:String):String;
{переводит число a из isxS системы счисления в konS систему счисления}
Var Znach,i,j:integer;
Chast:Longint;
Promeg:Real;
Help:byte;
Pom:string;
isx,kon:integer;
begin
promeg:=0;Znach:=0;Help:=0;
pom:="";
isx:=StrToInt(isxS);
kon:=StrToInt(konS);
a:=AnsiUpperCase(a);
Result:="";
for i:=1 to Length(a) do begin { перевод введенного числа в десятичную}
if a[i]<"A" then Znach:=Ord(a[i])-48
else Znach:=Ord(a[i])-55;
promeg:=promeg+Znach*IntPower(isx,Length(a)-i);
end;
i:=0;
Repeat { определение максимального порядка результата }
inc(i);
Chast:=Trunc(Promeg/IntPower(Kon,i));
Until Chast<Kon;
For j:=i downto 0 do begin { перевод в нужную систему}
Help:=Trunc(Promeg/IntPower(Kon,j));
If Help>9 Then Pom:=Chr(55+Help)
Else Pom:=IntToStr(Help);
Result:=Result+Pom;
Promeg:=Promeg-Help*Power(Kon,j);
end;
end;
Пример использования
s:=TranslationNumber("16","10","16");// перевод числа 16 из 10-ной в 16-ю
s:=TranslationNumber("01010","2","10");// перевод числа 01010 из 2-ной в 10-ю
s:=TranslationNumber("11А","12","10");//перевод числа 11А bp 12-ной в 10-ю
ну естественно работает тока для целых чисел.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.017 c