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

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

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

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

24.03.2013, 17:13. Просмотров 531. Ответов 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++ нужен тип целого числа для числа 19!= 121 645 100 408 832 000
Сумма (разность) цифр числа C++
Корень из целого числа. C++
Нахождение целого числа C++
Найти все дроби и их количество, знаменатель которых меньше заданного числа C++
C++ добавление к дроби целого числа
C++ Перевод перевода целого числа
Ввод целого числа C++
Из целого числа получить новое, состоящее из нечетных цифр числа (2315663 -> 3153) C++
Конструирование значения целого числа или числа с плавающей точкой по его дампу C++
C++ Найти для числа правильные дроби с заданным знаменателем N и положителеным числителем
Вычислить значение дроби (кажется дроби) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
}
Yandex
Объявления
24.03.2013, 17:31     Разность дроби и целого числа
Ответ Создать тему
Опции темы

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