Приветствую Вас Гость | RSS

Delphi заготовки

Четверг, 28.03.2024, 12:45
Главная » 2012 » Март » 1 » Программа для перевода из 10-чной системы в другую
08:55
Программа для перевода из 10-чной системы в другую
перевод в любую систему счисления
исходник 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;

Просмотров: 4073 | Добавил: NetSoftWare | Рейтинг: 5.0/1
Всего комментариев: 0
Имя *:
Email *:
Код *: