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

Программа работы с дробями (консоль) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
30.08.2010, 17:49     Программа работы с дробями (консоль) #1
Десятичные дроби.
Нужно чтобы программа умела: делить, умножать, складывать и вычитать и построена обязательно на классах, код не мой и разобраться в нём довольно трудно, плюс "консоль" что не мой конёк....
Вот код который у меня есть, но он не работает. Помогите кто чем может.
P.S. Код был написан на MS Visual C++в отличие от привычного мне "Borland'a/CodeGear

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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;
int n1,n2;
int prizn=0;
int k=0;
class Drob
{
private:
    int chisl;
    int znam;
    char ch;
 
public:
    Drob(int a,int b)
    {
        chisl=a;
        znam=b;
    }
    Drob(int a)
    {
        chisl=a;
        znam=1;
    }
    Drob()
    {
        chisl=0;
        znam=1;
    }
//Drob(): ch('/')
//{}
 
    
void set()
{   
    chisl=::n1;
    znam=::n2;
    if (znam<=chisl) 
    {
    znam=1;
    ::prizn=1;
    }
}
void oper(Drob d1, Drob d2)
{   chisl = d1.chisl*d2.znam+d1.znam*d2.chisl;
    znam = d1.znam*d2.znam;
}
 
Drob istream operator >>(istream&vvod, Drob &t)
    {vvod>>t.a>>t.b;
    return vvod;}
 
Drob operator + (Drob &dr)
{
       int k,m;
       if ((chisl==0)&(znam==0)) return dr; else 
           if ((dr.chisl==0) & (dr.znam==0))
           {
               dr.chisl=chisl;
               dr.znam=znam;
               return dr;
           }
       if (znam!=dr.znam)
       {
           m = znam*dr.znam;
           k = chisl*dr.znam+dr.chisl*znam;
       } else
       {
           m = znam;
           k=chisl+dr.chisl;
       }
       dr.chisl=k;
       dr.znam=m;
       return dr;
       }
//Drob operator + (const Drob & t)const
//{drob res;
//res.a=a*t.b+b*t.a;
//res.b=b*t.b;
//res.Socr();
//return res;}
 
//Drob operator + (Drob&d1)
//{Float i,j;
//if (d1.znam!=d2.znam)
//{j=d1.znam*d2.znam;
//i=d1.chisl*d2.znam+d1.znam*d2.chisl;}
//else {j=d1.znam;
//i=d1.chisl+d2.chisl;}
//d1.chisl=i;
//d1.znam=j;
//return d1}
 
void display()
 
{   if (!::k==0) cout<<"\n"<<k<<"-ya drob: "<<chisl<<"/"<<znam<<endl; 
    else cout<<"\nResultat: "<<chisl<<"/"<<znam<<endl;
}
    
void sokr();
 
};
 
 
//void Drob::sokr()
//{
//int tchisl, tznam, gcd;
//
//tchisl = chisl;              
//tznam = znam;                
//
//
//if(tchisl==0)
//
//{cout<<"Result: 0";getch(); exit(0);}  
//if(tznam==0)
//{cout<<"Rong znamenatel!";getch(); exit(1);}  
//                                              
//if(tchisl>1)
//{ for(int i=chisl; i>=2; i--)
//  {   if((chisl%i==0) && (znam%i==0))
//      {gcd=i;break;}
//      else {gcd=1;}
//  }
//}
//else gcd=1;
//chisl=chisl/gcd;
//znam=znam/gcd;
//}
int main()
{
Drob dr1, dr2, dr3;
 
//dr3=dr1+dr2;
//dr3.display();
//dr1=Drob(1,2);
//dr1.display();
//dr2=Drob(1,3);
//dr2.display();
//dr3=dr1+dr2;
//dr3.display();
cin >> dr1 cin >> dr2;
getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2010, 17:49     Программа работы с дробями (консоль)
Посмотрите здесь:

C++ Программа на С++ с дробями 2 ошибки в коде
Создать класс для работы с рациональными дробями C++
Работа с дробями C++
Работа с дробями C++
C++ Работа с дробями
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
30.08.2010, 19:14     Программа работы с дробями (консоль) #2
Будь добр, подчисти сперва код.
Потом скажи, что именно не так работает, т.е. как оно работает и как хотелось бы.
И пару замечаний:
Вставляй хоть какие-то комменты: мол здесь я делаю то, здесь сё.
Глобальные переменные должны иметь осмысленные названия.
Если глобальные переменные не планируется изменять, сделай их const.
Глобальные переменные используються только в классе, засунь их соответсвенно в этот класс.
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
30.08.2010, 19:42  [ТС]     Программа работы с дробями (консоль) #3
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
Будь добр, подчисти сперва код.
Потом скажи, что именно не так работает, т.е. как оно работает и как хотелось бы.
И пару замечаний:
Вставляй хоть какие-то комменты: мол здесь я делаю то, здесь сё.
Глобальные переменные должны иметь осмысленные названия.
Если глобальные переменные не планируется изменять, сделай их const.
Глобальные переменные используються только в классе, засунь их соответсвенно в этот класс.
Так вот знать бы что не работает, по сути это калькулятор на классах да ещё и в консоли... НЕ были бы условия таковыми, написал бы обычный калькулятор и не парился бы, C++ я только начинаю тем более изучать....
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
30.08.2010, 20:09     Программа работы с дробями (консоль) #4
Ты предлагаешь разбираться в коде, где названия переменных ни о чём не говорят, комментариев нету и ещё куча закомментированого кода.
Навскидку, посмотри, как оглашается operator >>
Между двумя cout должна быть точка с запятой.
Не лепи в одну строку несколько команд, в т.ч. открывающуюся скобку и следующую за ней команду.
Mencey
 Аватар для Mencey
145 / 92 / 7
Регистрация: 22.07.2010
Сообщений: 424
30.08.2010, 20:26     Программа работы с дробями (консоль) #5
В коде разбирусь помогу.

Добавлено через 5 минут
Извиняюсь но что-то не могу разобраться. Я ещё в C++ начинающий многое просто не знаю.
Но что конкретно должна делать программа?
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
30.08.2010, 20:42  [ТС]     Программа работы с дробями (консоль) #6
Цитата Сообщение от Mencey Посмотреть сообщение
В коде разбирусь помогу.

Добавлено через 5 минут
Извиняюсь но что-то не могу разобраться. Я ещё в C++ начинающий многое просто не знаю.
Но что конкретно должна делать программа?
Как я уже сказал код не мой, а значит писал не я, а значит представления о чужом коде у меня слабые, да ещё и в консоли я не силён, программа что то на подобии калькулятора дробей, должна уметь складывать, умножать и вычитать дроби. Построена на классах (что для калькулятора дробей слишком мудрено), код не ахти, я и сам знаю, в "сетах" одни переменные а в коде показывают совсем другие, что весьма затрудняет читабельность кода, но разобраться бы хотелось, заранее благодарен!
Mencey
 Аватар для Mencey
145 / 92 / 7
Регистрация: 22.07.2010
Сообщений: 424
30.08.2010, 20:53     Программа работы с дробями (консоль) #7
>arty<, тебе именно в этом коде разбораться надо или решить какуето задачу если решить задачу то лучше самому написать код(с нуля).
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
30.08.2010, 21:01     Программа работы с дробями (консоль) #8
>arty<, вот работающий: Re: Разработка класса Tdrob
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
30.08.2010, 21:04     Программа работы с дробями (консоль) #9
>arty<,
Ну вы даёте! Выдаёте малопонятный код, а на просьбу дать к нему пояснения жалуетесь, что код не ваш и вы о его работе даже представления не имеете. Ну а мы что в таком случае должны делать? Разбираться в коде, в котором вам разбираться не хочется? Советую вам разобраться в консольных программах (там всего-то разбираться что ввод-вывод, всё остальное так же) и написать программу самостоятельно.
Mencey
30.08.2010, 21:21
  #10

Не по теме:

Цитата Сообщение от Mencey Посмотреть сообщение
>arty<, тебе именно в этом коде...
Извиняюсь что сказал "тебе".

bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
30.08.2010, 22:02     Программа работы с дробями (консоль) #11
Вот, задача из контрольной, ввод с консоли сам допишешь,
для сокращения используется евклидовский алгоритм "наибольший общий делитель"
думаю знаком с ним, на всякий пожарный вот http://ru.wikipedia.org/wiki/%D0%9D%...B5%D0%BB%D1%8C
std:: по желанию, у нас можно было просто пространсво имен написать.
оператор << я оставил, может тоже пригодится
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
#include <iostream>
 
using namespace std;
 
class Fraction
{
    int n;
    int d;
    int GCD(int a, int b);
 
public:
    class FractionExceptionDenominatorNull {};
 
    // int->Fraction
    Fraction( int numerator, int denominator = 1  );
    
    // левый аргумент имеет тип ostream, -> friend нужен
    friend ostream& operator<<(ostream& os, const Fraction& br);
    
    // 'int' + 'Fraction'  -> friend нужен
    friend Fraction operator+( const Fraction& left, const Fraction& right);
    
    
    //оба параметра имеют тип Fraction ->   
    //friend ненужен но возможен
    Fraction operator*(const Fraction& right)
    {
        return Fraction( n * right.n, d * right.d);
    }
};
 
 
Fraction::Fraction( int numerator, int denominator  ) 
{
    if(denominator == 0)
            throw FractionExceptionDenominatorNull();
        n = numerator;
        d = denominator;
        //знак только у числителя записываем
        if( d < 0 )
        {
            n = -n;
            d = -d;
        }
        //сокращаем
        int gcd = GCD(n, d);
        n = n / gcd;
        d = d / gcd;
    
}
ostream& operator<<(ostream& os, const Fraction& fr)
{
    return os << fr.n << "/" << fr.d << " ";
}
Fraction operator+(const Fraction& left, const Fraction& right)
{
    return Fraction( left.n * right.d + right.n * left.d, left.d * right.d );
}
 
 
 
// greatest common divisor - Euklid (iterativ):
int Fraction::GCD(int a, int b)
{
    if( a == 0 && b == 0 )
        throw "Exception в GCD: a и b == 0";
    a = abs(a);
    b = abs(b);
    int help;
    while( b > 0 )
    {
        help = a % b;
        a = b;
        b = help;
    }
    return a;
}
тестировалось этими штуками
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include "fraction.h"
 
using namespace std;
 
void main()
{
    Fraction a( 5 );
    Fraction b( 1, 2 );
    Fraction c( 1, 4 );
    Fraction d( 115, -391 );
    Fraction e( -37*234, -37*432 );
    cout << a << b << c << d << e << endl;
    cout << b + c << endl;
    cout << 8 + e << endl;
    cout << d * e << endl;
    
    //system("pause");
}
воопщем не знаю, если чем то помог, значит всё круто.
чуть не забыл, остальные действия типа деления по аналогии сделать, сорри.)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2010, 05:28     Программа работы с дробями (консоль)
Еще ссылки по теме:

C++ Написать программу, демонстрирующую работу с классом для работы с рациональными дробями
Создать класс Rational для работы с ра-циональными дробями C++
Не выводит в консоль результаты работы программы C++

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

Или воспользуйтесь поиском по форуму:
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 316
31.08.2010, 05:28  [ТС]     Программа работы с дробями (консоль) #12
Цитата Сообщение от silent_1991 Посмотреть сообщение
>arty<,
Ну вы даёте! Выдаёте малопонятный код, а на просьбу дать к нему пояснения жалуетесь, что код не ваш и вы о его работе даже представления не имеете. Ну а мы что в таком случае должны делать? Разбираться в коде, в котором вам разбираться не хочется? Советую вам разобраться в консольных программах (там всего-то разбираться что ввод-вывод, всё остальное так же) и написать программу самостоятельно.
Ничего страшного, разберусь обязательно с консолью, но пока оч надо именно с этим помочь, я ведь только начинаю....
Yandex
Объявления
31.08.2010, 05:28     Программа работы с дробями (консоль)
Ответ Создать тему
Опции темы

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