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

Ошибки в программе - C++

Восстановить пароль Регистрация
 
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
16.01.2013, 12:08     Ошибки в программе #1
rational.h

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
#define _Rational_h_
#include <iostream>
 
using namespace std;
int nod(int p, int q) {
  if (p < 0) p = -p;
  if (q < 0) q = -q;  
  while (p != 0 && q != 0)
    if (p >= q)
      p %= q;
    else
      q %= p;
  return p + q;
}
 
class Rational {
 public:
  Rational() : numerator_(0), denominator_(1) {}
  Rational(int number) : numerator_(number), denominator_(1) {}
  Rational(int numerator, int denominator)
    : numerator_(numerator), denominator_(denominator) {
    optimize_();
  }
  int getNumerator() const { return numerator_; }
  int getDenominator() const { return denominator_; }
 private:
  void optimize_() {
    int nod_ = nod(numerator_, denominator_);
    numerator_ /= nod_;
    denominator_ /= nod_;
    if (denominator_ < 0) {
      numerator_ = -numerator_;
      denominator_ = -denominator_;
    }
  }
  int numerator_;
  int denominator_;
};
 
std::ostream &operator<<(std::ostream &stream, const Rational &number) {
  return stream << number.getNumerator() << "/" << number.getDenominator();
}
 
Rational operator+(const Rational &p, const Rational &q) {
  return Rational(p.getNumerator() * q.getDenominator() +
    q.getNumerator() * p.getDenominator(),
    p.getDenominator() * q.getDenominator());
    
}
 
Rational operator-(const Rational &p, const Rational &q) {
  return Rational(p.getNumerator() * q.getDenominator() -
    q.getNumerator() * p.getDenominator(),
    p.getDenominator() * q.getDenominator());
}
 
Rational operator*(const Rational &p, const Rational &q) {
  return Rational(p.getNumerator() * q.getNumerator(),
    p.getDenominator() * q.getDenominator());
}
 
Rational operator/(const Rational &p, const Rational &q) {
  return Rational(p.getNumerator() * q.getDenominator(),
    p.getDenominator() * q.getNumerator());
}
main.cpp

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
#include "rational.h"
#include <iostream>
 
using namespace std;
int main() 
{
setlocale(LC_ALL,"russian");
Rational p, q;
Rational x1(5);
Rational x2(2.3);
Rational x3(3);
Rational x4(1);
Rational x5(1.5);
cin >> p;
cin >> q;
  std::cout <<"-p = " << "-" << p << std::endl;
  std::cout <<"1/p = " << x4/p << std::endl;
  std::cout << "p + q = " << (p + q) << std::endl;
  std::cout << "p - q = " << (p - q) << std::endl;
  std::cout << "p * q = " << (p * q) << std::endl;
  std::cout << "p / q = " << (p / q) << std:: endl;
  std::cout << "(x1*p)+(x2*q) = " << (x1*p)+(x2*q) << std:: endl;  
  std::cout << "(x3+(p*q))/(p+(x4-q)) = " << (x3+(p*q))/(p+(x4-q)) << std:: endl;  
  std::cout << "x4/(p+(x5*q)) = " << x4/(p+(x5*q)) << std:: endl;  
system("pause");
}
ошибки

Код
1>c:\documents and settings\gnizdilo.us\мои документы\visual studio 2010\projects\zadacha 1.2\zadacha 1.2\main.cpp(10): warning C4244: аргумент: преобразование "double" в "int", возможна потеря данных
1>c:\documents and settings\gnizdilo.us\мои документы\visual studio 2010\projects\zadacha 1.2\zadacha 1.2\main.cpp(13): warning C4244: аргумент: преобразование "double" в "int", возможна потеря данных
1>c:\documents and settings\gnizdilo.us\мои документы\visual studio 2010\projects\zadacha 1.2\zadacha 1.2\main.cpp(14): error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" (или приемлемое преобразование отсутствует)
1>          c:\program files\microsoft visual studio 10.0\vc\include\istream(1053): может быть "std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &&,signed char *)"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2013, 12:08     Ошибки в программе
Посмотрите здесь:

Ошибки в программе C++
C++ Ошибки в программе
Ошибки в программе C++
Ошибки в программе C++
Ошибки в программе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
16.01.2013, 12:20     Ошибки в программе #2
Цитата Сообщение от yulla Посмотреть сообщение
Rational p, q;

cin >> p;
cin >> q;
Для этого класса нужно перегрузить операцию ввода
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
16.01.2013, 13:13  [ТС]     Ошибки в программе #3
v.a.l.i.d, я сейчас сама это поняла... а как это правильно сделать? немного непонятно)
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
16.01.2013, 13:27     Ошибки в программе #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Rational {
    friend std::istream &operator>>(std::istream &stream, Rational &number);
 public:
 
 ...
 
}
 
std::istream &operator>>(std::istream &stream, Rational &number)
{
    std::cout << "Enter numerator: ";
    stream >> number.numerator;
    
    std::cout << "Enter denominator: ";
    stream >> number.denominator;
 
    return stream;
}
Вроде так.
Но я могу ошибаться. Сейчас сам эту тему учу.
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
16.01.2013, 14:24  [ТС]     Ошибки в программе #5
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Rational {
    friend std::istream &operator>>(std::istream &stream, Rational &number);
 public:
 
 ...
 
}
 
std::istream &operator>>(std::istream &stream, Rational &number)
{
    std::cout << "Enter numerator: ";
    stream >> number.numerator;
    
    std::cout << "Enter denominator: ";
    stream >> number.denominator;
 
    return stream;
}
Вроде так.
Но я могу ошибаться. Сейчас сам эту тему учу.
куча ошибок сразу) Наверное, все-таки не то...

Добавлено через 4 минуты
ошибки

c:\users\1\documents\visual studio 2010\projects\98765\98765\rational.h(43): error C2039: numerator: не является членом "Rational"
1> c:\users\1\documents\visual studio 2010\projects\98765\98765\rational.h(16): см. объявление "Rational"
1>c:\users\1\documents\visual studio 2010\projects\98765\98765\rational.h(46): error C2039: denominator: не является членом "Rational"
c:\users\1\documents\visual studio 2010\projects\98765\98765\rational.h(16): см. объявление "Rational"

C++ (Qt)
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
#define _Rational_h_
#include <iostream>
 
using namespace std;
int nod(int p, int q) {
  if (p < 0) p = -p;
  if (q < 0) q = -q;  
  while (p != 0 && q != 0)
    if (p >= q)
      p %= q;
    else
      q %= p;
  return p + q;
}
 
class Rational {
friend std::istream &operator>>(std::istream &stream, Rational &number);
 public:
  Rational() : numerator_(0), denominator_(1) {}
  Rational(int number) : numerator_(number), denominator_(1) {}
  Rational(int numerator, int denominator)
    : numerator_(numerator), denominator_(denominator) {
    optimize_();
  }
  int getNumerator() const { return numerator_; }
  int getDenominator() const { return denominator_; }
 private:
  void optimize_() {
    int nod_ = nod(numerator_, denominator_);
    numerator_ /= nod_;
    denominator_ /= nod_;
    if (denominator_ < 0) {
      numerator_ = -numerator_;
      denominator_ = -denominator_;
    }
  }
  int numerator_;
  int denominator_;
};
std::istream &operator>>(std::istream &stream, Rational &number)
{
    std::cout << "Enter numerator: ";
    stream >> number.numerator;
    
    std::cout << "Enter denominator: ";
    stream >> number.denominator;
 
    return stream;
}
 
std::ostream &operator<<(std::ostream &stream, const Rational &number) {
  return stream << number.getNumerator() << "/" << number.getDenominator();
}
 
Rational operator+(const Rational &p, const Rational &q) {
  return Rational(p.getNumerator() * q.getDenominator() +
    q.getNumerator() * p.getDenominator(),
    p.getDenominator() * q.getDenominator());
    
}
 
Rational operator-(const Rational &p, const Rational &q) {
  return Rational(p.getNumerator() * q.getDenominator() -
    q.getNumerator() * p.getDenominator(),
    p.getDenominator() * q.getDenominator());
}
 
Rational operator*(const Rational &p, const Rational &q) {
  return Rational(p.getNumerator() * q.getNumerator(),
    p.getDenominator() * q.getDenominator());
}
 
Rational operator/(const Rational &p, const Rational &q) {
  return Rational(p.getNumerator() * q.getDenominator(),
    p.getDenominator() * q.getNumerator());
}
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
16.01.2013, 14:28     Ошибки в программе #6
yulla, На хабре была статья про перегрузку операторов. В гугле банят нещадно?)
ArmanPrestige
 Аватар для ArmanPrestige
219 / 210 / 50
Регистрация: 15.01.2013
Сообщений: 788
16.01.2013, 14:30     Ошибки в программе #7
как то странно вы класс описываете. сперва паблики. потом прайват методоы. потом только поля которые юзаются в методах не красиво. да и зачем новую тему создавать? у вас же страя была? не засоряйте форум!

п.с. у вас поле denominator_ а вы обращаетесь к denominator. тоже самое и с numerator. будьте внимательнее
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
16.01.2013, 14:37  [ТС]     Ошибки в программе #8
Цитата Сообщение от Invader_Zim Посмотреть сообщение
yulla, На хабре была статья про перегрузку операторов. В гугле банят нещадно?)
просто у меня нет времени разбираться в статьях( мне хотя бы ошибки исправить... завтра нужно сдавать, причем не только эту программу

Добавлено через 5 минут
ArmanPrestige, о, заработало) а почему вместо того, чтобы вывести -p выводит дробное число?
например, Enter numerator: 7
Enter denominator: 4
-p = -7/4

должно по идее выводиться просто -7 ?
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
16.01.2013, 14:40     Ошибки в программе #9
yulla, Внимательно смотри свой перегруженый оператор.
Как будто ночью нельзя работать. И не так уж много времени уходит на одностраничную статью. Явно меньше чем на контактики, и ожидание ответов на форуме.
ArmanPrestige
 Аватар для ArmanPrestige
219 / 210 / 50
Регистрация: 15.01.2013
Сообщений: 788
16.01.2013, 14:42     Ошибки в программе #10
Цитата Сообщение от yulla Посмотреть сообщение
просто у меня нет времени разбираться в статьях( мне хотя бы ошибки исправить... завтра нужно сдавать, причем не только эту программу

Добавлено через 5 минут
ArmanPrestige, о, заработало) а почему вместо того, чтобы вывести -p выводит дробное число?
например, Enter numerator: 7
Enter denominator: 4
-p = -7/4

должно по идее выводиться просто -7 ?
у вас же в перегрузке написано
C++
1
stream << number.getNumerator() << "/" << number.getDenominator();
вот и выводиться numerator(=7) потом слэш(/) и потом denominator(4)

Добавлено через 1 минуту
Цитата Сообщение от Invader_Zim Посмотреть сообщение
Явно меньше чем на контактики
спалил девушку

п.с. я так понимаю вот статья (тык) о которой говорил товарищ Invader_Zim. тоже советую к прочтению!
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
16.01.2013, 14:57  [ТС]     Ошибки в программе #11
сделала так


C++ (Qt)
1
2
3
4
std::ostream &operator<<(std::ostream &stream, const Rational &number) {
  return stream << number.getNumerator();
 
}
почему у меня два раза запрашивается?
Enter numerator:
Enter denominator:
Enter numerator:
Enter denominator:

в итоге считает первый numerator и последний denominator
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
16.01.2013, 14:58     Ошибки в программе #12
Цитата Сообщение от yulla Посмотреть сообщение
почему у меня два раза запрашивается?
Enter numerator:
Enter denominator:
Enter numerator:
Enter denominator:
Потому что

Цитата Сообщение от yulla Посмотреть сообщение
cin >> p;
cin >> q;
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
16.01.2013, 15:16  [ТС]     Ошибки в программе #13
убрала cin >> q

все равно бред выводит

Enter numerator: 5
Enter denominator: 3


-p = -5
1/p = 3
p + q = 5
p * q = 5
p / q = 0
(x1*p)+(x2*q) = 1
(x3+(p*q))/(p+(x4-q)) = 25
x4/(p+(x5*q)) = 9
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
16.01.2013, 15:20     Ошибки в программе #14
yulla, Хм, а чего ты хочеш от программы? Может быть проблема в этом?)
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
16.01.2013, 15:24     Ошибки в программе #15
Цитата Сообщение от yulla Посмотреть сообщение
std::cout <<"1/p = " << x4/p << std::endl;
здесь явно ошибка
C++
1
std::cout <<"1/p = " << 1/p << std::endl;
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
16.01.2013, 15:36  [ТС]     Ошибки в программе #16
почему ошибка? ведь под x4 подразумевается 1

C++ (Qt)
1
Rational x4(1);
Добавлено через 2 минуты
Invader_Zim, пользователь должен вводить числа, а программа должна вычислять значения выражений
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
16.01.2013, 15:45     Ошибки в программе #17
Цитата Сообщение от yulla Посмотреть сообщение
убрала cin >> q
Зачем? Вы же вводите две дроби.
Enter numerator: 4
Enter denominator: 5
Enter numerator: 2
Enter denominator: 5

Это значит вы ввели 4/5 и 2/5, а потом производятся расчеты с ними (вроде бы даже правильные).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2013, 16:14     Ошибки в программе
Еще ссылки по теме:

Ошибки в программе C++
C++ Ошибки в программе
C++ Ошибки в программе

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

Или воспользуйтесь поиском по форуму:
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
16.01.2013, 16:14  [ТС]     Ошибки в программе #18
Цитата Сообщение от Schizorb Посмотреть сообщение
Зачем? Вы же вводите две дроби.
Enter numerator: 4
Enter denominator: 5
Enter numerator: 2
Enter denominator: 5

Это значит вы ввели 4/5 и 2/5, а потом производятся расчеты с ними (вроде бы даже правильные).
допустим, складываются 4/5 и 2/5, почему тогда в результате получается 6?

Добавлено через 5 минут
C++ (Qt)
1
2
3
std::ostream &operator<<(std::ostream &stream, const Rational &number) {
  return stream << number.getNumerator() << "/" << number.getDenominator();
}
если эта строка выглядит так, то дроби вычисляются правильно, но неправильно -p и 1/p

надо чтобы и то и то одновременно правильно было)

Добавлено через 11 минут
А хотя... да, вроде правильно все) спасибо большое всем!
Yandex
Объявления
16.01.2013, 16:14     Ошибки в программе
Ответ Создать тему
Опции темы

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