Показать сообщение отдельно
Старый 13.10.2009, 22:14   #3
Tronix
Знающий
 
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений
(для 331 пользователей)
Ответ: Некоторые алгоритмы написанные на чистом pascal-е

Ну конечно не оптимальны, но зато принцип понятен. Понятен принцип - не проблема соптимизить.
А вот я в школе так забавлялся над системами счислений:
Function Dec2Bin(NWord): String;
Var
   
Byte;
   
String;
   
Byte;
Begin
     S 
:= '';
     
:= 0;
     For 
:= 15 downto 0 do
         
Begin
              
If and (1 shl b) = 0 then S := S+'0' else := S+'1';
              
Inc(T);
              If (
T Mod 4 0) and (14then S := S+'.';
         
End;
     
Dec2Bin := S;
End;

Function 
Dec2Hex(NWord): String;
Const
     
HD : Array [0..15of Char = ('0','1','2','3','4','5','6','7',
                                   
'8','9','A','B','C','D','E','F');
Begin
     Dec2Hex 
:= (HD[Hi(Nshr 4]+HD[Hi(N) and $F])+
                (
HD[Lo(Nshr 4]+HD[Lo(N) and $F])+'h';
End;

Function 
Dec2Oct(NWord): String;
Var
   
Mas String;
   
B,BBWord;
   
I   Byte;
   
C   Char;
Begin
     I 
:= 1;
     
:= N;
     
Repeat
           BB 
:= B div 8;
           
Mas[i] := Chr((- (BB))+48);
           
:= BB;
           
Inc(I);
     
Until B 8;
     
Mas[i] := Chr(B+48);
     
Mas[0] := Chr(I);
     For 
:= 1 to Ord(Mas[0]) shr 1 do
         
Begin
              C 
:= Mas[i];
              
Mas[i] := Mas[Length(Mas)-I+1];
              
Mas[Length(Mas)-I+1] := C;
         
End;
     
Dec2Oct := Mas;
End;

Function 
BinAndOct2Dec(NStringOsByte): String;
Function 
Stepen(B,DByte): Word;
Var
   
Word;
   
II Byte;
Begin
     P 
:= 1;
     If 
<> 0 then For II := 1 to D do := P*else := 1;
     
Stepen := P;
End;

Var
   
S    Word;
   
I    Byte;
   
T    String;
Begin
     S 
:= 0;
     For 
:= 1 to Length(N) do
         
Begin
              S 
:= S+((Ord(N[i])-48)*Stepen(Os,Length(N)-I));
         
End;
     
Str(S,T);
     
BinAndOct2Dec := T;
End;

Function 
Hex2Dec(String): String;
Const
  
HexDigit   : Array [0..15of Char '0123456789ABCDEF';
  
BinNibbles : Array [0..15of String[4] = (
    
'0000''0001''0010''0011',
    
'0100''0101''0110''0111',
    
'1000''1001''1010''1011',
    
'1100''1101''1110''1111');

Var
   
I,J  Byte;
   
S    String;
Begin
     S 
:= '';
     For 
:= 1 to Length(N) do
         
Begin
              
For := 0 to 15 do If UpCase(N[i]) = HexDigit[Jthen
                  S 
:= S+BinNibbles[J];
         
End;
     
Hex2Dec := BinAndOct2Dec(S,2);
End
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
_Nox_ (13.10.2009)