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

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

Войти
Регистрация
Восстановить пароль
 
Trisha Ray
80 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 93
#1

Разность дроби и целого числа - C++

24.03.2013, 17:13. Просмотров 555. Ответов 3
Метки нет (Все метки)

Нужно перегрузить операции "-" и "=".

Конструкторы класса должны преобразовывать оба операнда в числовой формат обыкновенной дроби и метод, реализующий алгоритм Евклида.

Не могу понять, как сделать функции перегрузки.

Помогите, пожалуйста!

Код программы:

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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
 
using namespace std;
 
int evclide(int,int);
 
class Fraction
{
private: 
    int nom;
    int den;
public:
    Fraction (char*);
    Fraction (int n=0, int m=1):nom(n),den(m) {};
    Fraction operator - (const Fraction &b);
    Fraction operator = (const Fraction &c);
    operator char*();
    void reduce();
};
 
Fraction Fraction :: operator - (const Fraction &b)
{
}
 
Fraction Fraction::operator = (const Fraction &c)
{
    if(&c == this) return *this;
 
 
}
 
Fraction :: Fraction (char* s)
{
    char* p =strchr(s,'/');
 
    den=1;
 
    if(p!=NULL)
    {
        *(p++)='\0';
        den=atoi(p);
    }
 
    nom=atoi(s);
}
 
Fraction :: operator char*()
{
    static char s[32];
    sprintf(s,"%d/%d",nom,den);
    return s;
}
 
void Fraction :: reduce()
{
    int gmd = evclide(abs(nom),den);
 
    nom /= gmd;
    den /= gmd;
    return;
}
 
int evclide(int n, int m)
{
    int r=1;
 
    while(n!=0)
    {
        r=m%n;
        m=n;
        n=r;
    }
 
    return (m);
}
 
int main(int argc, char* argv[])
{
    if(argc<3)
        return(puts("Usage: enter nom/den + number "));
 
    Fraction a(argv[1]);
    Fraction b(argv[2]);
    Fraction c;
 
    a.reduce();
    c=a+b;
 
    cout << (char*)c << endl;
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2013, 17:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разность дроби и целого числа (C++):

добавление к дроби целого числа - C++
Подскажите пожалуйста, как реализовать: добавление к дроби целого числа выполняется по правилу сложения дробей (без сокращения) ¾ + 1 = 7/4.

Описать функцию DigitN(K, N) целого типа, возвращающую N-ю цифру целого положительного числа K - C++
Помогите выполнить задание. Описать функцию DigitN(K, N) целого типа, возвращающую N-ю цифру целого положительного числа K (цифры в...

Найти числа-близнецы: простые числа разность между которыми равна 2 - C++
Дано натуральное число n. Среди чисел n, n + 1, …, 2n найти все числа-близнецы: простые числа, разность между которыми равна 2.

Определить цифры целого числа (тип числа - целое без знака) - C++
Определить цифры целого числа( тип числа-целое без знака), вычислить сумму полученных цифр. Помогите ,пожалуйста.

Из целого числа получить новое, состоящее из нечетных цифр числа (2315663 -> 3153) - C++
Из целого числа получить новое, состоящее из нечетных цифр числа (2315663 -&gt; 3153) на DevC++. Заранее спасибо

Конструирование значения целого числа или числа с плавающей точкой по его дампу - C++
Как сконструировать значения целого числа(char, short int, long int) или числа с плавающей точкой(float,double) по его дампу(bin,oct,hex)??

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Shef4u
15 / 15 / 0
Регистрация: 31.10.2011
Сообщений: 116
24.03.2013, 17:18 #2
объявите функции для перегрузки как дружественные функции класса. так легче ИМХО. примеров объявления в интернете много
Trisha Ray
80 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 93
24.03.2013, 17:22  [ТС] #3
К сожалению, нельзя отходить от примера, таково условие((

Везде примеры на перегрузку просто двух чисел, а как мне объявить перегрузку на число которое мне возвратит функция reduce() - преобразованную дробь и обычный аргумент?

Fraction a(argv[1]);
Fraction b(argv[2]);
Fraction c;

a.reduce();
c=a+b;
Програмер_80лвл
15 / 15 / 1
Регистрация: 17.10.2012
Сообщений: 96
Записей в блоге: 1
24.03.2013, 17:31 #4
Цитата Сообщение от Trisha Ray Посмотреть сообщение
Конструкторы класса должны преобразовывать оба операнда в числовой формат обыкновенной дроби и метод, реализующий алгоритм Евклида.
Так Где собствено Конструкторы ??*
без них тебе никуда !!


еще давай ты прочитаеш для чего нужно перегружать = и - ?*
вот код который ты просил :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void Fraction::operator = (const Fraction &c)
{
c.nom=this->nom;
c.den=this->den;
}
// и все !!!
Fraction Fraction::operator - (const Fraction &c)
{
Fraction tmp;
tmp.nom=this->nom-c.nom;
tmp.den=this->den-c.den;
return tmp;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2013, 17:31
Привет! Вот еще темы с ответами:

нужен тип целого числа для числа 19!= 121 645 100 408 832 000 - C++
Нужно посчитать сумму цифр целого положительного числа. double summacifr(double chislo) { double summa=0; while(chislo) ...

Вычислить значение дроби (кажется дроби) - C++
Доброго времени суток, возникла проблема, на днях дали вот такое интересное задание, только вот сути его понять не могу, нужно написать...

Дана строка. Определить, представляет ли она собой запись целого числа или запись дробного числа - C++
Дана строка.Необходимо определить ,представляет ли она собой запись целого числа,записать дробного числа.Считайте ,что дробная часть...

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


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

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

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