Function Dec2Bin (num: word): String;
var result: string;
remainder: word;
c: char;
begin
result := 0;
p := 1;
for i := length (S) downto 1 do
begin
bit := ord (S) - ord ('0');
inc (result, bit * p);
p := p * 2; { или p := p shl 1 }
end;
Bin2dec:=result;
end;
var
a:integer;
begin
readln(a);
writeln (dec2bin (a));
readln;
end.
Из дестячного дробного в двоичное дробное
Из 10 обычного в двоичное легко сделать это я сделал, а как сделать дробное может кто подскажет?
Код:
Из 10 обычного в двоичное легко сделать это я сделал, а как сделать дробное может кто подскажет?[/quote]
1. на самом деле тоже ничего сложного. посмотри для начала вот эту ссылочку http://www.metodist.ru/iitdocs/baz/zan2/zan2.htm там доходчиво объясняется алгоритм перевода. смотри пункт 2.2.2. Перевод дробных чисел из одной системы счисления в другую. если поймешь что к чему программно это реализовать будет легко.
2. посмотри вот эту ссылку http://forum.codenet.ru/showpost.php?p=154222&postcount=5 там перевод в двоичное из десятичного помоему получше твоего будет + работает правильно и элегантнее.
P.S. код не предлагаю, так как считаю, что написать его ты сможешь и сам.
Добавлено позже:
а при указании result в переменных у тебя ошибка не вылазиет? вот из хелпа выдержка
[quote=]Result is implicitly declared in every function. Do not try to redeclare it.[/quote]
и вот еще строчка
Код:
var result: string;
.....
result := 0;
.....
result := 0;
мало того, что ошибка с result, о которой я написал выше, но тут же несовместимость типов string и Integer. + ко всему не вижу объявления переменных bit, i и p, зато есть remainder и с, которые по коду вообще не встречаются. непонятно что такое s и откуда берется, куда пропадает num. код такой, какой он здесь представлен просто нерабочий.
Да просто лень наверное :)
Код:
function RealToBin(a:<>pointer):string; {<> уберите, а то ":p" расценивается как смайлик}
var i:^int64;
j:byte;
begin
result:='';
i:=a;
for j:=1 to 64 do
begin
result:=intToStr(i^ and 1)+result;
i^:=i^ shr 1;
end;
end;
var i:^int64;
j:byte;
begin
result:='';
i:=a;
for j:=1 to 64 do
begin
result:=intToStr(i^ and 1)+result;
i^:=i^ shr 1;
end;
end;
ф-ции передается указатель на переменную типа Real,например, Memo1.Lines.Add(RealToBin(@RealNumber)));
Не забывайте, что число представляется в нормализованном виде.