IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> переввод дробей с 2 в 10 с.с., помогите с програмой
MiX
сообщение 23.09.2007 18:31
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Вобщем нужно написать програму что б переводила дроби с 2 в 10 с.с
Я вот написал но чтото здесь нитак
Помогите пожалуста найти ошыбки, или может ктото знает чтоб зделать как то по другому
Код

var h,r,a:real;
n,z,x,i:longint;
errcode:integer;
q,w,s: string;
begin
readln(s);
n:=pos('.',s);
q:=copy(s,1,n);
w:=copy(s,n,length(s)-n);
val(q,z,errcode);
for i:=1 to (n-1) do
begin
x:=z mod 10;
z:=z div 10;
r:=exp(ln(2)*i)*z+r;
end;
val(w,z,errcode);
for i:=n+1 to length(s)-n do
begin
x:=z mod 10;
z:=z div 10;
a:=1/(exp(ln(2)*i))*z+a;
end;
h:=a+r;
   writeln(h);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.09.2007 19:34
Сообщение #2


Гость






Ну, по правилам перевода из двоичной в десятичную (см. Здесь (Википедия)), надо бы делать так:

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.

 К началу страницы 
+ Ответить 
MiX
сообщение 27.09.2007 19:16
Сообщение #3





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


она неправильно работает:
я ввожу 0,111, должно выводить 0,875 а оно выводит совсем не то... blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.09.2007 19:34
Сообщение #4


Гость






Правда что-ли? Почему тогда:

Прикрепленное изображение

?
Запятую что-ли вводил? Напрасно. Точка нужна...
 К началу страницы 
+ Ответить 
MiX
сообщение 29.09.2007 17:13
Сообщение #5





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Я извиняюсь, незаметил...
Вопрос следующий:
как эту же прогу написать что б выводила с точностю до 0.00000005 ?? blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.09.2007 17:24
Сообщение #6


Гость






То есть, ты имеешь в виду, чтобы при вводе
s := '0.1111111111111111111111111111111111';
программа выводила бы:

" 0.9999999404", а не " 0.999999999941792" как без этого ограничения? Тогда исправить условие второго цикла:

while (fraq_part <> '') and (q > 0.00000005) do begin
// сам цикл остается прежним
end;

// и изменить формат вывода:
writeln(_result:18:10);


 К началу страницы 
+ Ответить 
MiX
сообщение 1.10.2007 15:55
Сообщение #7





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


я имею ввиду шоб оно не выводило больше цыфр посе комы чем в ограничении тоисть 8 и последнюю цыфру автоматически меняло на 5 или 0, тоисть еси n>5 то 0, а еси n<5 то на 5 (n - последняя цыфра)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 14:23
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"