Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа неправильно вычисляет значения выражений 
:(
    Опции темы
Julia9311
Дата 15.1.2013, 14:50 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 6.12.2012

Репутация: нет
Всего: нет



Преподаватель сказала, что в программе неправильно вычисляются значения выражений. Помогите, пожалуйста, исправить)

complex.h

Код

#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;
}



cpp

Код

#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;
}

PM MAIL   Вверх
baldina
Дата 15.1.2013, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



у вас несколько одинаковых ошибок

Цитата(Julia9311 @  15.1.2013,  14:50 Найти цитируемый пост)
temp.re = re + c.re;
temp.im = im + c.re;


Код

temp.re = re + c.re;
temp.im = im + c.im;



Это сообщение отредактировал(а) baldina - 15.1.2013, 17:01
PM MAIL   Вверх
feodorv
Дата 15.1.2013, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(baldina @  15.1.2013,  18:00 Найти цитируемый пост)
у вас несколько одинаковых ошибок

Это не всё)))
Цитата(Julia9311 @  15.1.2013,  15:50 Найти цитируемый пост)
   float abs() // Модуль комплексного числа
   {
      return sqrt(re * re - im * im);
   }     

Должен быть "плюс".


Как заметил baldina:
Цитата(Julia9311 @  15.1.2013,  15:50 Найти цитируемый пост)
   Complex Complex::operator + (Complex &c) // перегрузка оператора сложения
   {
      Complex temp;
      temp.re = re + c.re;
      temp.im = im + c.re;
      return temp;
   }


Цитата(Julia9311 @  15.1.2013,  15:50 Найти цитируемый пост)
   Complex Complex::operator - (Complex &c) // перегрузка оператора вычитания
   {
      Complex temp;
      temp.re = re - c.re;
      temp.im = im - c.re;
    
      return temp;
   }

Должно быть "im".


Цитата(Julia9311 @  15.1.2013,  15:50 Найти цитируемый пост)
   Complex Complex::operator * (Complex &c) // перегрузка оператора умножения
   {
      Complex temp;
      temp.re = re*c.re;
      temp.im = re*c.im;
      return temp;
   }

Это уже Бог знает что, никакое это не перемножение комплексных чисел. Удивительно, но при переопределении "/" всё выглядит иначе:
Цитата(Julia9311 @  15.1.2013,  15:50 Найти цитируемый пост)
      temp.re = (re * c.re + im * c.im) / r;
      temp.re = (im * c.re - re * c.im) / r; 



Это сообщение отредактировал(а) feodorv - 15.1.2013, 21:02


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0693 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.