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

Дроби!классы

27.01.2012, 19:43. Показов 1309. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
что исправить чтобы скомпилировалось?
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
// дроби.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;
class Fraction
{
  private:
    int m_Numerator;
    int m_Denominator;
    bool m_Corrupt;
  public:
    Fraction( int number, int denominator, bool positive );
    void parseFraction( const std::string &fractionString );
    void reduceFraction();
    std::string toString();
    // Getters
    int getNumerator() { return m_Numerator; }
    int getDenominator() { return m_Denominator; }
    bool getCorrupt() { return m_Corrupt; }
    // Setters
    void setNumerator( int numerator ) { m_Numerator = numerator; }
    void setDenominator( int denominator ) { m_Denominator = denominator; }
    // Own operators
    Fraction& operator + ( const Fraction &mulFraction );
    Fraction& operator - ( const Fraction &mulFraction );
    Fraction& operator * ( const Fraction &mulFraction );
    Fraction& operator / ( const Fraction &mulFraction );
};
int findNOD( int a, int b )
{
  while( b > 0)
  {
    int c = a % b;
    a = b; b = c;
  }
  return a;
};
int findNOK( int a, int b )
{
  return findNOD( a, b ) * a * b;
};
Fraction::Fraction( int numerator = 1, int denominator = 1, bool positive = true ) :
m_Numerator(numerator), m_Denominator(denominator), m_Corrupt(false)
{
  if( m_Denominator == 0 ) m_Corrupt = true;
  if( !positive && numerator >= 0 ) m_Numerator *= -1;
};
void Fraction::parseFraction( const std::string &fractionString )
{
  if( fractionString != "" )
  {
    bool positive; // Знак выражения
    unsigned int offset = 0; // На сколько символов сдвигать поиск служебных
    switch (fractionString[0])
    {
      // Проверяем знак, если он вообще существует, сдвигаем поиск на один символ вправо
      case '+': positive = true; offset = 1; break;
      case '-': positive = false; offset = 1; break;
      default: positive = true; offset = 0; break;
    }
    unsigned int slashPos = fractionString.find( "/" ); // Ищем вхождение "/" в строку
    unsigned int spacePos = fractionString.find(" "); // Ищем вхождение пробела, который разделяет целую часть и дробную.
    // Если пробел существует, значит в выражении есть целая часть дроби
    if( spacePos != std::string::npos )
    {
      int fullPart = atoi( fractionString.substr(offset, spacePos-offset).c_str() ); // Шаманим
      int tempNumerator = atoi( fractionString.substr(spacePos+1, slashPos-offset).c_str() ); // С бубном
      // Stay the same
      m_Denominator = atoi( fractionString.substr(slashPos+1, fractionString.size()).c_str() ); // Лучше даже не пытаться понять эти строки
      // 2 3/9 -> 21/9
      m_Numerator = fullPart * m_Denominator + tempNumerator; // Переводим всё выражение в неправильную дробь
    }
    else
    {
      m_Numerator = atoi( fractionString.substr(offset, slashPos-offset).c_str() ); // Если же целой части не существует
      m_Denominator = atoi( fractionString.substr(slashPos+1, fractionString.size()).c_str() ); // Просто парсим
    }
    if( !positive ) m_Numerator *= -1; // Ставим нужный знак числителю
    this->reduceFraction(); // Сокращаем дробь (реализуем далее)
  }
};
void Fraction::reduceFraction()
{
  if( !m_Corrupt )
  {
    int nod = findNOD( abs(m_Numerator), m_Denominator );
    this->setNumerator( m_Numerator / nod );
    this->setDenominator( m_Denominator / nod );
  }
};
std::string Fraction::toString()
{
  std::string formattedFraction;
  if( m_Numerator < 0 ) formattedFraction.append( "-" );
  formattedFraction.append( abs(m_Numerator) / m_Denominator );
  formattedFraction.append( " " );
  formattedFraction.append( abs(m_Numerator) % m_Denominator );
  formattedFraction.append( "/" );
  formattedFraction.append( m_Denominator );
};
Fraction& Fraction::operator * ( const Fraction &mulFraction )
{
  if( !this->m_Corrupt && !mulFraction.m_Corrupt )
  {
    this->setNumerator( m_Numerator * mulFraction.m_Numerator );
    this->setDenominator( m_Denominator * mulFraction.m_Denominator );
    this->reduceFraction();
  }
  return *this;
};
Fraction& Fraction::operator / ( const Fraction &mulFraction )
{
  if( !this->m_Corrupt && !mulFraction.m_Corrupt )
  {
    this->setNumerator( m_Numerator * mulFraction.m_Denominator );
    this->setDenominator( m_Denominator * mulFraction.m_Numerator );
    this->reduceFraction();
  }
  return *this;
};
Fraction& Fraction::operator - ( const Fraction &mulFraction )
{
  int relNumerator;
  int mulNumerator;
  if( !this->m_Corrupt && !mulFraction.m_Corrupt )
  {
    int unionDenominator = findNOK( m_Denominator, mulFraction.m_Denominator );
    relNumerator = m_Numerator * mulFraction.m_Denominator;
    mulNumerator = m_Denominator * mulFraction.m_Numerator;
    this->setNumerator( relNumerator - mulNumerator );
    this->setDenominator( unionDenominator );
    this->reduceFraction();
  }
  return *this;
};
Fraction& Fraction::operator + ( const Fraction &mulFraction )
{
  int relNumerator;
  int mulNumerator;
  if( !this->m_Corrupt && !mulFraction.m_Corrupt )
  {
    int unionDenominator = findNOK( m_Denominator, mulFraction.m_Denominator );
    relNumerator = m_Numerator * unionDenominator;
    mulNumerator = mulFraction.m_Numerator * unionDenominator;
    this->setNumerator( relNumerator * mulNumerator );
    this->setDenominator( unionDenominator );
    this->reduceFraction();
  }
  return *this;
};
 
int main()
{
 
  return 0;
};
Вот что пишет
Для всех выходных данных обновления не требуется.
1> дроби.cpp
1>c:\users\admin\documents\visual studio 2010\projects\дроби\дроби\дроби.cpp(53): error C2678: бинарный "=": не найден оператор, принимающий левый операнд типа "const std::string" (или приемлемое преобразование отсутствует)
1> c:\program files\microsoft visual studio 10.0\vc\include\xstring(707): может быть "std::basic_string<_Elem,_Traits,_Ax > &std::basic_string<_Elem,_Traits,_Ax>::o perator =(std::basic_string<_Elem,_Traits,_Ax> &&)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\xstring(761): или "std::basic_string<_Elem,_Traits,_Ax > &std::basic_string<_Elem,_Traits,_Ax>::o perator =(const std::basic_string<_Elem,_Traits,_Ax> &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\xstring(766): или "std::basic_string<_Elem,_Traits,_Ax > &std::basic_string<_Elem,_Traits,_Ax>::o perator =(const _Elem *)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\xstring(771): или "std::basic_string<_Elem,_Traits,_Ax > &std::basic_string<_Elem,_Traits,_Ax>::o perator =(_Elem)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> при попытке сопоставить список аргументов "(const std::string, const char [1])"
1>c:\users\admin\documents\visual studio 2010\projects\дроби\дроби\дроби.cpp(98): error C2664: std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::a ppend(const std::basic_string<_Elem,_Traits,_Ax> &): невозможно преобразовать параметр 1 из "int" в "const std::basic_string<_Elem,_Traits,_Ax> &"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Причина: невозможно преобразовать "int" в "const std::basic_string<_Elem,_Traits,_Ax>"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
1>c:\users\admin\documents\visual studio 2010\projects\дроби\дроби\дроби.cpp(100) : error C2664: std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::a ppend(const std::basic_string<_Elem,_Traits,_Ax> &): невозможно преобразовать параметр 1 из "int" в "const std::basic_string<_Elem,_Traits,_Ax> &"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Причина: невозможно преобразовать "int" в "const std::basic_string<_Elem,_Traits,_Ax>"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
1>c:\users\admin\documents\visual studio 2010\projects\дроби\дроби\дроби.cpp(102) : error C2664: std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::a ppend(const std::basic_string<_Elem,_Traits,_Ax> &): невозможно преобразовать параметр 1 из "int" в "const std::basic_string<_Elem,_Traits,_Ax> &"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Причина: невозможно преобразовать "int" в "const std::basic_string<_Elem,_Traits,_Ax>"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно


 Комментарий модератора 
Такие полотна ошибок - под кат!


Добавлено через 3 минуты
ошибку по бинарному "!=" на 53 строчке!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.01.2012, 19:43
Ответы с готовыми решениями:

Классы в C++. Переворот дроби.
Есть задачку не могу сделать помогите , нужно написать класс по такому принципу #include &lt;iostream&gt; using namespace std; ...

Для вычисления цепной дроби найти значение данной дроби при натуральном n
#include &lt;iostream&gt; using namespace std; unsigned long F(int n, int x) { float a = x / (n + x); return (a); } int...

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

5
32 / 32 / 2
Регистрация: 07.08.2011
Сообщений: 89
27.01.2012, 20:00
Для начала исправьте:
Строка 53:
string::empty
Замените на этот оператор.
Строки 98,100,102:
string::append
Вы подаете туда инт, а объединять можно только две строки. Преобразуйте число в строку, после этого делайте append, преобразовать например коммандой itoa(мне просто она нравится, способов много)
1
0 / 0 / 1
Регистрация: 04.04.2011
Сообщений: 15
27.01.2012, 20:42  [ТС]
Цитата Сообщение от Teravisor Посмотреть сообщение
Для начала исправьте:
Строка 53:
string::empty
Замените на этот оператор.
Строки 98,100,102:
string::append
Вы подаете туда инт, а объединять можно только две строки. Преобразуйте число в строку, после этого делайте append, преобразовать например коммандой itoa(мне просто она нравится, способов много)
Напиши пожалуйста подробно про 98 100 и 102 строку за первую спасибо!а то что-то не пойму!
0
32 / 32 / 2
Регистрация: 07.08.2011
Сообщений: 89
27.01.2012, 20:58
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
std::string Fraction::toString()
{
  std::string formattedFraction;
  char buffer[sizeof(int)*8+1];//больше этого числа символов ну никак не сможет быть. Можно уменьшить немного.
  if( m_Numerator < 0 ) formattedFraction.append( "-" );
  sprintf(buffer,"%d",abs(m_Numerator) / m_Denominator);//Записываем число в буфер.
  formattedFraction.append( buffer );
  formattedFraction.append( " " );
  sprintf(buffer,"%d",abs(m_Numerator) % m_Denominator);
  formattedFraction.append( buffer );
  formattedFraction.append( "/" );
  sprintf(buffer,"%d",m_Denominator);
  formattedFraction.append( buffer);
  return formattedFraction; //Отсутствие этой строчки не заметил. Нужна.
};
atoi к сожалению, не всеми компиляторами понимается, поэтому написал по стандарту.
Вроде должно работать.
1
0 / 0 / 1
Регистрация: 04.04.2011
Сообщений: 15
27.01.2012, 21:33  [ТС]
Цитата Сообщение от Teravisor Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
std::string Fraction::toString()
{
  std::string formattedFraction;
  char buffer[sizeof(int)*8+1];//больше этого числа символов ну никак не сможет быть. Можно уменьшить немного.
  if( m_Numerator < 0 ) formattedFraction.append( "-" );
  sprintf(buffer,"%d",abs(m_Numerator) / m_Denominator);//Записываем число в буфер.
  formattedFraction.append( buffer );
  formattedFraction.append( " " );
  sprintf(buffer,"%d",abs(m_Numerator) % m_Denominator);
  formattedFraction.append( buffer );
  formattedFraction.append( "/" );
  sprintf(buffer,"%d",m_Denominator);
  formattedFraction.append( buffer);
  return formattedFraction; //Отсутствие этой строчки не заметил. Нужна.
};
atoi к сожалению, не всеми компиляторами понимается, поэтому написал по стандарту.
Вроде должно работать.
у меня на 53 все равно выскакивает ошибка !напиши как надо!это ошибку не выдает!
0
32 / 32 / 2
Регистрация: 07.08.2011
Сообщений: 89
27.01.2012, 22:22
if( fractionString != "" )
заменить на
if( !fractionString.empty() )

Я думал, вы сообразили...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2012, 22:22
Помогаю со студенческими работами здесь

Непонятна тема (Классы содержащие другие классы, как данные члены )
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент) #include &lt;iostream&gt; class Point { public: void...

Программа по классам, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы
Нужно написать программу, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы. Реализовать её нужно в трех...

Как struct Queue и его операции превратить в классы, то есть нужно сделать тоже самое, но через классы
Как struct Queue и его операции превратить в классы, то есть нужно сделать тоже самое, но используя соотвественно классы И как...

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

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.)
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru