ENG GER GER pl
PCproxy mail RSS




Регистрация | Вход

Меню сайта

Форма входа

Последние новости

Наши друзья

Наш опрос
Вы часто бываете на ITsecure.org.ua?
Всего ответов: 453

Наши друзья



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

Java - введение 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 | Добавил: admin (12.09.2008)
Просмотров: 1193 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Реклама на сайте

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Наши друзья

Счетчики
  • Каталог Луганских сайтов
  • МЕТА - Украина. Рейтинг сайтов
  • Rambler's Top100
Ваш IP: 216.73.216.95

При полном или частичном копировании материалов с сайта, ссылка на ITsecure.org.ua обязательна!
ITsecure.org.ua ©2008-2025