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

Класс дробь состоит из 2 целых полей - C++

Восстановить пароль Регистрация
 
PK91
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 42
22.03.2013, 20:55     Класс дробь состоит из 2 целых полей #1
Помогите пожалуйста решить задачу. Начало записал, а как дальше делать не знаю!!!!

Класс дробь состоит из 2 целых полей, числителя и знаменателя. Реализовать методы выделения дробной части (9/4 – >0,25 вещественный результат) и метод сложения дробей, без сокращения (1/5 +2/3 -> 13/15 – результат новая дробь).

Код:
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
#include<stdio.h>
#include<conio.h>
#include <locale.h>
 
class Drob
 {
   public:
   int Drobchast();  
   void Put(int ch,int z); 
   int Getchislit();              
   int Getznam();               
  Drob Summ (Drob a,Drob b);  
   private:
   int    chislit;
   int    znam;
 };
 
 
 
void Drob::Put(int c,int z)
{
  chislit=c;
  znam=z;
}
 
int Drob::Getchilit()
{
 return chislit;
}
 
int Drob::Getznam()
{
  return znam;
}
 
 int Drob::Drobchast()  
 {
  return modf(chislit,znam); 
}
 
Drob Drob::Summ(Drob a,Drob b) 
{
 Комментарий модератора 
Создавайте тему в соответствующем разделе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
22.03.2013, 22:28     Класс дробь состоит из 2 целых полей #2
1/5 +2/3 -> 13/15 - потипу:
C++
1
2
        chsl=1.chsl*2.znam+1.znam*2.chsl;
        znam=1.znam*2.znam;
вроде так
PK91
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 42
22.03.2013, 22:42  [ТС]     Класс дробь состоит из 2 целых полей #3
Спасибо!!! Только там должны быть реализованы методы: метод инициализации Init; ввод с клавиатуры Read; вывод на экран Display.
Поля класса должны быть закрытыми private, доступ к ним при необходимости осуществляется через открытые методы public.
И нужно добавить две функции для обработки объектов введенных классов. Вторую функцию назвать add, у нее два аргумента типа названного класса и она возвращает объект того же класса. В main продемонстрировать работу с объектами данного класса и их методами. Не знаю, как сделать!!!
Kins
 Аватар для Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
22.03.2013, 22:45     Класс дробь состоит из 2 целых полей #4
сложение тут реализовано:

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
using namespace std;
 
////////////////////////////////////////////////////////////////
class fraction
{
private:
    int chsl;
    int znam;
public:
    static char ch;
    fraction(){chsl=0, znam=0;}
    void get()
    {cout <<"Введите числитель и знаменатель дроби \"a/b\": "; cin >>chsl >>ch >>znam;}
    void summ(fraction f, fraction ff)
    {
        chsl=f.chsl*ff.znam+f.znam*ff.chsl;
        znam=f.znam*ff.znam;
    }
    void show()
    {cout <<"Результат сложения равен: " <<chsl <<ch <<znam <<endl;}
};
////////////////////////////////////////////////////////////////
char fraction::ch='/';
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "");
    char ch;
    fraction f1, f2, f3;
    do{
        ch=_getche();
        f1.get(), f2.get();
        f3.summ(f1, f2);
        f3.show();
        cout <<"\nЕще раз? (y/n): "; cin >>ch;
    }while(ch!='n');
    return 0;
}
Mindz
 Аватар для Mindz
7 / 7 / 1
Регистрация: 31.01.2010
Сообщений: 51
22.03.2013, 23:04     Класс дробь состоит из 2 целых полей #5
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
#ifndef FRACTION_H
#define FRACTION_H
 
#include <math.h>
 
class Fraction
{
 private:
         int Numerator,   //числитель
             Denominator; //знаминатель
 
 public:
         Fraction() : Numerator(0), Denominator(0) { }
         Fraction( const int &_N, const int &_D ) : Numerator(_N), Denominator(_D) { }
         Fraction( const Fraction &_F ) { *this = _F; }
 
         Fraction& operator =( const Fraction &_F )
         {
           if ( this != &_F ) {
               Numerator = _F.Numerator;
               Denominator = _F.Denominator;
           } else return *this;
         }
 
         Fraction operator +( Fraction &_f ) const
         {
           if ( Denominator == _f.Denominator ) return Fraction( Numerator + _f.Numerator, Denominator );
               else if ( Denominator % _f.Denominator == 0 ) return Fraction( Numerator + ( _f.Numerator * (Denominator/_f.Denominator) ), Denominator );
                        else if ( _f.Denominator % Denominator == 0 ) return Fraction( ( Numerator * (_f.Denominator/Denominator) ) + _f.Numerator, _f.Denominator );
                                 else return Fraction( (Numerator * _f.Denominator) + (_f.Numerator * Denominator), _f.Denominator * Denominator );
         }
 
         inline void setNumerator( const int &_N ) { Numerator = _N; }
         inline void setDenominatir( const int &_D ) { Denominator = _D; }
         inline int getNumerator() const { return Numerator; }
         inline int getDenominator() const { return Denominator; }
 
         double FractAlloc() const
         {
           double _fractPart, _part;
 
           _fractPart = modf( (double)Numerator / (double)Denominator, &_part );
 
           return _fractPart;
         }
};
 
#endif // FRACTION_H
Добавлено через 17 минут
Для удобного вывода всей этой шляпы можете добавить в тело определения класса следующий код в не закрытую часть(public)
C++
1
2
3
4
friend std::ostream & operator <<( const std::ostream &_out, const Fraction &_f )
{
   _out << _f.Numerator << " // " << _f.Denominator << std::endl;
}
PK91
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 42
23.03.2013, 14:29  [ТС]     Класс дробь состоит из 2 целых полей #6
Спасибо!!! Только программа ошибки выдаёт. А нельзя её проще записать? Просто многого ещё не изучали. Что-то вроде этого:
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
#include<stdio.h>
#include<conio.h>
#include <locale.h>
 
class Drob
 {
   public:
   int Drobchast();  
   void get(int ch,int zn); 
   int Getchsl();              
   int Getznam();               
  Drob Summ (Drob a,Drob b);  
   private:
   int    chsl;
   int    znam;
 };
 
void Drob::get(int ch,int zn)
{
  chsl=ch;
  znam=zn;
}
 
int Drob::Getchsl()
{
 return chsl;
}
 
int Drob::Getznam()
{
  return znam;
}
 
 int Drob::Drobchast()  
 {
  return ( (double)chsl / (double)znam); 
}
 
Drob Drob::Summ(Drob a,Drob b) 
{
  Drob c;     
  c.chsl=a.chsl*b.znam+a.znam*b.chsl;
  c.znam=a.znam*b.znam;
  return c;
}
 
int main(int argc, char* argv[])
{
 setlocale(0,"Russian");
 int zn,ch;
 Drob x,y,z;
 do
 {
     ch=_getche();
     x.get(), y.get();
     z.Summ(x, y);
     z.show();
     printf ("\nГ…Г№Вё Г°Г*Г§ (y/n): (%d%d)",ch,zn);
    }while(ch!='n');
    return 0;
}
Добавлено через 1 минуту
Спасибо!!! Изучаем язык недавно, нельзя как-то более просто её написать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2013, 14:38     Класс дробь состоит из 2 целых полей
Еще ссылки по теме:

Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») C++
Класс, для полей которого нужно использовать класс C++
Класс дробь, сокращение дробей C++

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

Или воспользуйтесь поиском по форуму:
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
23.03.2013, 14:38     Класс дробь состоит из 2 целых полей #7
Цитата Сообщение от PK91 Посмотреть сообщение
Только программа ошибки выдаёт.
Mindz предложил не программу, а модуль для работы с дробями.

Цитата Сообщение от PK91 Посмотреть сообщение
Изучаем язык недавно, нельзя как-то более просто её написать?
Что конкретно вам не понятно? Вам не нравятся интуитивно-понятные имена переменных?
Yandex
Объявления
23.03.2013, 14:38     Класс дробь состоит из 2 целых полей
Ответ Создать тему
Опции темы

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