Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: перевод дробей из float в обыкновенную и обратно  (Прочитано 12749 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ик
Гость
« : 03-05-2006 22:11 » 

помогите может пожалуйста функцией или алгоритмом перевода дробей из float в обыкновенную дробь и обратно.....
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 03-05-2006 22:18 » 

ик, в обыкновенную - это как? Улыбаюсь

а по идее -

f == (2*n*( f-(int)(f) ))/(2*n) + (int)(f)

то есть дробную часть умножаем на 2 до тех пор, пока она не станет >=1

и тогда дробь == целая часть + ( 1/(2*n) )

где целая часть == (int)(f)

1 - это результат умножения f на (2*n)
« Последнее редактирование: 03-05-2006 22:24 от Алексей1153 » Записан

ик
Гость
« Ответ #2 : 03-05-2006 22:37 » 

не очень понятно что такое f.
мне нужно из дроби типа 1,253335
сделать что типа 4/5
например....
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 03-05-2006 22:54 » 

ну да, тот вариант не очень
щас подумаем... если не засну Улыбаюсь

Записан

LP
Помогающий

ru
Offline Offline

« Ответ #4 : 04-05-2006 01:35 » 

Вот так можно Улыбаюсь Константой eps задаешь точность.
Код:
#include <iostream>

//НОД
int find_gcd(int a, int b )
{
    while(b)
    {
        int t = b;
        b = a % b;
        a = t;
    }
    return a;
}

const double eps = 0.001;

int main()
{
double num = 1.253335;
double denom = 1.0/(eps*10.0);

num = int(num*denom);
double gcd = (double)find_gcd((int)num, (int)denom);
num /= gcd;
denom /= gcd;
std::cout << num << '/' << denom;
return 0;
}
« Последнее редактирование: 19-12-2007 21:55 от Алексей1153++ » Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 04-05-2006 14:13 » 

Нарооод вы чего а? Ик.

Это как это так можно из 1,253335 получить 4/5? В какой математике?
Вам лапшу на уши вешают. Ага

Лёшка, ночью надо спаааать. Улыбаюсь)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
LP
Помогающий

ru
Offline Offline

« Ответ #6 : 04-05-2006 14:49 » 

Очевидно он имел в виду 5/4, а не 4/5. Улыбаюсь
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 04-05-2006 15:08 » 

Лёшка, ночью надо спаааать. Улыбаюсь)

дык что я и сделал Улыбаюсь Посидел часик, не получилось, потом меня срубило. В 5 утра Улыбаюсь))
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 04-05-2006 15:16 » 

Очевидно он имел в виду 5/4, а не 4/5. Улыбаюсь

Уже ближе, но не совсем 5/4 - 1,25 Улыбаюсь)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
LP
Помогающий

ru
Offline Offline

« Ответ #9 : 04-05-2006 15:54 » 

Надо же, а я всегда думал что 5/4 будет 1,253335. Улыбаюсь
Но если в моей чудо-программе значение eps поменять на 0.0000001, то она выдаст более точный результат: 250667/200000, что дает 1,253335. Улыбаюсь
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
LP
Помогающий

ru
Offline Offline

« Ответ #10 : 04-05-2006 15:59 » 

Блин, будет ведь 0,1253335. Сейчас поправлю прогу. Улыбаюсь

При маленьких eps программа работает неправильно. При eps=0.00001; вроде все ок.
« Последнее редактирование: 04-05-2006 16:36 от LP » Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 04-05-2006 17:42 » 

LP, целую часть нужно наверное сразу отделить

 = (int)f;

а играться с дробной

= f - (int)f;
Записан

ик
Гость
« Ответ #12 : 04-05-2006 21:23 » 

ребята 4/5 и  1,253335 так вообще от балды написано было ... знак равно не ставился просто для примера Улыбаюсь
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #13 : 04-05-2006 21:30 » 

ик, Эта задача должна была препоподаваться еше в классе 5 обычной школы. Если не раньше. Вспомни как ты это делал на математике и делай аналогично. Прямых функций в стандартной библиотеке я думаю нет и не должно быть.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
ик
Гость
« Ответ #14 : 04-05-2006 21:47 » 

не было у меня такого в 5 классе ...
вариант как делать то есть, решила спросить че велосипед то изобретать
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 05-05-2006 07:11 » 

а зачем вообще eps?
1,253335 = 1+25335/100000, а далее найти общие знаменатели и сократить
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #16 : 05-05-2006 08:38 » 

Нуууу крыша постепенно отъезжает! Улыбаюсь)

5/4 по алгоритму считаем!!! А если просто 5 на 4 разделить?
Ща тоже прогу напишу проверю  Улыбаюсь)


Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines