Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Перевод программы из Pascal в C++


Автор: ramazot 20.4.2012, 09:05
Помогите перевести 2 функции Delphi на С++

Код


//Значение бита в двойном слове (32бита)
//байт = 8 бит,
//слово = 2 байта = 16 бит
//двойное слово = 2 слова = 4 байта = 32 бита..
//кажлый бит может быть либо 1 либо 0
//байт изменяется от 0 до 255
function Bit(Value, n: Integer): Boolean;
asm
   bt eax, edx
   setc al
   and eax, 0FFh
end;

//Функция быcтрого возведения в степень
function Pow(a, b, n: integer): integer;
var i: integer;
    ai: extended;
begin
  ai := a;
  for I := Trunc(log2(b)) - 1 downto 0 do
  if Bit(b, i) then ai := Round(sqr(ai) * a) mod n else ai := Round(sqr(ai)) mod n;
  result := Round(ai);
end;


Функция Bit переносится без изменений,а вот как будет Pow,не разберусь.
Заранее благодарен в помощи.

Автор: Rodman 20.4.2012, 09:09

M
Rodman
Модератор: Название темы должно отражать ее суть!

Автор: ramazot 23.4.2012, 12:21
Цитата(ramazot @ 20.4.2012,  09:05)
Помогите перевести 2 функции Delphi на С++

Код


//Значение бита в двойном слове (32бита)
//байт = 8 бит,
//слово = 2 байта = 16 бит
//двойное слово = 2 слова = 4 байта = 32 бита..
//кажлый бит может быть либо 1 либо 0
//байт изменяется от 0 до 255
function Bit(Value, n: Integer): Boolean;
asm
   bt eax, edx
   setc al
   and eax, 0FFh
end;

//Функция быcтрого возведения в степень
function Pow(a, b, n: integer): integer;
var i: integer;
    ai: extended;
begin
  ai := a;
  for I := Trunc(log2(b)) - 1 downto 0 do
  if Bit(b, i) then ai := Round(sqr(ai) * a) mod n else ai := Round(sqr(ai)) mod n;
  result := Round(ai);
end;


Функция Bit переносится без изменений,а вот как будет Pow,не разберусь.
Заранее благодарен в помощи.

Прошу совета.

Автор: ramazot 4.5.2012, 09:59
Тема закрыта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)