Как перевести двоичный код в десятичную систему счисления, используя функцию? - Free Pascal
Формулировка задачи:
хелпните нужно написать функцию перевода двоичного кода в десятичный на паскале
Решение задачи: «Как перевести двоичный код в десятичную систему счисления, используя функцию?»
textual
Листинг программы
Function k2(k : Byte) : Longint; { 2 в сетепени k }
Begin
If k>0 then k2:=2*k2(k-1)
else k2:=1;
end;
Function BinToInt(S : String) : Longint;
Begin
If Length(S)>1 then
BinToInt:=(Ord(S[1])-Ord('0'))*k2(Length(S)-1)+BinToInt(Copy(S,2,Length(S)-1))
else
BinToInt:=Ord(S[1])-Ord('0');
end;
Объяснение кода листинга программы
- Функция
k2принимает на вход параметрkтипаByte(беззнаковое число, ограниченное диапазоном от 0 до 255). - Если
kбольше 0, то функцияk2вызывает саму себя, передавая в качестве аргументаk-1, и результат умножает на 2. - Если
kравно 0 или меньше, то функцияk2возвращает 1. - Функция
BinToIntпринимает на вход параметрSтипаString(строка символов). - Если длина строки
Sбольше 1, то функцияBinToIntвызывает функциюk2, передавая в качестве аргументаLength(S)-1, и добавляет к результату разность между ASCII-кодом первого символа строкиSи ASCII-кодом символа '0'. - Если длина строки
Sравна 1, то функцияBinToIntвозвращает разность между ASCII-кодом первого символа строкиSи ASCII-кодом символа '0'. - В пункте 5 в качестве аргумента для функции
k2используется результат вызова функцииCopy, которая создает новую строку, начиная со второго символа исходной строки и заканчивая последним символом исходной строки (исключая последний символ). Длина новой строки равна длине исходной строки минус 1. - Функция
BinToIntвызывается в пункте 5 с аргументом, созданным функциейCopy.