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

Действия над дробями с использованием структуры - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Маркер конца строки http://www.cyberforum.ru/cpp-beginners/thread1157617.html
Доброго времени суток, уважаемые форумчане.:handshake: Дело обстоит так, имеется задача "Определить в заданной строке координаты подстроки, содержащей наибольшее число пробелов". В принципе, с...
C++ Сделать цикл для перевода и записи в файл вектора строк Добрый вечер! Имеется программа для транслитерации строк.На данный момент программа умеет считывать строки из текстового файла и сохранять их в вектор строк, выводит содержимое (файла и вектора при... http://www.cyberforum.ru/cpp-beginners/thread1157592.html
FLTK как установить на Visual studio 2013 C++
скачал с сайта архив fltk-1.3.2-source.tar.gz студия на англ языке у меня стоит как теперь его установить подскажите пожалуйста Добавлено через 9 минут объясните подробно я новичок учусь по...
C++ Вызов метода в потоке
Подскажите в чем моя ошибка. Пытаюсь вызвать метод в потоке и получаются следующие ошибки A::StopThreadClickHandler: в вызове функции отсутствует список аргументов; используйте...
C++ Функция GLMatrixMode http://www.cyberforum.ru/cpp-beginners/thread1157542.html
Ребята помогите разобраться с данной функцией GLMatrixMode(). Для чего эта функция применяется, какие можно передать ей параметры, и в чём различия работы с ней в зависимости от этих параметров?
C++ Как правильно написать функцию, которая редактирует структуру по полю Name и возвращает новую, исправленную структуру?.. Нужно отредактировать структуру по выбору пользователя. Проблема заключается в создании функции. Подскажите, а лучше покажите, как правильно написать функцию, которая редактирует структуру по полю... подробнее

Показать сообщение отдельно
Spiderman5
31 / 31 / 14
Регистрация: 07.04.2014
Сообщений: 219

Действия над дробями с использованием структуры - C++

25.04.2014, 23:10. Просмотров 596. Ответов 2
Метки (Все метки)

Ребята, написал задачу, есть небольшая проблема.
После сложения и вычитания дробь сокращается.
После умножения и деления не всегда сокращается. Например, после деления 3/7 на 2/9 выдаёт результат 81/42 вместо 27/14.
Знаю, что в функции сокращения дроби что-то неправильно. Помогите найти неточность в коде, чтобы работало идеально.

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
112
113
114
115
116
117
118
119
120
121
#include <iostream>
using namespace std;
 
struct Fraction
{
    int Numerator;
    int Denominator;
};
 
void Common_Denominator(Fraction &a, Fraction &b)
{
    int multiplier = 1;
    int multiplier1;
    int multiplier2;
    int common_denominator = 1;
 
    if (a.Denominator != b.Denominator)
    {
        common_denominator = a.Denominator * b.Denominator; // общий знаменатель
    }
    else
    {
        common_denominator = a.Denominator;
    }
 
    multiplier1 = common_denominator / a.Denominator;
    multiplier2 = common_denominator / b.Denominator;
 
    a.Numerator *= multiplier1;
    b.Numerator *= multiplier2;
 
    a.Denominator = common_denominator;
    b.Denominator = common_denominator;     
}
 
 
void Addition(Fraction &a, Fraction &b, Fraction &result) // сложение
{
    result.Denominator = a.Denominator;
    result.Numerator = a.Numerator + b.Numerator;
}
 
void Deduction(Fraction &a, Fraction &b, Fraction &result) // вычитание
{
    result.Denominator = a.Denominator;
    result.Numerator = a.Numerator - b.Numerator;
}
 
void Multiplication(Fraction &a, Fraction &b, Fraction &result) // умножение
{
    result.Numerator = a.Numerator * b.Numerator;
    result.Denominator = a.Denominator * b.Denominator;
}
 
void Division(Fraction &a, Fraction &b, Fraction &result) // деление
{
    result.Numerator = a.Numerator * b.Denominator;
    result.Denominator = a.Denominator * b.Numerator;
}
 
void Cancel(Fraction &a) // сокращение дроби
{
    int multiplier = 1;
        
        for (multiplier = 1; multiplier <= a.Numerator || multiplier <= a.Denominator; multiplier++)
        {
            if ((a.Numerator % multiplier == 0) && (a.Denominator % multiplier == 0))
            {
                a.Numerator /= multiplier;
                a.Denominator /= multiplier;
            }
        }       
}
 
void main()
{
    Fraction number1;
    Fraction number2;
    Fraction result;
 
    cout << "Enter first Numerator: ";
    cin >> number1.Numerator;
    cout << "Enter first Denominator: ";
    cin >> number1.Denominator;
 
    cout << "Enter second Numerator: ";
    cin >> number2.Numerator;
    cout << "Enter second Denominator: ";
    cin >> number2.Denominator;
    cout << endl;
 
    Common_Denominator(number1, number2);
 
    cout << number1.Numerator << " / " << number1.Denominator << endl;
    cout << number2.Numerator << " / " << number2.Denominator << endl;
    cout << endl;
 
    Addition(number1, number2, result);
    Cancel(result);
 
    cout << "Addition = ";
    cout << result.Numerator << " / " << result.Denominator << endl;
 
    Deduction(number1, number2, result);
    Cancel(result);
 
    cout << "Deduction = ";
    cout << result.Numerator << " / " << result.Denominator << endl;
 
    Multiplication(number1, number2, result);
    Cancel(result);
 
    cout << "Multiplication = ";
    cout << result.Numerator << " / " << result.Denominator << endl;
 
    Division(number1, number2, result);
    Cancel(result);
 
    cout << "Division = ";
    cout << result.Numerator << " / " << result.Denominator << endl;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru