Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 65, средняя оценка - 4.95
алишка999
1 / 1 / 0
Регистрация: 01.09.2012
Сообщений: 30
#1

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

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

составить программу перевода обыкновенной дроби в периодическую
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2012, 09:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод обыкновенной дроби в десятичную (в т.ч. периодическую) (C++):

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

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

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

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

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

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

19
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,356
Записей в блоге: 2
Завершенные тесты: 1
07.09.2012, 09:40 #2
а если дробь не периодическая, например 1/2 ?
0
алишка999
1 / 1 / 0
Регистрация: 01.09.2012
Сообщений: 30
07.09.2012, 09:48  [ТС] #3
тоже можно
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,356
Записей в блоге: 2
Завершенные тесты: 1
07.09.2012, 09:52 #4
что можно?
1
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
07.09.2012, 10:34 #5
Перевести простую пробь в десятичную
2
-=ЮрА=-
Заблокирован
Автор FAQ
07.09.2012, 22:12 #6
алишка999, посмотри сюда Бесконечная точность при делении
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
07.09.2012, 23:05 #7
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
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,210
08.09.2012, 00:13 #8
Mr.X,
может я ошибаюсь но по моему твоя прога
число е=2.718281828........
почитает переодической и напишет 2.7(1828)
по моему задача в таком ключе
Цитата Сообщение от алишка999 Посмотреть сообщение
составить программу перевода обыкновенной дроби в периодическую
не решаема ведь есть бесконечные непереодические дроби
(число Пи число е)
необходимо вводить ограничение, например не более 10 знаков после запятой
тогда можно будет проанализировать
да и период может быть какой угодно хоть 100 знаков
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 00:37 #9
Рациональные числа (именно это обычно понимается под словами "обыкновенная дробь") однозначно* представляются в виде конечной или периодической десятичной дроби.
______
* Если без казуистики 0,(9) = 1.
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,210
08.09.2012, 01:20 #10
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
однозначно* представляются в виде конечной или периодической десятичной дроби.
например
1/7 = 0,14285714285714285714285714285714=0,(142857) период 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
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.09.2012, 01:26 #11
Ограниченность разрядной сетки и вытекающие из этого ошибки — это половые трудности компьютера. Я говорил с точки зрения математики. Тем более, что это особо не мешает считать периоды.

1/103 = 0,00(9708737864077669902912621359223300)

У 1/97, кстати, длиннее :)
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,210
08.09.2012, 01:31 #12
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Я говорил с точки зрения математики.
и я про тоже
нужно знать закон образования периода и от него танцевать
а не тупо делить

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

Здесь глянул. Для алгоритма расчёта расписываем деление в столбик и внимательно на него смотрим. Просто переводить только назад, из десятичной в обыкновенную.
1
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,210
08.09.2012, 01:49 #14
~OhMyGodSoLong~, спасибо за ссылку
ну я и оторвался
1/100003 - period 50001
1/10000003 - period 769230
че неужели тоже столбиком делят?

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

Но я нубло в теории чисел, может, для 1/n есть какие-то быстрые способы с разложением на простые числа знаменателя. Способы просто узнать период.
0
08.09.2012, 01:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2012, 01:54
Привет! Вот еще темы с ответами:

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

Перевод из восьмеричной в десятичную СС - C++
Добрый день. Каким способом можно организовать перевод из восьмеричной в десятичную систему счисления? Перевод в двоичную из...

Перевод чисел из двоичной в десятичную - C++
помогите сделать ее более длинной и чтоб можно было писать еще значения и она не закрывалась , заранее спасибо #include &lt;iostream&gt; ...

Перевод в из двоичной в десятичную систему - C++
Народ! Надо реализовать программу, которая считывает строку в виде двоичного числа и переводит ее десячтичную! Алгоритм я помню перевода...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru