// Programación en C++ para Ingenieros, Ed. Thomson Paraninfo, 2006
// Capítulo 8: Diseño descendente

// Fichero pruebaComplejo.cpp
// Programa de prueba de las funcionalidades de la clase Complejo

#include <iostream>
#include <stdlib.h>
#include "complejo.h"

using namespace std;

int main()
{
    cout << "Calculadora para mumeros complejos "<< endl << endl;
    cout << "Operandos: ";

    // Se crean dos complejos c1 y c2 con el constructor general

    // Inicializacion de los complejos c1 y c2
    Complejo c1(1.0, 1.0);
    Complejo c2(2.0, 2.0);
    cout << "c1 = " << c1;
    cout << " y c2 = " << c2 << endl;

    // Operadores relacionales
    cout<< "c1 == c2 ?" ;
    if(c1==c2) cout <<" si" << endl;
    else cout <<" no"<<endl << endl;
    cout << "c1 != c2 ?" ;
    if(c1!=c2) cout << " si" << endl;
    else cout << " no" << endl;

    // Operadores binarios
    cout << c1 << " + " << c2 << " = "<<c1 + c2<< endl;
    cout << c1 << " - " << c2 << " = "<<c1 - c2<< endl;
    cout << c1 << " * " << c2 << " = "<<c1 * c2<< endl;
    cout << c1 << " / " << c2 << " = "<<c1 / c2<< endl;

    // Asignación de un complejo c2 a otro, c1
    cout << "Asignamos c2 a c1 " << endl << endl;
    c1 = c2;
    cout << "c1 = " << c1;
    cout << " y c2 = " << c2 << endl << endl;

    // Operaciones binarias después de la asignación de c2 a c1
    cout << c1 << " + " << c2 << " = "<<c1 + c2<< endl;
    cout << c1 << " - " << c2 << " = "<<c1 - c2<< endl;
    cout << c1 << " * " << c2 << " = "<<c1 * c2<< endl;
    cout << c1 << " / " << c2 << " = "<<c1 / c2<< endl;

    // Introducción de un nuevo complejo, c3
    cout << "Introduzca un complejo, c3. "<< endl;
    Complejo c3;
    cin >> c3;
    cout << "c3 = " <<c3 << endl;

    // Operaciones binarias con c1, c2 y c3
    cout << c1 << " + " << c2 << " - " << c3 <<" = "
         << c1 + c2 - c3 << endl;

    // Operaciones unarias
    cout << "El conjugado de "<< c1 << " es " << c1.conjugado() << endl;
    cout << "El opuesto de "<< c1 << " es " << -c1 << endl;
    cout << "El inverso de "<< c1 << " es " << c1.inverso() << endl;
    cout << "El inverso de "<< c1 << " + "<< c2 <<" es "
         << (c1+c2).inverso() <<endl;
    cout << "El inverso de "<< c1 << " + "<< c2 << " - "
         << c3 <<" es " << (c1+c2-c3).inverso() << endl;

    // Módulo de un complejo
    cout << "El modulo de "<< c1 << " es " << c1.modulo() << endl;
    cout << "El angulo de "<< c1 << " es " << c1.angulo() << endl;
    cout << "El modulo de "<< c1 << " * "<< c2 << " es "
         << (c1*c2).modulo() <<endl;

    return 0;
}