Другие языки программирования и технологии

Помогите, пожалуйста, решить задачку на паскале. Заранее благодарна.

Написать программу в паскале, переводящую целые числа из двоичной, восьмеричной и шестнадцатеричной систем счисления в десятичную. Число вводится с клавиатуры, результат выводится на экран.
Мой вариант.

Перевод с двоичной в десятичную:
var
bin : string;
dec : longint;
i,j : byte;
begin
dec := 0;
write('In binary system :');
readln(bin);
j:=0;
for i:=length(bin) downto 1 do
begin
if bin='1' then inc(dec,round(exp(j*ln(2))));
inc(j);
end;
writeln('In decimal system:',dec);
end.

----------------------------------------------------
Перевод с восьмеричной в десятичную:
var
oct : string;
dec : longint;
i,j,k : byte;
er : integer;
begin
dec := 0;
write('In octal system :');
readln(oct);
j:=0;
for i:=length(oct) downto 1 do
begin
val(oct,k,er);
inc(dec,round(k*exp(j*ln(8))));
inc(j);
end;
writeln('In decimal system:',dec);
end.

--------------------------------------------

Перевод с шестнадцатеричной в десятичную:

var
hex : string;
dec : longint;
i,j,k : byte;
er : integer;
begin
dec := 0;
write('In hex system :');
readln(hex);
j:=0;
for i:=length(hex) downto 1 do
begin
val(hex,k,er);
if er<>0 then
begin
case hex of
'a','A': k:=10;
'b','B': k:=11;
'c','C': k:=12;
'd','D': k:=13;
'e','E': k:=14;
'f','F': k:=15;
end;
end;
inc(dec,round(k*exp(j*ln(16))));
inc(j);
end;
writeln('In decimal system:',dec);
end.

-----------------------------------

Если отвечать на вопрос об ошибке, то можно все изменить так:
function pow2(m: byte):integer;
var i: byte;
a:integer;
begin
a := 1;
for i := 1 to m do
a := a * 2;
pow2 := a;
end;

наличие текста "имя функции":=результат должно быть в конце и встречаться единыжды для любого разветвления.
В другом случает должны быть элементы рекурсии :)
Sanat Bolatov
Sanat Bolatov
2 672
Лучший ответ
ну вводишь число вводишь переменных 3 для двоичной восьмеричной и шестнадцатиричной и как переводить делишь на 2 с остатком на 8 и на 16 ну ты знаешь наверно)
Из двоичной в десятичную

var
binary: string;
n: byte;
digit: byte;
m: byte;
decimal: integer;
i: byte;

function pow2(m: byte):integer;
var i: byte;
begin
pow2 := 1;
for i := 1 to m do
pow2 := pow2 * 2;
end;

begin
write('Binary: ');
readln(binary);

n := length(binary);

decimal := 0;
m := n;
for i:=1 to n do begin
digit := ord(binary) - ord('0');
m := m - 1;
if digit = 1 then
decimal := decimal + pow2(m);
end;

writeln('Decimal: ',decimal);

readln
end.
Lvv1973
Lvv1973
2 883
Злой мэйл не даёт мне постить код -_____-
Отправила в личку.
Vovnovich ***
Vovnovich ***
756