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

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

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

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

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

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

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

Создание экземпляр класса из другого класса - C++
Добрый день, форумчане. Помогите разобраться с такой плюсовенькой проблемой: есть 2 класса (назовем их A & B). Нужно в классе B запустить...

Создание класса - C++
Уважаемые программисты...помогите с созданием класса в С++. надо перегрузить основные функции класса...темы: комплексное число, дата,...

Создание класса/ - C++
Здраствуйте ув.! В рамках консольного приложения создать класс А с полями a и b и свойством с. Свойство - значение выражения над полями a...

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

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

создание класса - C++
Мне нужно разработать класс для представления понятия "контроллер видеомагнитофона"(обеспечивает програмное управление видеомагнитофоном,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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);
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,251
Записей в блоге: 1
Завершенные тесты: 1
12.11.2012, 12:37     Создание класса дробей #3
~OhMyGodSoLong~, назначение
C++
1
2
private:
    void cancel();
должно быть интуитивно понятно?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
12.11.2012, 12:40     Создание класса дробей #4
Ну, да. "Сократить дробь" :\ Надо ж куда-то пристроить алгоритм Евклида.

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

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2012, 14:01     Создание класса дробей
Еще ссылки по теме:

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

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

Создание класса - C++
Кто знает как реализовать эту прогу с помощью класса? Треугольник x1, y1, x2, y2, x3, y3 · печать (координат вершин) · площадь...

Создание класса - C++
Написать класс, который содержит защищённые данные х, у беззнакового целого типа. Для считывания этих данных написать общедоступные...

Создание Класса - C++
Создать класс &quot;Массив чисел&quot; в котором храниться массив с числами( double ) длинной 5.Сделать классу такие методы:1)конструктор который...


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

Или воспользуйтесь поиском по форуму:
lemegeton
2923 / 1352 / 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;
}
Yandex
Объявления
12.11.2012, 14:01     Создание класса дробей
Ответ Создать тему
Опции темы

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