Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 5

Исправить ошибки в классе Fraction

15.04.2013, 12:57. Показов 1065. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется создать класс Fraction с двумя закрытыми переменными: числитель и знаменатель дроби (целые числа). Написать методы:
1. Конструктор без параметров
2. Перегрузите оператор =.
3. Перегрузите операторы - и / для сложения и умножения дробей.
4. Организуйте ввод и вывод дроби, перегрузив операторы << и >> для потокового ввода/вывода.
Используя класс Fraction написать программу, которая запрашивает у пользователя две обыкновенные дроби, вычисляет их разность и частное и выводит результаты на консоль.

В общем то все это я сделал, но при делении программа делит результат разности на вторую дробь, в чем проблема - никак не разберусь. Также требуется содержать это все в трех файлах: функция main, сам класс с прототипами методов, файл с описанием методов и операторов.

1) main
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "Fraction.h"
int main()
{
    setlocale (LC_ALL, "Russian");
    Fraction a,b;
    cout << "Введите дробь 1:"; 
    cin>>a;
    cout << "Введите дробь 2:";
    cin>>b;
    cout<<"Разность: "<<a-b<<endl;
    cout<<"Частное: " <<a/b<<endl;
}
2) класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
#include <iostream>
using namespace std;
class Fraction
{
private: int n,d;
public:
    
    Fraction();
    Fraction& operator=(Fraction& x);
    Fraction& operator-(Fraction& v);
    Fraction& operator/(Fraction& u);
    friend ostream& operator << (ostream& out, Fraction &f);
    friend istream& operator >> (istream& in, Fraction &f);
};
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
#include "Fraction.h"
 
 
Fraction::Fraction(): n(0),d(0) {}
Fraction& Fraction::operator=(Fraction& x)
{
n = x.n;
d = x.d;
return *this;
}
Fraction& Fraction::operator-(Fraction& v)
 {
    
n= n*v.d-d*v.n;
d= d*v.d;
return *this;
 
}
 Fraction operator-(Fraction& n,Fraction& d)
{
    return Fraction(n) - d; 
};
 Fraction& Fraction::operator/(Fraction& u)
  {
      n=n*u.d;
      d=d*u.n;
      return *this;
  }
  Fraction operator/(Fraction& n,Fraction& d)
{
    return Fraction(n) / d; 
};
    ostream& operator << (ostream& out, Fraction &f)
{
out<<f.n<<'/'<<f.d;
return out;
}
    istream& operator >> (istream& in, Fraction &f)
{
char ch;
in>>f.n>>ch>>f.d;
return in;
 
}
Помогите пожалуйста, завтра сдавать
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2013, 12:57
Ответы с готовыми решениями:

Помогите исправить ошибки в классе
Здравствуйте. Наконец то дописываю класс, но опять столкнулся с кое какими проблемами. Задание: написать класс очередь через массив. Вот...

Помогите исправить ошибки в классе
Здравствуйте. Помогите пожалуйста исправить ошибки. Их очень много, но они однотипные. Подскажите как исправить. Это должен быть класс, с...

Нужно исправить ошибки в классе комплексных чисел
Мой мозг породил нечто ужасное к ночи, и оно не желает работать. Задание из рода &quot;Бред обыкновенный&quot;. Надо исправить ошибки, а...

2
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
15.04.2013, 22:06
Fraction::Fraction(): n(0),d(0) {}
Исправьте знаменатель на 1(на 0 делить нельзя).
Fraction& operator=(Fraction& x);
Fraction& operator-(Fraction& v);
Fraction& operator/(Fraction& u);
friend ostream& operator << (ostream& out, Fraction &f);
friend istream& operator >> (istream& in, Fraction &f);
C++
1
2
3
4
5
Fraction& operator=(const Fraction& x);
Fraction  operator-(const Fraction& v) const;
Fraction  operator/(const Fraction& u) const;
friend std::ostream& operator << (std::ostream& out, const Fraction& f);
friend std::istream& operator >> (std::istream& in, Fraction& f);
Операторы - и / должны возвращать временный объект, а не менять данные того объекта, который их вызывает(как это сделано у вас), например:
C++
1
2
3
4
5
6
7
Fraction Fraction::operator-(const Fraction& v) const
{
    Fraction t;           // временный объект
    t.n = n*v.d-d*v.n;
    t.d = d*v.d;
    return t;
}
Fraction operator-(Fraction& n,Fraction& d)
Fraction operator/(Fraction& n,Fraction& d)
Это не нужно.

Добавлено через 1 минуту
Ну и проверку деления на 0 тоже не помешало бы сделать.
0
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 5
16.04.2013, 13:07  [ТС]
Спасибо огромное, а проверка деления на 0 (создание исключения) - это уже следующее задание, постараюсь сделать его сам
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2013, 13:07
Помогаю со студенческими работами здесь

Исправить ошибки в классе "Список строк"
Построить класс СПИСОК СТРОК со свойствами: кол-во строк, динамический массив строк.Конструктор следует определить с одним параметром...

Найти ошибки в коде и исправить эти ошибки (Наследование)
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного списков: list.h (inline) #pragma once class list...

Найти ошибки в коде и исправить эти ошибки - C++
Судя по вываливающейся ошибки, идет двойное освобождение памяти. У самого не получается отловить откуда. A.h #pragma once ...

Найти ошибки в коде и исправить эти ошибки
Есть у меня вот такой код: #include &lt;iostream&gt; using namespace std; class A{ private: int* a; size_t size_; ...

Ошибки в шаблонном классе
Добрый день. Реализовал класс динамического массива. При проверке его работы столкнулся с ошибками, которые мне пока не удаётся исправить....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru