Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-25498
w3ser
2003-12-18 22:25
2004.01.09
Очередные нападки Microsoft на пользователей Opera и Mozilla


14-25560
Kein
2003-12-19 20:45
2004.01.09
Access


1-25381
Den_PY
2003-12-25 07:24
2004.01.09
Socket


1-25308
lucky4me
2003-12-25 14:07
2004.01.09
как вставить кнопку/меню в OutlookExpress


14-25541
Makhanev A.S.
2003-12-17 21:33
2004.01.09
Пример поиска методом Фибоначи..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский