Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/103: Рейтинг темы: голосов - 103, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 01.09.2012
Сообщений: 30

Перевод обыкновенной дроби в десятичную (в т.ч. периодическую)

07.09.2012, 09:38. Показов 20519. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
составить программу перевода обыкновенной дроби в периодическую
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.09.2012, 09:38
Ответы с готовыми решениями:

Перевод правильной дроби в десятичную
Добрый день, форумчане. Помогите пожалуйста с задачей. Дана дробь M/N, где M<N, и необходимо перевести ее в десятичную дробь с выделением...

Перевод десятичной дроби из двоичной системы счисления в десятичную
Подскажите пожалуйста, не смог найти на форуме код, который бы осуществлял перевод десятичной дроби из двоичной системы счисления в...

Класс обыкновенной дроби
class TFraction { public: signed int numerator; unsigned denominator; TFraction operator + (TFraction); TFraction...

19
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
07.09.2012, 09:40
а если дробь не периодическая, например 1/2 ?
0
1 / 1 / 0
Регистрация: 01.09.2012
Сообщений: 30
07.09.2012, 09:48  [ТС]
тоже можно
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
07.09.2012, 09:52
что можно?
1
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
07.09.2012, 10:34
Перевести простую пробь в десятичную
2
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
07.09.2012, 22:12
алишка999, посмотри сюда Бесконечная точность при делении
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
07.09.2012, 23:05
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <set>
#include <string>
#include <sstream>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef std::vector<int>    T_numerators;
/////////////////////////////////////////////////////////////////////////////////////////
T_str  get_cyclic_number
    (
        int     numerator,
        int     denominator
    )
{
    std::ostringstream  sout;        
    sout    <<  numerator / denominator
            <<  '.';  
 
    T_str           fractional_part; 
    T_numerators    numerators;
    for(;;)
    {
        numerator   %=  denominator;
        numerator   *= 10;
 
        char    dig_char    =   char
                                    (
                                        '0' +   numerator / denominator
                                    );
        
        int     prev_dig_pos    =       std::find
                                            (
                                                numerators.begin(),
                                                numerators.end(),
                                                numerator
                                            )
                                    -   numerators.begin();
 
        if  (
                prev_dig_pos    ==  numerators.size()      
            )
        {
            fractional_part     .push_back( dig_char    );
            numerators          .push_back( numerator   );
        }
        else
        {
            fractional_part.insert
                (
                    prev_dig_pos,
                    "("
                );
            
            sout    <<  fractional_part
                    <<  ')';
            break;
        }
    }
    return  sout.str();
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    for(;;)
    {
        std::cout   <<  "numerator"
                    <<  '\t'
                    <<  "= ";
 
        int     numerator       =   0;
        std::cin    >>  numerator;
 
        std::cout   <<  "denominator"
                    <<  '\t'
                    <<  "= ";
 
        int     denominator     =   0;
        std::cin    >>  denominator ;
 
        if(denominator == 0)
        {
            break;
        }
 
        std::cout   <<  "cyclic_number"
                    <<  '\t'
                    <<  "= "
                    <<  get_cyclic_number
                            (
                                numerator,
                                denominator
                            )
                    <<  std::endl
                    <<  std::endl
                    <<  std::endl
                    <<  std::endl;    
    }   
}
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
08.09.2012, 00:13
Mr.X,
может я ошибаюсь но по моему твоя прога
число е=2.718281828........
почитает переодической и напишет 2.7(1828)
по моему задача в таком ключе
Цитата Сообщение от алишка999 Посмотреть сообщение
составить программу перевода обыкновенной дроби в периодическую
не решаема ведь есть бесконечные непереодические дроби
(число Пи число е)
необходимо вводить ограничение, например не более 10 знаков после запятой
тогда можно будет проанализировать
да и период может быть какой угодно хоть 100 знаков
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 00:37
Рациональные числа (именно это обычно понимается под словами "обыкновенная дробь") однозначно* представляются в виде конечной или периодической десятичной дроби.
______
* Если без казуистики 0,(9) = 1.
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
08.09.2012, 01:20
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
однозначно* представляются в виде конечной или периодической десятичной дроби.
например
1/7 = 0,14285714285714285714285714285714=0,(14 2857) период 6 знаков
1/707=0,00141442715700141442715700141443=0 ,(001414427157) период 12 знаков
1/7007=1,4271442842871414299985728557157e-4 разрядной сетки калькулятора не хватило для определения периода
а можно еще 1/700...7
теоретически они периодические
а практически???
нужно ограничение в условии
Цитата Сообщение от ValeryS Посмотреть сообщение
период может быть какой угодно хоть 100 знаков
Добавлено через 3 минуты
или знать законы периодических дробей и программировать их
но эту область математики я не знаю

Добавлено через 3 минуты
1/103=0,00970873786407766990291262135922
это переодическая дробь или нет???
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 01:26
Ограниченность разрядной сетки и вытекающие из этого ошибки — это половые трудности компьютера. Я говорил с точки зрения математики. Тем более, что это особо не мешает считать периоды.

1/103 = 0,00(9708737864077669902912621359223300)

У 1/97, кстати, длиннее :)
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
08.09.2012, 01:31
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Я говорил с точки зрения математики.
и я про тоже
нужно знать закон образования периода и от него танцевать
а не тупо делить

Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
1/103 = 0,00(9708737864077669902912621359223300)
знаешь? или как то рассчитал?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 01:34
Цитата Сообщение от ValeryS Посмотреть сообщение
знаешь? или как то рассчитал?
Да, блин, наизусть помню. И 96 цифр периода 1/97 тоже.

Здесь глянул. Для алгоритма расчёта расписываем деление в столбик и внимательно на него смотрим. Просто переводить только назад, из десятичной в обыкновенную.
1
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
08.09.2012, 01:49
~OhMyGodSoLong~, спасибо за ссылку
ну я и оторвался
1/100003 - period 50001
1/10000003 - period 769230
че неужели тоже столбиком делят?

Добавлено через 3 минуты
1/1000000303 а здесь умер
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 01:54
Why not? Это не так сложно. Судя по тому, как долго считаются периоды для дробей посложнее, именно так.

Но я нубло в теории чисел, может, для 1/n есть какие-то быстрые способы с разложением на простые числа знаменателя. Способы просто узнать период.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
08.09.2012, 02:23
~OhMyGodSoLong~, кстати 1/103 = 0,00(9708737864077669902912621359223300) там посчитано неверно, правильно считает моя программа:
1/103 = 0.(0097087378640776699029126213592233), так как, согласно Википедии,
"Можно показать, что чисто периодические дроби соответствуют рациональным числам, в записи которых в виде несократимой дроби p/q, знаменатель q не имеет простых делителей 2 и 5, а также рациональным числам p/q, у которых знаменатель q имеет только простые делители 2 и 5. Соответственно, смешанные периодические дроби соответствуют несократимым дробям p/q, знаменатель q которых имеет как простые делители 2 или 5, так и отличные от них."
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
08.09.2012, 02:40
Цитата Сообщение от Kastaneda Посмотреть сообщение
что можно?
0,4(9)

2
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
08.09.2012, 10:09
Цитата Сообщение от Mr.X Посмотреть сообщение
~OhMyGodSoLong~, кстати 1/103 = 0,00(9708737864077669902912621359223300) там посчитано неверно, правильно считает моя программа:
1/103 = 0.(0097087378640776699029126213592233), так как, согласно Википедии,
"Можно показать, что чисто периодические дроби соответствуют рациональным числам, в записи которых в виде несократимой дроби p/q, знаменатель q не имеет простых делителей 2 и 5, а также рациональным числам p/q, у которых знаменатель q имеет только простые делители 2 и 5. Соответственно, смешанные периодические дроби соответствуют несократимым дробям p/q, знаменатель q которых имеет как простые делители 2 или 5, так и отличные от них."
-
мой алгоритм
Бесконечная точность при делении
тоже показал такой период

Вот период дроби 1/103 = 0,(0097087378640776699029126213592233)

1 / 103 = 0.00970873786407766990291262135922330097087378640776699029126213592233
0097087378640776699029126213592233
0097087378640776699029126213592233009708 7378640776699029126213592233009708737864 0776699029126213592233009708737864077669 9029126213592233009708737864
0776699029126213592233009708737864077669 9029126213592233009708737864077669902912 6213592233009708737864077669902912621359 22330097087378640776699029126
2135922330097087378640776699029126213592 2330097087378640776699029126213592233009 708737864077669902912
Миниатюры
Перевод обыкновенной дроби в десятичную (в т.ч. периодическую)  
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
08.09.2012, 10:52
В коде, на который сослался Day - ошибка. Для знаменателя > 10 не учтено, что первые нули не входят в период. Вот исправленный вариант.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <alloc.h>
Drob(int NN, int M)
{
  long N = NN;   // исходное значение нам еще понадобится
  int c, i, step, period, dop, flag, fnol;
  int *x;
 
  printf(" %d / %d =\n", NN, M);
  x = (int *)malloc(M * sizeof(int));
  for(i=0; i<M; i++) x[i] = 0;
  fnol = step = 1;
  printf("0.");
  while(1) {
    N *= 10;
    c = N / M;
    if (c==0 && fnol) {
      printf("0");
      NN = N;
      continue;
    }
    fnol = 0;
    N = N % M;
    if (N==0) {
      //printf("точная десятитичная дробь\n");
      period = 0;
      break;
    }
    if (x[N]!=0) {
      period = step - x[N];
      dop = x[N] - 1;  // Сколько цифр надо печатать до периода
      // printf("Периодическая дробь, длина периода = %d dop=%d\n", period, dop);
      break;
    }
    x[N] = step;
    step++;
  }
      // Теперь число печатаем
  N = NN;
  i = 0;
  flag = 0;
  while(1) {
    if (flag==0 && period && i >= dop) {
      printf("(");
      flag = 1;  // Флаг - печатаем период
      i = 0;
    }
    N *= 10;
    c = N / M;
    printf("%d", c);
    N = N % M;
    if (N==0) break;
    if (period==0) continue; // Для точной дроби все что ниже - не нужно
    i++;
    if (flag && i >= period) {
      printf(")\n");
      break;
    }
  }
}
/*****************/
main(int argc, char *argv[])
{
   if (argc<3) exit(1);
   Drob(atoi(argv[1]), atoi(argv[2]));
}
/**************/
Запуск: drob.exe числитель знаменатель
Работает для не очень больших чисел (чтоб можно было выделить память для int *x)

Добавлено через 1 минуту
Источник Перевести простую пробь в десятичную
1
alexnadj
09.05.2014, 17:54
По определению "Любая обыкновенная дробь m/n можно представить в виде конечной или бесконечной периодической дроби, и только бесконечной периодической дробью и не когда бесконечной непериодической дробью (иначе тогда иррациональные число можно было представить в виде рациональной дроби m/n, а это невозможно по определению).
А 1/103=0,(009708737864077669902912621359223 3) - чистая периодическая дробь).
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.05.2014, 17:54
Помогаю со студенческими работами здесь

Создать класс Fraction, описывающий поведение обыкновенной дроби
Создать класс Fraction, описывающий поведение обыкновенной дроби. Класс должен содержать два int-поля для числителя и знаменателя. Должны...

Печать k-го члена последовательности в виде обыкновенной несократимой дроби
Разработайте набор функций для выполнения действий с обыкновенными дробями. Все эти функции должны возвращать результат в виде обыкновенной...

Составить программу печати n-го элемента в виде обыкновенной несократимой дроби
Для последовательности а1 = 1, an+1 = an + 1/(1 + an) составить программу печати n-го элемента в виде обыкновенной несократимой дроби.

составить программу печати n-го элемента в виде обыкновенной несократимой дроби
Столкнулся с такой вот задачей, не подскажете как это провернуть??? Для последовательности а1 = 1, an+1 = n⋅ an + 1/n составить...

Найти заданный член ряда в виде обыкновенной несократимой дроби
Для последовательности a1 = 1, a(n+1) = a(n) + 1/(1+а(n)) составить программу печати k-го члена в виде обыкновенной несократимой дроби....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru