Четверг, 19.06.2025, 03:30
Приветствую Вас Гость | RSS
Меню сайта
fff
  • Индексация
  • Девочки
    Форма входа
    Категории раздела
    Теория алгоритмов [3]
    Теория алгоритмов
    Code Snippets [1]
    Code Snippets
    Все о PHP [20]
    Все о PHP
    Visual C++ [13]
    Visual C++
    WIN32 API [7]
    WIN32 API
    Delphi [72]
    Delphi
    ASP [2]
    ASP
    Java [67]
    Java
    VBScript [6]
    VBScript
    CGI [2]
    CGI
    VRML [2]
    VRML
    PERL [9]
    PERL
    HTML [4]
    HTML
    XML [10]
    XML
    Архив записей

    Статьи по Оптимизации

    ПРОГРАММИРОВАНИЕ! СОЗДАНИЕ САЙТОВ И ИХ ОПТИМИЗАЦИЯ

    Главная » Статьи » Программирование » Delphi

    Преобразование двоичного числа в десятичное
    Преобразование двоичного числа в десятичное
    Решение 1
    /////////////////////////////////////////////////////////////////////////
    // преобразование 32-битного base2 в 32-битный base10 //
    // максимальное число = 99 999 999, возвращает -1 при большем значении //
    /////////////////////////////////////////////////////////////////////////

    function Base10(Base2:Integer) : Integer; assembler;
    asm

    cmp eax,100000000 // проверка максимального значения
    jb @1 // значение в пределах допустимого
    mov eax,-1 // флаг ошибки
    jmp @exit // выход если -1
    @1:

    push ebx // сохранение регистров
    push esi
    xor esi,esi // результат = 0
    mov ebx,10 // вычисление десятичного логарифма
    mov ecx,8 // преобразование по формуле 10^8-1
    @2:

    mov edx,0 // удаление разницы
    div ebx // eax - целочисленное деление на 10, edx - остаток от деления на 10
    add esi,edx // результат = результат + разность[I]
    ror esi,4 // перемещение разряда
    loop @2 // цикл для всех 8 разрядов
    mov eax,esi // результат функции
    pop esi // восстанавление регистров
    pop ebx
    @exit:
    end;

    Решение 2
    function IntToBin(Value: LongInt;Size: Integer): String;
    var

    i: Integer;
    begin

    Result:='';
    for i:=Size downto 0 do begin
    if Value and (1 shl i)<>0 then begin
    Result:=Result+'1';
    end else begin
    Result:=Result+'0';
    end;
    end;
    end;

    function BinToInt(Value: String): LongInt;
    var

    i,Size: Integer;
    begin

    Result:=0;
    Size:=Length(Value);
    for i:=Size downto 0 do begin
    if Copy(Value,i,1)='1' then begin
    Result:=Result+(1 shl i);
    end;
    end;
    end;

    Решение 3

    Следующая функция получает в качестве параметра Base (1..16) любую десятичную величину и возвращает результат в виде строки, содержащей точное значение BaseX. Вы можете использовать данный алгоритм для преобразования арабских чисел в римские (смотри ниже).
    function DecToBase( Decimal: LongInt; const Base: Byte): String;
    const

    Symbols: String[16] = '0123456789ABCDEF';
    var

    scratch: String;
    remainder: Byte;
    begin

    scratch := '';
    repeat
    remainder := Decimal mod Base;
    scratch := Symbols[remainder + 1] + scratch;
    Decimal := Decimal div Base;
    until ( Decimal = 0 );
    Result := scratch;
    end;

    Передайте данной функции любую десятичную величину (1...3999), и она возвратит строку, содержащую точное значение в римской транскрипции.
    function DecToRoman( Decimal: LongInt ): String;
    const

    Romans: Array[1..13] of String =
    ( 'I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M' );

    Arabics: Array[1..13] of Integer =
    ( 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);

    var

    i: Integer;
    scratch: String;
    begin

    scratch := '';
    for i := 13 downto 1 do
    while ( Decimal >= Arabics[i] ) do
    begin
    Decimal := Decimal - Arabics[i];
    scratch := scratch + Romans[i];
    end;
    Result := scratch;
    end;

    Категория: Delphi | Добавил: Merlin (07.12.2009)
    Просмотров: 917 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *: