Информация об изменениях

Сообщение Re: Использование переменных цикла после цикла от 14.09.2023 15:48

Изменено 14.09.2023 15:52 kov_serg

Re: Использование переменных цикла после цикла
Здравствуйте, Khimik, Вы писали:

K>Мне надо перевести фрагмент кода с C++ на Delphi. В частности эту функцию:


И какие трудности? Примерно так, но предполагается что sizes[i]<>0 и то что результат влазит в 32 байта. т.е. <= 256
function sizeofints(sizes:array of cardinal):integer;
  var j,zn:integer;
  var z:array[32] of byte;
  procedure z_mul(x:cardinal);
  var i:integer; carry:cardinal;
  begin
    i:=0; carry:=0;
    while i<zn or carry<>0 do
      inc(carry,z[i]*x);
      z[i]:=carry; carry:=carry shr 8;
      inc(i);
    end
  end
  function bits(x:byte);begin
    result:=0; while x<>0 do begin inc(result); x:=x shr 1; end
  end
begin
    zn:=1; z[0]:=1;
    for j:=0 to length(sizes)-1 do z_mul(sizes[j]);
    result:=(zn-1)*8+bits(z[zn-1]);
end
Re: Использование переменных цикла после цикла
Здравствуйте, Khimik, Вы писали:

K>Мне надо перевести фрагмент кода с C++ на Delphi. В частности эту функцию:


И какие трудности? Примерно так, но предполагается что sizes[i]<>0 и то что результат влазит в 32 байта. т.е. <= 256
function sizeofints(sizes:array of cardinal):integer;
  var j,zn:integer;
  var z:array[32] of byte;
  procedure z_mul(x:cardinal);
  var i:integer; carry:cardinal;
  begin
    i:=0; carry:=0;
    while i<zn or carry<>0 do
      inc(carry,z[i]*x);
      z[i]:=carry; carry:=carry shr 8;
      inc(i);
    end
    zn:=i;
  end
  function bits(x:byte);begin
    result:=0; while x<>0 do begin inc(result); x:=x shr 1; end
  end
begin
    zn:=1; z[0]:=1;
    for j:=0 to length(sizes)-1 do z_mul(sizes[j]);
    result:=(zn-1)*8+bits(z[zn-1]);
end