Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 17
1

период числа

20.03.2017, 15:06. Просмотров 2190. Ответов 11
Метки нет (Все метки)

есть калькулятор умножения дробей, выводить должен две таблицы с обычными и десятичными дробями. если в десятичной форме у числа есть период, он должен выделяться как на картинке:
Кликните здесь для просмотра всего текста




вот код, который работает правильно, за исключением периода
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
102
103
104
105
106
107
108
109
110
111
#include<iostream>
#include<math.h>
#include <cmath>
#include <iomanip>
 
using namespace std;
 
float nsd(float a, float b)
{
    a =  abs(a);
    while(a!=b)
        if (a>b)
            a-=b;
        else b-=a;
    return a;
};
 
void scor(float &ch, float &zn)
{
    float a,b;
    a=ch/(nsd(ch,zn));
    b=zn/(nsd(ch,zn));
    ch=a;
    zn=b;
};
 
class fraction
{
private:
    float chys,znam;
public:
    void getFraction(float ch, float zn)
    {
        chys=ch;
        znam=zn;
        scor(chys,znam);
    };
 
    void setFraction()
    {
        cout<<chys<<"/"<<znam;
    };
    void setFraction10(){
        
        cout<<round(chys/znam*100)/100.;
    }
 
    void multFract(fraction a, fraction b)
    {
        chys=a.chys*b.chys;
        znam=a.znam*b.znam;
        scor(chys,znam);
 
 
    };
};
 
int main()
{
 
    fraction fraction1, fraction2, multi_fraction;
    float i,k,j;
    cout<<"Enter fraction: ";
    cin>>k;
    cout<<"        ";
    for (j=1;j<k;j++)
    {
        fraction1.getFraction(j,k);
        fraction1.setFraction();
        cout<<"  |  ";
    };
    cout<<endl<<endl;;
    for (i=1;i<k;i++)
    {
        fraction2.getFraction(i,k);
        fraction2.setFraction();
        for (j=1;j<k;j++)
        {
            fraction1.getFraction(j,k);
            cout<<"  |  ";
            multi_fraction.multFract(fraction1,fraction2);
            multi_fraction.setFraction();
        };
        cout<<" |"<<endl<<endl;;
    };
 
    /*================================================*/
 
    cout<<"        ";
    for (j=1;j<k;j++)
    {
        fraction1.getFraction(j,k);
        fraction1.setFraction10();
        cout<<"  |  ";
    };
    cout<<endl<<endl;;
    for (i=1;i<k;i++)
    {
        fraction2.getFraction(i,k);
        fraction2.setFraction10();
        for (j=1;j<k;j++)
        {
            fraction1.getFraction(j,k);
            cout<<"  |  ";
            multi_fraction.multFract(fraction1,fraction2);
            multi_fraction.setFraction10();
        };
        cout<<" |"<<endl<<endl;;
    };
    return 0;
}
то есть так:
Кликните здесь для просмотра всего текста



надеюсь на Вашу помощь.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2017, 15:06
Ответы с готовыми решениями:

Убедиться, что последние числа ряда повторяются, и найти период повторения
Задан ряд аn=an-2+an-1, a0=0, a1=1. Убедитесь, что последние числа этого ряда повторяются. Чему...

Посчитать бинарный период числа
A non-empty zero-indexed string S consisting of Q characters is given. The period of this string is...

Как сделать отчет по продажам за период (период в колонках) без СКД?
Всем привет! Покажите, пожалуйста, как сделать отчёт за период, период должен выводиться в колонки,...

Даны натуральные числа M и N.определить период десятичной дроби m/n
Даны натуральные числа M и N.определить период десятичной дроби m/n

11
nmcf
20.03.2017, 15:19
  #2

Не по теме:

Картинку прикрепи к сообщению через скрепку.

0
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 17
20.03.2017, 15:23  [ТС] 3
как должно быть
период числа

как есть
период числа
0
6913 / 5978 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
20.03.2017, 15:47 4
Наверное, надо реализовывать своё деление и проверять будут ли повторы.
0
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 17
20.03.2017, 16:32  [ТС] 5
Цитата Сообщение от nmcf Посмотреть сообщение
своё деление и проверять будут ли повторы
как?
0
6913 / 5978 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
20.03.2017, 16:33 6
Ну как в школе учат на бумаге делить. По такому же принципу. Как только повторы пойдут - останавливаться.
0
131 / 157 / 87
Регистрация: 06.04.2016
Сообщений: 992
20.03.2017, 16:37 7
Цитата Сообщение от dartdoctor Посмотреть сообщение
a = abs(a);
- от дробного брать модуль: fabs().
0
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 17
20.03.2017, 18:08  [ТС] 8
Цитата Сообщение от nmcf Посмотреть сообщение
Ну как в школе учат на бумаге делить. По такому же принципу. Как только повторы пойдут - останавливаться.
можешь показать алгоритм?
0
6913 / 5978 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
20.03.2017, 21:44 9
Лучший ответ Сообщение было отмечено dartdoctor как решение

Решение

Вот другой вариант:
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
#include <iostream>
#include <sstream>
#include <iomanip>
#include <string>
#include <algorithm>
using namespace std;
 
int main()
{
 
    int a = 1;
    int b = 36;
    
    cout << a / b;
    
    stringstream ss;
    string s;
    ss << setw(4) << setfill('0') << ((a % b) * 10000 / b);
    ss >> s;
    if (s.size() > 1)
    {
        char l = s.back();
        string::reverse_iterator it = std::find_if(s.rbegin() + 1, s.rend(), [l](char c){ return c != l; });
        int dst = std::distance(s.rbegin(), it);
        if (dst == 1)
        {
            cout << '.' << s << endl;
        }
        else
        {
            cout << '.' << s.substr(0, s.size() - dst) << '(' << s.back() << ')'<< endl;
        }
    }
}
Случай, когда в дробной части 1 цифра, или делится нацело, сам допили.
1
1244 / 1007 / 464
Регистрация: 25.12.2016
Сообщений: 3,265
20.03.2017, 22:09 10
Цитата Сообщение от DemolitionMan Посмотреть сообщение
от дробного брать модуль: fabs()
Это в Си. В С++ функция std::abs перегружена для разных типов, в том числе вещественных. Главное подключить cmath, а не math.h.
0
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 17
20.03.2017, 22:24  [ТС] 11
Цитата Сообщение от nmcf Посмотреть сообщение
Вот другой вариант:

Случай, когда в дробной части 1 цифра, или делится нацело, сам допили.
спасибо
0
nmcf
20.03.2017, 22:30     период числа
  #12

Не по теме:

dartdoctor, а почему у тебя всё на float? Целые типы должны быть, если простые дроби.

0
20.03.2017, 22:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2017, 22:30
Привет! Вот еще темы с ответами:

Список телефонов клиентов, заказывавших такси «I-го числа» в период от … до … часов
Имеется две таблицы - Clients, Traffic. По сути, из них мне нужны только по 2 столбца из таблицы...

Разделить два числа int с остатком и вывести период в скобках.
Даны два натуральных числа int32. Вывести точное значение A/B. В случае присутствия бесконечной...

В запросе задаем период отборки. Отчет на основании запроса. Как выводить в отчете период отборки?
В запросе задаем период отборки. Отчет на основании запроса. Как выводить в отчете период отборки?...

Период
1С 8.2 Здравствуйте! Необходимо создать отчет по регистру &quot;Продажи&quot;. Должен выбираться период,...


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

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

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