Форум программистов, компьютерный форум CyberForum.ru

Работа с дробями - C++

Восстановить пароль Регистрация
 
qretik
1 / 1 / 0
Регистрация: 24.10.2012
Сообщений: 132
13.03.2013, 19:29     Работа с дробями #1
Написать программу, работы с дробями используя структуры. Написал функцию сложения (но чет напортачил)
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
#include<iostream>
#include<windows.h>
using namespace std;
struct Drob
{
int a;
int b;
};
Drob enterDrobData();
Drob addDrob(const Drob&, const Drob&);
 
void addDrob(const Drob&, const Drob&, const Drob&, const char);
char* rus(char*);
void main (void)
{
Drob d1, d2, dSum;
d1 = enterDrobData();
d2 = enterDrobData();
dSum = addDrob(d1,d2);
printResult(d1,d2,dSum, '+');
}
Drob enterDrobData()
{
Drob d;
cout<<("vvedite xnachenie drobi: ")<<"\n";
cout<<("chislitel:");
cin>>d.a;
cout<<("znamenatel: ")<<"\n";
cin>>d.b;
return d;
}
Drob addDrob(const Drob& d1, const Drob& d2)
{
    Drob d;
    d.a = d1.a*d2.b+d2.a*d1.b;
    d.b = d1.b*d2.b;
 
    return d;
}
void printResult(const Drob& d1, const Drob& d2, const Drob& d, const char znak)
{
printf("%d/%d %c %d/%d = %d/%d\n",d1.a,d1.b,znak,d2.a,d2.b,d.a,d.b);
system("pause");
}
char* rus(char* str)
{
static char buf[40];
CharToOem(str,buf);
return buf;
 
}
Также нужно дописать функцию вычитания(substract), функцию умножения(multiplication), и функцию деления(divine).
И тут полный стопор не знаю что куда и как.
Было бы не плохо если бы вы указали какую-нибудь ссылку или книжку с примерами.(также понадобится все это с использованием классов и функций).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2013, 19:29     Работа с дробями
Посмотрите здесь:

C++ калькулятор.работа с обыкновенными дробями
Работа с дробями C++
Модули работа с дробями. C++
C++ Структуры, работа с дробями.
C++ Операции с дробями
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 538
13.03.2013, 19:45     Работа с дробями #2
ну раз уж структура, то проще было бы организовать так:

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
struct Drob
{
    double x;
    double y;
    
    Drob(double _x, double _y) : x(_x), y(_y) {};
 
    const Drob& operator + (const Drob& right)
    {
        if (this->y != right.y)
        {
            this->y *= right.y;
            this->x = this->x * right.y + right.x * this->y;
        }
        else
            this->x += right.x;
 
        return *this;
    };
 
    void Show()
    {
        cout << this->x << "\\" << this->y;
    };
};
 
int main()
{
    Drob a(3,4), b(2,4), c(5,2);
 
    a + b;
    a.Show();
 
    cout << endl;
 
    a + c;
    a.Show();
 
    cout << endl;
 
    system("pause");
}
qretik
1 / 1 / 0
Регистрация: 24.10.2012
Сообщений: 132
14.03.2013, 02:29  [ТС]     Работа с дробями #3
Нужно что бы дробь была в виде 3/4 + 4/4. И что бы самому вводить знаменатель и числитель.
действия должны совершаться все сразу в столбик.
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
14.03.2013, 02:40     Работа с дробями #4
Вас, qretik, устроит вариант, если после действия, получится неприведенная дробь? Например
Код
1/6 + 1/4 = ( 4 + 6 ) / 4*6 = 10 / 24
qretik
1 / 1 / 0
Регистрация: 24.10.2012
Сообщений: 132
14.03.2013, 02:51  [ТС]     Работа с дробями #5
Цитата Сообщение от GoldenId Посмотреть сообщение
Вас, qretik, устроит вариант, если после действия, получится неприведенная дробь? Например
Код
1/6 + 1/4 = ( 4 + 6 ) / 4*6 = 10 / 24
Спасибо, но нет.
Мне бы в своей разобраться...
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
14.03.2013, 03:18     Работа с дробями #6
Вот, qretik, в Вашем стиле
Кликните здесь для просмотра всего текста
На одно только обращу внимание. Русский язык в консоле подключается одной строкой (первая строка в main). И больше Вы по этому поводу не мучаетесь.

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
#include<iostream>
 
using namespace std;
 
struct Drob
{
    int a;
    int b;
};
 
Drob enterDrobData();
Drob addDrob(const Drob&, const Drob&);
Drob subDrob(const Drob&, const Drob&);
Drob mulDrob(const Drob&, const Drob&);
Drob divDrob(const Drob&, const Drob&);
 
void addDrob(const Drob&, const Drob&, const Drob&, const char);
//char* rus(char*);
 
void printResult(const Drob& d1, const Drob& d2, const Drob& d, const char znak);
 
void main (void)
{
    setlocale( LC_ALL, "rus" ); // рекомендуемый способ установления русского текста в консоли
    Drob d1, d2, dSum;
    d1 = enterDrobData();
    d2 = enterDrobData();
    dSum = addDrob(d1,d2);
    printResult(d1,d2,dSum, '+');
 
    printResult(d1,d2,subDrob(d1,d2), '-');
 
    printResult( d1, d2, mulDrob( d1, d2 ), '*' );
 
    printResult( d1, d2, divDrob( d1, d2 ), '/' );
}
 
Drob enterDrobData()
{
    Drob d;
    cout<<("vvedite xnachenie drobi: ")<<"\n";
    cout<<("chislitel:");
    cin>>d.a;
    cout<<("znamenatel: ")<<"\n";
    cin>>d.b;
    return d;
}
Drob addDrob(const Drob& d1, const Drob& d2)
{
    Drob d;
    d.a = d1.a*d2.b+d2.a*d1.b;
    d.b = d1.b*d2.b;
 
    return d;
}
 
Drob subDrob( const Drob &d1, const Drob &d2 )
{
    Drob d;
    d.a = d1.a*d2.b - d1.b*d2.a;
    d.b = d1.b*d2.b;
    return d;
}
 
Drob mulDrob( const Drob &d1, const Drob &d2 )
{
    Drob d;
    d.a = d1.a*d2.a;
    d.b = d1.b*d2.b;
    return d;
}
 
Drob divDrob( const Drob &d1, const Drob &d2 )
{
    Drob d;
    d.a = d1.a*d2.b;
    d.b = d1.b*d2.a;
    return d;
}
 
void printResult(const Drob& d1, const Drob& d2, const Drob& d, const char znak)
{
    printf("%d/%d %c %d/%d = %d/%d\n",d1.a,d1.b,znak,d2.a,d2.b,d.a,d.b);
    system("pause");
}
//char* rus(char* str)
//{
//  static char buf[40];
//  CharToOem(str,buf);
//  return buf;
//}
qretik
1 / 1 / 0
Регистрация: 24.10.2012
Сообщений: 132
14.03.2013, 03:29  [ТС]     Работа с дробями #7
Спасибо, многое прояснилось), не подскажете литературку по которой учились.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2013, 18:31     Работа с дробями
Еще ссылки по теме:

Работа с дробями C++
C++ Работа с десятичными дробями
C++ Задачка с дробями

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

Или воспользуйтесь поиском по форуму:
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1
14.03.2013, 18:31     Работа с дробями #8
Охотно.
1. Алгоритм Евклида C++ (нахождения НОД).
2. НОК - там
Если известен наибольший общий делитель, можно использовать его связь с НОК:
Добавлено через 28 минут
Ох я тупанул. Не в ту ветку ответил.

Я учился по первоисточнику, Бьерн Страуструп. Язык программирования С++, Боженька дал заботать большую часть Справочного руководства оттуда. Но книга довольно тяжелая.

Посмотрите курс C++ для начинающих, два или какой-нибудь такой видеокурс.

Добавлено через 11 часов 23 минуты
А вообще Литература C++
Yandex
Объявления
14.03.2013, 18:31     Работа с дробями
Ответ Создать тему
Опции темы

Текущее время: 20:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru