2015-11-04 7 views
-5
double a, b, c, d, x, y; 
char operation 


cout << setw(6) << a << b 
    << setw(3) << operation 
    << setw(6) << c << d 
    << " = " 
    << setw(6) << x << y 
    << endl; 

Я делаю калькулятор, который принимает два комплексных числа и добавляет вычитания и т. Д. Мой вопрос заключается в том, как отформатировать выходной файл так, чтобы 0 не отображались.Не печатайте переменную, если она равна нулю

I.E. если входной сигнал (a + bi) (c + di), выходной сигнал равен + bi * c + di = x + yi. Но a, b, c, d, x, y отображаются только в том случае, если они отличны от нуля.

Я знаю, что могу это сделать, если бы заявления и прочее, но я надеялся, что есть более короткий и эффективный путь.

+0

10i * 7 + 17i = 70i + 17i = 87i в обычной математике. Вы уверены, что хотите, чтобы пользовательские обозначения отличались от всех существующих норм? – hvd

+0

Существуют и другие способы, но утверждения 'if' наиболее просты и понятны. – Frecklefoot

+0

Я просто бросил это в качестве примера, чтобы показать выход. Я обновил проблему, так что это правильно. – cflinspach

ответ

1

Я не думаю, что вы можете избежать выполнения условия и печати, если отличное от нуля где-то.

О все, что можно сделать, это обернуть его так, большая часть кода не нужно иметь дело с этим:

class complex { 
    double x; 
    double i; 
public: 
    // ... 

    friend std::ostream &operator<<(std::ostream &os, complex const &c) { 
     // if both parts are 0, we probably want to print *something* 
     if (c.x == 0.0 && c.i == 0.0) 
      return os << 0; 
     if (c.x != 0.0) 
      os << c.x; 
     if (c.i != 0.0) 
      os << c.i << "i"; 
     return os; 
    } 
}; 

complex a, b, c; 

// ... 
cout << a << operation << b << " = " c << "\n"; 

Вы должны добавить немного больше, если вы хотите, чтобы это выполнить (например,) width/precision правильно (хотя для реального использования вы, несомненно, хотите использовать класс complex, который уже находится в стандартной библиотеке).

0

Да, вы можете сделать это, в том числе <complex>

std::complex<double> com_one; // value 0 + 0i 
std::complex<double> com_two(3.14); // value 3.14 + 0i 
std::complex<double> com_three(1.5, 3.14) // value 1.5 + 3.14i 
std::complex<double> com_four(com_two); // value is also 3.14 + 0i 

Затем использовать арифметические операции, то вы можете просто использовать

std::cout << com_one + com_two << std::endl; 
std::cout << com_one - 3.14 << std::endl; 
std::cout << 2.75 * com_two << std::endl; 
com_one += com_three/2.0; 

Источник: http://stdcxx.apache.org/doc/stdlibug/20-2.html

Для проверки, если это ноль проверьте его, используя if, и сравните его с нулем. Это самая чистая техника.

Смежные вопросы