martes, 8 de marzo de 2011

Deitel_C++_6.6 (Suma y Resta de Números Complejos en C++)

Con este programa empiezo a subir los ejercicios correspondientes a el capítulo 6 del libro Cómo Programar en C++ de Deitel y Deitel. Comparados con los capítulos anteriores no tienen una gran dificultad en la parte algorítmica. Lo importante es empezar a usar la programación orientada a objetos. También incluyo los enunciados correspondientes, algo que no había hecho. En relación a esto cabe hacer una aclaración, nunca he seguido al pie de la letra los enunciados, esto es porque he decidido hacer mucho más amables y completos los programas pensando siempre en que han de interactuar con un usuario. Así pues, las entradas de este blog no hacen exactamente lo que pide el libro.
_______________________________________________________________________________________
6.6 Cree una clase llamada Complejo para realizar aritmética con números complejos. Escriba un programa para evaluar sus clases. Los números complejos tienen la forma:
parte real + parte imaginaria*i

donde i es raíz cuadrada de -1

Utilice variables double para representar datos de tipo private de una clase. Proporcione un constructor que permita inicializar un objeto de esta clase cuando se declare. El constructor debe contener valores predeterminados en caso de que no se proporcionen inicializadores. Proporcione funciones miembro de tipo para cada uno de los siguientes:
a) Suma de dos números Complejos: las partes reales se suman juntas y las parte imaginarias se suman juntas.
b) Resta de dos números complejos: la parte real del operando derecho se resta a la parte real del operando izquierdo, y la parte imaginaria del operando derecho se resta a la parte imaginaria del operando izquierdo.
c) Impresión de números complejos de la forma (a,b) en donde a es la parte real y b es la parte imaginaria.
_______________________________________________________________________________________
Solución:

#include <iostream>
   using namespace::std; 
   // Se define la clase Complex

    class Complex
    {           // Abre la clase complex
    
    public:
    
    Complex( float = 0, float = 0);  // Constructor
    void Recibe();
    float Real();
    float Imaginario();
    void Suma(float, float, float, float);
    void Resta(float, float, float, float);

    void Impresion()
    /* Esta funcion miembro, por ser la mas simple, se definira
       aqui mismo, solo como un ejemplo de que esto puede hacerse */
    {         // Abre la funcion miembro Impresion
    cout << "( " << R << " , " << I <<" )" << endl;
    }        // Cierra la funcion miembro Impresion

    private:
    float R;
    float I; 
    };           // Cierra la clase complex

   //////////////////////////////////////////////////////////////
   // CONSTRUCTOR
   /////////////////////////////////////////////////////////////////

   Complex::Complex( float a, float b)
   {       // Abre constructor
   R = a;
   I = a;
   }         // Cierra constructor
  
   /////////////////////////////////////////////////////////////////
   // FUNCION MIEBRO RECIBE
   /////////////////////////////////////////////////////////////////

   void Complex::Recibe() 
   {          // Abre funcion miembro Recibe
   cout << "\nIntroduzca la parte real del numero: " << endl;
   cin >> R;
   cout << "\nIntroduzca la parte compleja del numero: " << endl;
   cin >> I;
   }          // Cierra funcion miembro Recibe

  ///////////////////////////////////////////////////////////////////
  // FUNCION MIEMBRO REAL
  //////////////////////////////////////////////////////////////////

  float Complex::Real()
  {
   return R;
  } 

  /////////////////////////////////////////////////////////////////
  // FUNCION MIEMBRO IMAGINARIO 
  ////////////////////////////////////////////////////////////////

  float Complex::Imaginario()

  {
   return I;
  } 

   ////////////////////////////////////////////////////////////////
   // FUNCION MIEMBRO SUMA 
   ///////////////////////////////////////////////////////////////

  void Complex::Suma( float a, float b, float c, float d)

   {            // Abre funcion miembro Suma
  cout <<"\n La suma de los numeros es:  ( "  << a + c
       << " , " << b + d 
       <<" )" << endl;
   }            // Cierra funcion miembro Suma

  //////////////////////////////////////////////////////////////
  // FUNCION MIEMBRO RESTA
  //////////////////////////////////////////////////////////////

  void Complex::Resta( float a, float b, float c, float d)

  {         // Abre funcion miembro Resta  
  cout <<"\n La resta de los numeros es:  ( " << a - c << " , " 
       << b - d 
       <<" )" << endl;
  }          // Cierra funcion miembro Resta

  ///////////////////////////////////////////////////////////////////
  // MAIN
  /////////////////////////////////////////////////////////////////

  int main()
  
  {           // Abre main
  Complex s;
  Complex x;
  Complex y;

  x.Recibe();
  y.Recibe();
  s.Suma(x.Real(), x.Imaginario(), y.Real(), y.Imaginario());  
  s.Resta(x.Real(), x.Imaginario(), y.Real(), y.Imaginario());
   
  return 0; 
  }           // Cierra main

_______________________________________________________________________________________
La siguiente es una ejecución del programa

Introduzca la parte real del numero: 
4

Introduzca la parte compleja del numero: 
3

Introduzca la parte real del numero: 
4

Introduzca la parte compleja del numero: 
3

La suma de los numeros es:  ( 8 , 6 )

La resta de los numeros es:  ( 0 , 0 )

9 comentarios:

  1. Gracias, me sirvió mucho para comprender mejor lo visto en mis clases

    ResponderEliminar
  2. ---que Dios te bendiga---

    ResponderEliminar
  3. jajjaja hermano LOL mugre santiago

    ResponderEliminar
  4. gracias maldito santiago

    ResponderEliminar
  5. me puedes explicar el mismo programa pero solo con librerías stdio y conio
    y con funciones y apuntadores gracias

    ResponderEliminar
    Respuestas
    1. En realidad la razón de ser de éste programa es usar las clases y métodos. No tiene mucho caso resolver ésto con funciones, y menos aún con apuntadores. De hecho, tal como está el programa es largo y complejo de manera innecesaria. No sé exactamente para qué quieres escribirlo de otra manera. Por otro lado, stdio es la librería estándar de C, en tanto que conio no es parte del lenguaje. Se trata, más bien, de una librería creada para compilar en el sistema operativo MSDOS, de donde concluyo que usas windows. Yo compilo en linux y no uso la librería conio.
      Saludos y muchas gracias por el comentario.

      Eliminar
  6. querría saber si podrías resolver lo mismo pero con la multiplicación y divison de dos complejos pero en forma polar, es decir , primero lo pasarías de forma binomica a la polar

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...