Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2013, 15:54   #1
julia9311
Пользователь
 
Регистрация: 23.06.2012
Сообщений: 69
По умолчанию Программа неправильно вычисляет значения выражений

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

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;
}
julia9311 вне форума Ответить с цитированием
Старый 15.01.2013, 16:12   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

(дубль) 10 символов
Abstraction вне форума Ответить с цитированием
Старый 15.01.2013, 16:12   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

1) Неправильный расчёт модуля числа, проверьте ещё раз.
2) Неправильная реализация сложения и вычитания. Проверьте ещё раз.
3) Совсем неправильная реализация умножения.
4) В делении отсутствует проверка на r==0. Нехорошо.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить функцию, которая получив значения a,b,c,h вычисляет минимальное значение maxick96 Помощь студентам 1 05.12.2012 08:57
Программа неточно вычисляет произведение konstantusha Общие вопросы C/C++ 17 10.10.2012 17:10
Используя оператор цикла с параметром, вычислить значения выражений при заданном n. Radius100 Паскаль, Turbo Pascal, PascalABC.NET 7 03.02.2012 22:03
VS 9 неправильно видит дефолтные значения TwiX Visual C++ 2 30.09.2011 03:20
Надо чтобы программа выводила i начиная с 1 значения.Оно у мну дальше 1 и не вычисляет..? Влад-mego Помощь студентам 3 27.11.2008 23:10