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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 5.00
Maksimyshka
2 / 2 / 1
Регистрация: 10.04.2012
Сообщений: 133
#1

Создание класса дробей - C++

12.11.2012, 11:49. Просмотров 5086. Ответов 6
Метки нет (Все метки)

использовать только библиотеку иостриам
Реализовать в виде класса набор подпрограмм для выполнения следующих операций над обыкновенными дробями вида Р/Х (Р — целое, Х — натуральное):
сложение;
вычитание;
умножение;
деление;
сокращение дроби;
возведение дроби в степень м (м — натуральное);
функции, реализующие операции отношения (равно, не равно, больше или равно, меньше или равно, больше, меньше).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2012, 11:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание класса дробей (C++):

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

Построение описания класса, создание и уничтожение объектов этого класса - C++
Построить описание класса, содержащего информацию о почтовом адресе организации. Предусмотреть возможность раздельного изменения...

Создание объекта класса с полем являющимся объектом другого класса - C++
Bill a; cin>>a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у Spiska(Bill A,int,string,int) ...

Создание указателя типа базового класса на экземпляр производного класса - C++
Добрый день! Иногда видел коды, где создавался указатель типа базового класса на объект класса - наследника, для чего это может применяться?

Явное создание экземпляра класса и явная специализация шаблона класса - C++
Всем добрый день! Не могу разобраться - эти две технологии дают один и тот же результат? В каких случаях применять одно и другое?...

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

6
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
12.11.2012, 12:35 #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
class Rational {
    int numerator, denominator;
 
public:
    Rational(int number);
    Rational(int numerator, int denominator);
    Rational(const Rational &other);
 
    int getNumerator() const;
    int getDenominator() const;
    int sign() const;
 
    Rational& operator=(const Rational &other);
    Rational& operator+=(const Rational &other);
    Rational& operator-=(const Rational &other);
    Rational& operator*=(const Rational &other);
    Rational& operator/=(const Rational &other);
 
private:
    void cancel();
};
 
Rational operator+(const Rational &a, const Rational &b);
Rational operator-(const Rational &a, const Rational &b);
Rational operator*(const Rational &a, const Rational &b);
Rational operator/(const Rational &a, const Rational &b);
 
bool operator==(const Rational &a, const Rational &b);
bool operator!=(const Rational &a, const Rational &b);
bool operator< (const Rational &a, const Rational &b);
bool operator<=(const Rational &a, const Rational &b);
bool operator> (const Rational &a, const Rational &b);
bool operator>=(const Rational &a, const Rational &b);
 
Rational pow(const Rational &num, unsigned power);
 
std::ostream& operator<<(std::ostream &stream, const Rational &num);
0
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,388
Записей в блоге: 2
Завершенные тесты: 1
12.11.2012, 12:37 #3
~OhMyGodSoLong~, назначение
C++
1
2
private:
    void cancel();
должно быть интуитивно понятно?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
12.11.2012, 12:40 #4
Ну, да. "Сократить дробь" :\ Надо ж куда-то пристроить алгоритм Евклида.

Хотя, наверное, лучше назвать reduce() или там abbreviate().
0
Maksimyshka
2 / 2 / 1
Регистрация: 10.04.2012
Сообщений: 133
12.11.2012, 13:14  [ТС] #5
а можете всю программу сделать, а не только класс?
0
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,388
Записей в блоге: 2
Завершенные тесты: 1
12.11.2012, 13:24 #6
Посмотри здесь.

Не по теме:

Умение пользоваться поиском похоже какой-то привилегированный навык

0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
12.11.2012, 14:01 #7
Цитата Сообщение от Maksimyshka Посмотреть сообщение
использовать только библиотеку иостриам
Можешь сам реализовать функцию pow, и fabs и придумать, как обрабатывать деление на ноль. Тогда остальные библиотеки не понадобятся. Но думаю и так пойдет.

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>
#include <stdexcept>
#include <cstdlib>
#include <cmath>
 
class Fraction {
 private:
  int nominator;
  int denominator;
  void simplify() {
    if (denominator < 0) {
      nominator *= -1;
      denominator *= -1;
    }
    if (abs(nominator) < 2) return;
    std::cout << nominator << "/" << denominator << std::endl;
    int gcd = getGCD(std::abs(nominator), denominator);
    nominator /= gcd;
    denominator /= gcd;
  }
 public:
  Fraction(int nominator, int denominator) : nominator(nominator), denominator(denominator) {
    if (this->denominator == 0) throw std::logic_error("Division by zero.");
    simplify();
  }
  Fraction() : nominator(0), denominator(1) {}
  Fraction(const Fraction &other) : nominator(other.getNominator()), denominator(other.getDenominator()) {}
  Fraction(int value) : nominator(value), denominator(1) {}
  int getNominator() const {
    return nominator;
  }
  int getDenominator() const {
    return denominator;
  }
  double getValue() const {
    return static_cast<double>(getNominator()) / static_cast<double>(getDenominator());
  }
  int compareTo(const Fraction &other) const {
    return getNominator() * other.getDenominator() - getDenominator() * other.getNominator();
  }
  static int getGCD(int a, int b) {
    while (a != b)
      if (a > b) a -= b; else b -= a;
    return a;
  }
};
 
std::ostream &operator<<(std::ostream &stream, const Fraction &fraction) {
  return stream << fraction.getNominator() << "/" << fraction.getDenominator();
}
 
Fraction operator-(const Fraction &a) {
  return Fraction(-a.getNominator(), a.getDenominator());
}
 
Fraction operator+(const Fraction &a, const Fraction &b) {
  int commonDenominator = a.getDenominator() * b.getDenominator();
  int commonNominator = a.getNominator() * b.getDenominator() + b.getNominator() * a.getDenominator();
  return Fraction(commonNominator, commonDenominator);
}
 
Fraction operator-(const Fraction &a, const Fraction &b) {
  return a + -b;
}
 
Fraction operator*(const Fraction &a, const Fraction &b) {
  return Fraction(a.getNominator() * b.getNominator(), a.getDenominator() * b.getDenominator());
}
 
Fraction operator/(const Fraction &a, const Fraction &b) {
  return Fraction(a.getNominator() * b.getDenominator(), a.getDenominator() * b.getNominator());
}
 
bool operator==(const Fraction &a, const Fraction &b) { return a.compareTo(b) == 0; }
bool operator<(const Fraction &a, const Fraction &b) { return a.compareTo(b) < 0; }
bool operator>(const Fraction &a, const Fraction &b) { return a.compareTo(b) > 0; }
bool operator<=(const Fraction &a, const Fraction &b) { return a.compareTo(b) <= 0; }
bool operator>=(const Fraction &a, const Fraction &b) { return a.compareTo(b) >= 0; }
 
Fraction power(const Fraction &fraction, int power) {
  if (power < 0)
    return Fraction((int)pow(fraction.getDenominator(), -power), (int)pow(fraction.getNominator(), -power)); 
  else
    return Fraction((int)pow(fraction.getNominator(), power), (int)pow(fraction.getDenominator(), power)); 
}
 
int main(int argc, char **argv) {
    Fraction a(-4, 7), b(1, 3), c(0, 4);
    std::cout << c << " " << a * c << std::endl;
    std::cout << (a < b) << " " << power(Fraction(1, 4), -1) << std::endl;
}
1
12.11.2012, 14:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2012, 14:01
Привет! Вот еще темы с ответами:

Возможно ли создание объекта шаблонного класса в функции этого класса? - C++
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон контейнера (множество) с операциями...

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

Создание статической функции класса, которая принимает экземпляр этого же класса как объект - C++
Привет. Есть такой код class Model { public: Model(); Model(int verticesSize, int facesSize); ~Model(); static void...

создание объекта класса в методе этого же класса - C++
собственно вопрос. можно ли создавать объект класса в методе того же класса? насколько это правильно и как это можно сделать (если это...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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