перевод в любую систему счисления исходник Pascal/Delphi простой пример
Inttostr(x); // перевод из Integer в String FloatTostr(3.14); // перевод из Real (вещественного числа) в строку FormatFloat('0.0',3.14); // перевод из Real (вещественного числа) в строку с форматом например два числа после запятой inttohex(5,2); // перевод в 16-ричную
пример для перевода в другие системы счисления
const stroka:string='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // список символов используемых в качестве чисел; максимальная строка 37 знаков
Function GetSistema(Value:string;DDefault:integer):integer; { получаем систему счисления Value система счисления поумолчанию DDefault=10} var m,x,l:integer; s:string; { временная строка для процедуры} begin s:=Value; l:=length(s); { длна строки} m:=DDefault;{} for x:=1 to l do begin if (s[x]<>'.') and (s[x]<>',') then if pos(s[x],stroka)>m then m:=pos(s[x],stroka); end; result:=m; end;
// проверка числа на корректность Function CheckCorrect(s:string;o:integer):boolean; var n:integer; i:integer; begin result:=true; n:=0; for i:=1 to length(s) do if ((pos(s[i],stroka)>o) or (pos(s[i],stroka)=0)) then begin result:=false; end; end;
function FromDec(Value:integer;rdec:integer):string; // функция переводит Value:real в rdec - систему счисления var s:String; { временная переменная} m:longint; { временная переменная для целой части} n,l:real; { временная переменная} r,i:integer; begin n:=Value; r:=rdec; s:=''; { временная переменная для вывода в строковом типе} m:=trunc(n); { целая часть числа} repeat s:=stroka[(m mod r)+1]+s; { остаток от деления на rdec записываем при 8 mod 3 = 8-(3*2)= 8-6=2} m:=m div r; { целочисленной деление 8 div 3 = trunc(8/3)=trunc(2.666666)=2} until m=0; { продолжаем пока не 0} l:=frac(n); { получаем часть числа полсле запятой} result:=s; end; { перевод из любого числа в десятичные } function ToDec(Value:string;Rdec:integer):integer; { ToDec перевод из StrtoReal из Rdec системы (10,8,2) } {пример ToDec('ABC',16)} var i,p:longint; {} m:integer; { временная переменная } n:string; R:integer; begin n:=value; r:=rdec; m:=0; p:=length(n)+1; { p=длине тектса } for i:=1 to length(n) do if i<>p then if i<p then m:=m+round((pos(n[i],stroka)-1)*power(r,p-i-1)); // ABC (11*16^3)+(12*16^2)+(13*16^3) result:=m; end;
http://netsoftware.ucoz.ru/sistemy_schislenija.zip
немного доработаем пример для применения в боевых условиях
функция перевода в двоичную систему счисления с поддержкой формата числа function IntToBin(Value:integer;FormatStr:string='0'):string; двоичную систему const stroka:string='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // список символов используемых в качестве чисел; максимальная строка 37 знаков var s:String; { временная переменная} m:longint; { временная переменная для целой части} n,l:real; { временная переменная} r,i:integer; rdec:integer; begin rdec:=2; n:=Value; r:=rdec; s:=''; { временная переменная для вывода в строковом типе} m:=trunc(n); { целая часть числа} repeat s:=stroka[(m mod r)+1]+s; { остаток от деления на rdec записываем при 8 mod 3 = 8-(3*2)= 8-6=2} m:=m div r; { целочисленной деление 8 div 3 = trunc(8/3)=trunc(2.666666)=2} until m=0; { продолжаем пока не 0} s:=formatfloat(FormatStr,strtoint(s)); result:=s; end;
// замена 0 и 1 на произвольные знаки (на пример точка и тире )
Function GetTochkaToZ(s:string):string; var x:integer; l:integer; s2:string; begin l:=length(s); for X:=1 to l do begin if s[x]='0' then s2:=s2+'.' else s2:=s2+'-'; end; result:=s2; end;
перевод из арабские в римские
"Программа для перевода числа в строку (сумма прописью)"
function IntToHex(Value:integer;FormatStr:string='0'):string; двоичную систему const
stroka:string='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // список
символов используемых в качестве чисел; максимальная строка 37 знаков var s:String; { временная переменная} m:longint; { временная переменная для целой части} n,l:real; { временная переменная} r,i:integer; rdec:integer; begin rdec:=16; n:=Value; r:=rdec; s:=''; { временная переменная для вывода в строковом типе} m:=trunc(n); { целая часть числа} repeat s:=stroka[(m mod r)+1]+s; { остаток от деления на rdec записываем при 8 mod 3 = 8-(3*2)= 8-6=2} m:=m div r; { целочисленной деление 8 div 3 = trunc(8/3)=trunc(2.666666)=2} until m=0; { продолжаем пока не 0} s:=formatfloat(FormatStr,strtoint(s)); result:=s; end;
|