Вобщем нужно написать програму что б переводила дроби с 2 в 10 с.с
Я вот написал но чтото здесь нитак
Помогите пожалуста найти ошыбки, или может ктото знает чтоб зделать как то по другому
Ну, по правилам перевода из двоичной в десятичную (см. http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F), надо бы делать так:
var
s, int_part, fraq_part: string;
p: longint;
q: real;
_result: real;
begin
// readln(s);
s := '1100.011';
int_part := copy(s, 1, pos('.', s) - 1);
fraq_part := copy(s, pos('.', s) + 1, 255);
_result := 0.0;
p := 1;
while int_part <> '' do begin
_result := _result + (ord(int_part[length(int_part)]) - ord('0')) * p;
delete(int_part, length(int_part), 1);
p := p * 2;
end;
writeln(_result:10:5);
q := 1 / 2;
while fraq_part <> '' do begin
_result := _result + (ord(fraq_part[1]) - ord('0')) * q;
delete(fraq_part, 1, 1);
q := q / 2;
end;
writeln(_result:10:5);
end.
она неправильно работает:
я ввожу 0,111, должно выводить 0,875 а оно выводит совсем не то...
Правда что-ли? Почему тогда:
?
Запятую что-ли вводил? Напрасно. Точка нужна...
Я извиняюсь, незаметил...
Вопрос следующий:
как эту же прогу написать что б выводила с точностю до 0.00000005 ??
То есть, ты имеешь в виду, чтобы при вводе
s := '0.1111111111111111111111111111111111';программа выводила бы:
while (fraq_part <> '') and (q > 0.00000005) do begin
// сам цикл остается прежним
end;
// и изменить формат вывода:
writeln(_result:18:10);
я имею ввиду шоб оно не выводило больше цыфр посе комы чем в ограничении тоисть 8 и последнюю цыфру автоматически меняло на 5 или 0, тоисть еси n>5 то 0, а еси n<5 то на 5 (n - последняя цыфра)