Нужна помощь программиста!

Morases

нужна помощь!!
program Bin2Dec;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
dlina,i,chislo,Code,a{произведение двойки в степени на число},q{результат}:integer;
stroka: string;

function step(chislo,stepen: integer) : integer;
var i,pow : integer;
begin
pow:=chislo;

for i := 1 to stepen-1 do pow:=pow*chislo;
step:=pow;
writeln(pow);
end;

begin
readln(stroka); { 1) пишем строку(stroka) в двоичной системе счисления.}
dlina := length(stroka); { 2) находим длину(dlina) строки}
Writeln(dlina);
for i := 1 to dlina do{ 3) вытягиваем из строки символы }
begin
val(stroka[i],chislo,code); { 4) и переводим их(stroka) в числа(chislo) }
If Code <> 0 Then WriteLn('error: ‘, Code)
Else WriteLn(’ chislo = ', chislo); {теперь это число(chislo) }

a{произведение двойки в степени на число}:= step(2,i)*chislo; { 5) возводим 2 в степень(dlina) в цикле так, что бы степень увеличивалась на 1 после предыдущего раза до длины(dlina) строки.}
q:=a{произведение двойки в степени на число}*i
end;
writeln (q{результат});
readln;
end.
написал программу, только она как то не так работает(
знаю,что не понимаю что то в цикле или в переменной после него.
функция написана 100% правильно!
ошибка наверняка глупая!!!
программа писалась мною на языке Delphi ну или Pascal
Выручите, очень нужно!
Заранее спасибо!)

Morases

значение i не может быть равно 0, потому что я там вытягиваю символы из строки, а stroka[0] это не возможно, на сколько я знаю.)
но я четь изменил эту строчку на

Morases:

for i := dlina downto 1 do

потому что по правилам перевода, числа из строки мы должны брать с конца.
верно?)