Обыкновенные дроби
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Обыкновенные дроби Expand / Collapse
Автор
Сообщение
04.11.2006 11:03
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 29.03.2008 22:59
Сообщ.: 11, Visits: 123
Как осуществить вывод чисел в виде обыкновенных дробей в С++?
Сообщ. #906892
05.11.2006 8:00
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 30.03.2008 17:43
Сообщ.: 247, Visits: 2 370
скорее всего придется вручную преобразовывать. Хотя может логичнее будет изначально операции производить в простых дробях (опять же вручную их предварительно реализовав)
Сообщ. #906917
06.11.2006 23:30
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.08.2008 19:49
Сообщ.: 1 577, Visits: 17 092
Обычно здесь советуют использовать разложение в цепную дробь. Вот я попробовал дробь из семи звеньев.

#include <stdio.h>
typedef struct {
  __int64 num, denom;
} Tq;
#define N 7
void to_frac(double a, Tq *pq) {
  int i;
  int m;
  __int64 ii, temp[N];
  m = a < 0;
  if(m) a = -a;
  for(i=0; i < N; i++) {
    temp[i] = a;
    a = 1.0 / (a - temp[i]);
  }
  pq->denom = 0;
  pq->num = 1;
  for(i=N; i-- > 0;) {
    ii = temp[i] * pq->num + pq->denom;
    pq->denom = pq->num;
    pq->num = ii;
  }
  if(m) pq->num = -(pq->num);
}

int main() {
  Tq q;
  double a;
  a = -3.2435;
  to_frac(a, &q);
  printf("%lf", a);
  printf("%I64d / %I64d", q.num, q.denom);
  printf("%lf", (double)q.num / q.denom);
  return 0; 
}
//   -3.243500
//   -1372 / 423
//   -3.243499

Можете оценить точность. Если хотите сделать количество звеньев как параметр функции, то придется выделять память для массива temp переменного размера, а потом ее освобождать.

Сообщ. #907015
13.11.2006 19:46
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298, Visits: 12 500
А может стоит попробовать найти наибольший общий делитель?

Скажем есть десятичная дробь: 0.75, что есть: 75/100 ищем НОД для 75 и 100 -> 25
Делим 75 : 25 -> 3, 100 : 25 -> 4
Получаем дробь: 3/4

Подробнее о НОД: http://ru.wikipedia.org/wiki/Наибольший_общий_делитель

Удачи,
Владимир
Сообщ. #907383
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 2:23