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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 317
#1

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

30.08.2010, 17:49. Просмотров 1851. Ответов 11
Метки нет (Все метки)

Десятичные дроби.
Нужно чтобы программа умела: делить, умножать, складывать и вычитать и построена обязательно на классах, код не мой и разобраться в нём довольно трудно, плюс "консоль" что не мой конёк....
Вот код который у меня есть, но он не работает. Помогите кто чем может.
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2010, 17:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа работы с дробями (консоль) (C++):

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

Создать класс для работы с дробями - C++
МОЖНО ТОЛЬКО НЕ КИТАЙСКИМ КОДОМ(хочу разобраться,не понимаю).заранее благодарен! Реализуйте класс Дробь. Необходимо хранить числитель...

Реализовать класс для работы с дробями - C++
Реализуйте класс Дробь. Необходимо хранить числитель и знаменатель в качестве переменных-членов. Реализуйте функции-члены для ввода данных...

Создать класс для работы с рациональными дробями - C++
1. Создать класс для работы с рациональными дробями (вида m/n). Закрытые данные класса: числитель, знаменатель, десятичный вариант дроби....

Создать класс для работы с обыкновенными дробями - C++
ЗАДАНИЕ : Создать класс для работы с обыкновенными дробями. Все операции, которые должны выполняться с дробями Код написала, но куча...

Создать класс Rational для работы с ра-циональными дробями - C++
Рациональная (несократимая) дробь представляется парой целых чисел (а, 6), где а — числитель, Ь — знаменатель. Создать класс Rational для...

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

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

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

Не по теме:

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

1
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");
}
воопщем не знаю, если чем то помог, значит всё круто.
чуть не забыл, остальные действия типа деления по аналогии сделать, сорри.)
1
_arty_
29 / 28 / 1
Регистрация: 10.07.2009
Сообщений: 317
31.08.2010, 05:28  [ТС] #12
Цитата Сообщение от silent_1991 Посмотреть сообщение
>arty<,
Ну вы даёте! Выдаёте малопонятный код, а на просьбу дать к нему пояснения жалуетесь, что код не ваш и вы о его работе даже представления не имеете. Ну а мы что в таком случае должны делать? Разбираться в коде, в котором вам разбираться не хочется? Советую вам разобраться в консольных программах (там всего-то разбираться что ввод-вывод, всё остальное так же) и написать программу самостоятельно.
Ничего страшного, разберусь обязательно с консолью, но пока оч надо именно с этим помочь, я ведь только начинаю....
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2010, 05:28
Привет! Вот еще темы с ответами:

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

Разработать класс, содержащий методы для работы с рациональными дробями - C++
Здравствуйте, помогите пожалуйста. Разработать класс, содержащий методы для работы с рациональными дробями ( сложение, вычитание,...

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

Программа на С++ с дробями 2 ошибки в коде - C++
2 ошибке в коде.Не могу найти.Среда Vusial Studio2008/Вот часть кода. void drob(int x, int y) { cout&lt;&lt;x&lt;&lt;&quot;\n-\n&quot;&lt;&lt;y; ...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
31.08.2010, 05:28
Ответ Создать тему
Опции темы

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