Witam !
Stworzyłem kod algorytmu, który konwertuje liczbę binarna z przecinkiem na liczbę decymalna.
Algorytm działa na schemacie hornera. Traktujemy część całkowitą i część ułamkową jak jedną liczbę całkowitą. Za pomocą schematu Hornera wyznaczamy wartość tej liczby, a wynik mnożymy przez wagę ostatniej pozycji liczby wejściowej, która to obliczam funkcja potega
Czy ten algorytm jest efektywny ? Czy mógłby ktoś doradzić mi co można by zmienić, lub czy istnieje efektywniejszy sposób algorytmiczny ?
Oto kod:
function konwert(bin:string):extended;
function potega(n:byte):real;
begin
if n=0 then potega := 1 else
potega := potega(n-1) * (1/2);
end;
var
I,w : integer;
przecinek : integer;
n : byte;
begin
n := Length(bin);
w := StrToInt(bin[1]);
przecinek := n;
for i :=1 to n-1 do
begin
if bin[i] <> ',' then
begin
if bin[i+1] = ',' then w:=w*2+StrToInt(bin[i+2]) else
w:=w*2+StrToInt(bin[i+1]);
end else
begin
przecinek := i;
end;
end;
result:=w * potega(n-przecinek);
end;
Dziękuję za pomoc.