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

Неправильно работает программа - C++

Восстановить пароль Регистрация
 
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
15.01.2013, 12:27     Неправильно работает программа #1
файл complex.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
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
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
class Complex // класс компелексных чисел
{
   double re, im; // целая и мнимая части
   
// создаем конструкторы   
public:
   
   Complex() {};
   
   Complex (double r) // конструктор по умолчанию
   {
      re = r; 
      im = 0;
   }
   
   Complex (double r, double i) // конструктор по умолчанию
   {
      re = r; 
      im = i;
   } 
   
   Complex (Complex &c) // конструктор копирования
   {
      re = c.re; 
      im = c.im;
   }
   
   ~Complex() {}
   
   float abs() // Модуль комплексного числа
   {
      return sqrt(re * re - im * im);
   }     
 
   void print(Complex &c)
   {
       if(c.im>0) printf("%f + %f i\n",c.re,c.im);
       else printf("%f  %f i\n",c.re,c.im);
 
   }
 
 
   Complex & operator = (Complex &c) // перегрузка оператора присваивания
   {
      re = c.re;
      im = c.im;
 
      return (*this);
   }
 
   Complex Complex::operator + (Complex &c) // перегрузка оператора сложения
   {
      Complex temp;
 
      temp.re = re + c.re;
      temp.im = im + c.re;
 
      return temp;
   }
 
   Complex Complex::operator - (Complex &c) // перегрузка оператора вычитания
   {
      Complex temp;
 
      temp.re = re - c.re;
      temp.im = im - c.re;
    
      return temp;
   }
 
   Complex Complex::operator * (Complex &c) // перегрузка оператора умножения
   {
      Complex temp;
 
      temp.re = re*c.re;
      temp.im = re*c.im;
 
      return temp;
   }
 
    
 
   Complex Complex::operator / (Complex &c) // перегрузка оператора деления
   {
      Complex temp;
 
      double r = c.re * c.re + c.im * c.im;
      temp.re = (re * c.re + im * c.im) / r;
      temp.re = (im * c.re - re * c.im) / r;
 
      return temp;
   }   
 
   friend ostream &operator<<(ostream &, Complex &); // перегрузка оператора <<
   friend istream &operator>>(istream &, Complex &); // перегрузка оператора >>
 
};
 
ostream &operator<<(ostream &out, Complex &c)
{
   if (c.im>0)
    
    out << "" << c.re << " + "<<c.im<<" i" <<"\n";
   else out << "" << c.re << " "<<c.im<<" i" <<"\n";
   
   return out;
}
 
istream &operator>>(istream &in, Complex &c)
{
   in >> c.re >> c.im;
   
   return in;
}

файл main

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
#include "complex.h"
#include "iostream"
using namespace std;
 
int main()
{
    Complex u(5,2);
    Complex v(3,-3);
 
    Complex x1(5);
    Complex x2(2.3);
    Complex x3(3);
    Complex x4(1);
    Complex x5(1.5);
    
    
    cout << u << " " << v << endl;
 
    // вывод числа двумя функциями
    u.print(u);
    cout<<u<<endl;
 
     
    cout << u + v << endl;
    
    cout << u - v << endl;
    
    cout << u * v << endl;
        
    cout << u/v << endl;
 
    cout << x1*u+x2*v << endl;   //5u + 2.3v
     
    cout << (x3+u*v)/(u+v) << endl;   //(3+uv)/(u+v)
 
    cout << x4/(u+x5*v) << endl;   //(u+1.5v)-1
    
    u = v;
    
    cout << u << " = " << v << endl;
    
   int i;
    cin>>i;
 
        return 0;
}
программа должна вычислять значения выражений, но вместо этого она выводит на экран числа, что нужно сделать, чтобы она работала правильно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
15.01.2013, 12:36     Неправильно работает программа #2
Цитата Сообщение от yulla Посмотреть сообщение
программа должна вычислять значения выражений, но вместо этого она выводит на экран числа,
А что ожидалось, что после вычисления выражения на экран будет выведена строка?
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
15.01.2013, 12:46     Неправильно работает программа #3
У меня даже не скомпилировался ваш код. Пришлось убрать в некоторых местах Complex::, и еще добавить const к параметрам функций.

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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <stdio.h>
using namespace std;
 
class Complex // класс компелексных чисел
{
   double re, im; // целая и мнимая части
   
// создаем конструкторы   
public:
   
   Complex() {};
   
   Complex (double r) // конструктор по умолчанию
   {
      re = r; 
      im = 0;
   }
   
   Complex (double r, double i) // конструктор по умолчанию
   {
      re = r; 
      im = i;
   } 
   
   Complex (const Complex &c) // конструктор копирования
   {
      re = c.re; 
      im = c.im;
   }
   
   ~Complex() {}
   
   float abs() const// Модуль комплексного числа
   {
      return sqrt(re * re - im * im);
   }     
 
   void print(const Complex &c) const
   {
       if(c.im>0) printf("%f + %f i\n",c.re,c.im);
       else printf("%f  %f i\n",c.re,c.im);
 
   }
 
 
   Complex & operator = (const Complex &c)// перегрузка оператора присваивания
   {
      re = c.re;
      im = c.im;
 
      return (*this);
   }
 
   Complex operator + (const Complex &c) const// перегрузка оператора сложения
   {
      Complex temp;
 
      temp.re = re + c.re;
      temp.im = im + c.re;
 
      return temp;
   }
 
   Complex operator - (const Complex &c) const// перегрузка оператора вычитания
   {
      Complex temp;
 
      temp.re = re - c.re;
      temp.im = im - c.re;
    
      return temp;
   }
 
   Complex operator * (const Complex &c) const// перегрузка оператора умножения
   {
      Complex temp;
 
      temp.re = re*c.re;
      temp.im = re*c.im;
 
      return temp;
   }
 
    
 
   Complex operator / (const Complex &c) const// перегрузка оператора деления
   {
      Complex temp;
 
      double r = c.re * c.re + c.im * c.im;
      temp.re = (re * c.re + im * c.im) / r;
      temp.re = (im * c.re - re * c.im) / r;
 
      return temp;
   }   
 
   friend ostream &operator<<(ostream &, const Complex &); // перегрузка оператора <<
   friend istream &operator>>(istream &, Complex &); // перегрузка оператора >>
 
};
 
ostream &operator<<(ostream &out, const Complex &c)
{
   if (c.im>0)
    
    out << "" << c.re << " + "<<c.im<<" i" <<"\n";
   else out << "" << c.re << " "<<c.im<<" i" <<"\n";
   
   return out;
}
 
istream &operator>>(istream &in, Complex &c)
{
   in >> c.re >> c.im;
   
   return in;
}
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
15.01.2013, 15:27  [ТС]     Неправильно работает программа #4
Schizorb, в общем - то получилось то же самое, что и было. Просто мне преподаватель сказала, что значения выражений неправильно вычисляются(
iifat
2179 / 1332 / 96
Регистрация: 05.06.2011
Сообщений: 3,690
15.01.2013, 16:59     Неправильно работает программа #5
Цитата Сообщение от yulla Посмотреть сообщение
C++
1
return sqrt(re * re - im * im);
Тут плюс.
Цитата Сообщение от yulla Посмотреть сообщение
C++
1
Complex Complex::operator + (Complex &c)
Complex:: убери. Он пишется только вне класса.
Цитата Сообщение от yulla Посмотреть сообщение
C++
1
Complex temp; temp.re = re + c.re; temp.im = im + c.re; return temp;
Не ошибка, конечно, но вот так короче:
C++
1
return Complex (re + c.re, im + c.im);
Цитата Сообщение от yulla Посмотреть сообщение
C++
1
Complex Complex::operator * (Complex &c)
Посмотри, как умножаются комплекснные числа!
C++
1
return Complex (re * c.re - im * c.im, re * c.im + im * c.re);
Цитата Сообщение от yulla Посмотреть сообщение
C++
1
Complex Complex::operator / (Complex &c)
Посмотри, как они делятся и перепиши полностью. Мне лень.
И ещё раз: тебе ж, помоему, писал: к private членам чужого объекта (даже одного класса!) нет доступа
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
15.01.2013, 17:48     Неправильно работает программа #6
yulla, там в формулах re и im у вас постоянно путаются:

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
   Complex operator + (const Complex &c) const// перегрузка оператора сложения
   {
      Complex temp;
 
      temp.re = re + c.re;
      temp.im = im + c.im;
 
      return temp;
   }
 
   Complex operator - (const Complex &c) const// перегрузка оператора вычитания
   {
      Complex temp;
 
      temp.re = re - c.re;
      temp.im = im - c.im;
    
      return temp;
   }
 
   Complex operator * (const Complex &c) const// перегрузка оператора умножения
   {
      Complex temp;
 
      temp.re = re * c.re - im * c.im;
      temp.im = re * c.im + c.re * im;
 
      return temp;
   }
 
   Complex operator / (const Complex &c) const// перегрузка оператора деления
   {
      Complex temp;
 
      double r = c.re * c.re + c.im * c.im;
      temp.re = (re * c.re + im * c.im) / r;
      temp.im = (im * c.re - re * c.im) / r;
 
      return temp;
   }
Вроде все поправил. И да, как сказал iifat, в расчете модуля должно быть сложение, а не вычитание.
iifat
2179 / 1332 / 96
Регистрация: 05.06.2011
Сообщений: 3,690
15.01.2013, 18:01     Неправильно работает программа #7
Цитата Сообщение от Schizorb Посмотреть сообщение
C++
1
Complex operator - (const Complex &c) const
Кстати да, вот этот второй const очень нужная штука.

Добавлено через 4 минуты
И да, с делением всё верно. Извиняюсь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2015, 11:00     Неправильно работает программа
Еще ссылки по теме:

Неправильно работает небольшая программа-калькулятор C++
C++ Почему моя программа неправильно работает?
C++ Программа работает неправильно

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

Или воспользуйтесь поиском по форуму:
Дмитрий Рачеев
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 12
29.03.2015, 11:00     Неправильно работает программа #8
Здравствуйте. Подскажите, пожалуйста, почему неправильно выполняется программа( не выполняется цикл). Заранее спасибо.
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <conio.h>

using namespace std;

int main(int argc, char* argv[])
{
float x,y,n,p;
printf("Vvedite n = \n");
scanf("%f",&n);
printf("Vvedite x = \n");
scanf("%f",&x);
int s=0;
int i=1;
while(i<=n)
{
s=s+(pow(1/2,i)*cos(i)*x);
i++;
}
y=x+2*s;
printf("Resultat: y = %f s= %f", y,s );
getchar();
getchar();
return 0;

}
Yandex
Объявления
29.03.2015, 11:00     Неправильно работает программа
Ответ Создать тему
Опции темы

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