Sergio Andrés Sepúlveda
Sthefany Blanco
Juan David Franco
Se modificó el primer avance de la calculadora científica:cambiamos la única clase que había por clases respectivas a los dominios de los números (una clase para numeros complejos, otra para naturales, otra para reales, etc.)
implementamos el manejo de los números complejos
Diagrama de clases:
Código fuente:
Clase CalculadoraComplejos:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace calculadora
{
/// <summary>
/// Clase que contiene métodos para operar números complejos
/// </summary>
class CalculadoraComplejos
{
/// <summary>
/// Método que suma 2 números complejos
/// </summary>
/// <param name="a">Parte real del primer complejo</param>
/// <param name="b">Parte imaginaria del primer complejo</param>
/// <param name="c">Parte real del segundo complejo</param>
/// <param name="d">Parte imaginaria del segundo complejo</param>
/// <returns>Retorna un string que contiene la suma de los 2 números complejos</returns>
public static string SumaComplejo(double a, double b, double c, double d)
{
///creamos un arreglo que contiene el resultado de la suma según la siguiente fórmula:
///(a+bi)+(c+di)=(a+c)+(b+d)i
double[] resultado = new double[] { a+ c, b + d };
///con este if se mejorará la "presentación" del string que contiene el resultado
///si la parte imaginaria es menor a 0 el programa la concatenará sin necesidad de usar ningún símbolo
///para separarlo de la parte real debido debido a que la parte imaginaria estará acompañada de un signo "-" (ejemplo: 2-4i)
///En caso de que la parte imaginaria sea 0 o mayor se concatenará con un signo "+" a la parte real (ejemplo: 2+3i)
if (resultado[1] < 0)
{
///la sentencia string.join imprime en una sola linea los elementos de un arreglo (en este caso el arreglo resultado)
///y los separa con cualquier texto que uno use dentro de las comillas
string suma = string.Join("", resultado);
return suma;
}
else
{
string suma = string.Join("+", resultado);
return suma;
}
}
/// <summary>
/// Método que resta 2 números complejos
/// </summary>
/// <param name="a">Parte real complejo 1</param>
/// <param name="b">Parte imaginaria complejo 1</param>
/// <param name="c">Parte real complejo 2</param>
/// <param name="d">Parte imaginaria complejo 2</param>
/// <returns>retorna un string que contiene el resultado de la resta de 2 números complejos</returns>
public static string RestaComplejo(double a, double b, double c, double d)
{
///creamos un arreglo que contiene el resultado de la resta según la siguiente fórmula:
///(a+bi)-(c+di)=(a-c)+(b-d)i
double[] resultado = new double[] {a - c, b - d };
///if para imprimir el resultado según su parte imaginaria (ver el if del metodo suma complejo)
if (resultado[1] < 0)
{
string resta = string.Join("", resultado);
return resta;
}
else
{
string resta = string.Join("+", resultado);
return resta;
}
}
/// <summary>
/// Método que multiplica 2 números complejos
/// </summary>
/// <param name="a">Parte real complejo 1</param>
/// <param name="b">Parte imaginaria complejo 1</param>
/// <param name="c">Parte real complejo 2</param>
/// <param name="d">Parte imaginaria complejo2</param>
/// <returns></returns>
public static string MultiplicacionComplejo(double a, double b, double c, double d)
{
///Creamos un arreglo que contiene el resultado de la multiplicación según la siguiente fórmula:
///(a+bi)*(c+di)=(ac-bd)+(ad+bc)i
double[] resultado = new double[] { (a * c) - (b * d), (a * d) + (b* c) };
///if para imprimir el resultado según su parte imaginaria (ver el if del metodo suma complejo)
if (resultado[1] < 0)
{
string multi = string.Join("", resultado);
return multi;
}
else
{
string multi = string.Join("+", resultado);
return multi;
}
}
public static string DivisionComplejo(double a, double b, double c, double d)
{
///verifica si el segundo complejo ingresado tiene 0 en su parte real o imaginaria ya que estos no pueden ser 0
///si es así retornará la excepción DivideByZeroException
if (c == 0 || d == 0)
{
throw new DivideByZeroException();
}
else
///si el segundo numero complejo no contiene 0 creará un arreglo con el resultado de la división usando la siguiente fórmula
///{[(a*c)+(b*d)]/[(c^2+d^2)]}+{[(b*c)-(a*d)]/[(c^2+d^2)]}i
///la sentencia Math.Pow(base, potencia) se usa para elevar c y d al cuadrado
{
double[] resultado = new double[] { ((a * c) + (b * d)) / (Math.Pow(c, 2) + Math.Pow(d, 2)), ((b * c) - (a * d)) / (Math.Pow(c, 2) + Math.Pow(d, 2)) };
///if para imprimir el resultado según su parte imaginaria (ver el if del metodo suma complejo)
if (resultado[1] < 0)
{
string div = string.Join("", resultado);
return div;
}
else
{
string div = string.Join("+", resultado);
return div;
}
}
}
}
}
Clase Calculadora Enteros:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace calculadora
{
/// <summary>
/// Clase que contiene métodos para operar números enteros
/// </summary>
class CalculadoraEnteros
{
/// <summary>
/// Método que suma 2 números enteros ámbos de tipo int ya que este tipo de dato no admite decimales
/// </summary>
/// <param name="x">entero 1</param>
/// <param name="y">entero 2</param>
/// <returns>retorna un int que es la suma de los 2 numeros enteros</returns>
public static int SumaEntero(int x, int y)
{
int suma = x + y;
return suma;
}
/// <summary>
/// Método que resta 2 números enteros ámbos de tipo int ya que este tipo de dato no admite decimales
/// </summary>
/// <param name="x">entero 1</param>
/// <param name="y">entero 2</param>
/// <returns>retorna un int que es la resta de los 2 números enteros</returns>
public static int RestaEntero(int x, int y)
{
int resta = x - y;
return resta;
}
/// <summary>
/// Método que multiplica 2 números enteros ámbos de tipo int ya que este tipo de dato no admite decimales
/// </summary>
/// <param name="x">entero 1</param>
/// <param name="y">entero 2</param>
/// <returns>retorna un int que es la multiplicaión de los 2 números enteros</returns>
public static int MultiplicacionEntero(int x, int y)
{
int multi = x * y;
return multi;
}
/// <summary>
/// Método que divide 2 números enteros ámbos de tipo int ya que este tipo de dato no admite decimales
/// </summary>
/// <param name="x">entero 1</param>
/// <param name="y">entero 2</param>
/// <returns>retorna un int que es la división de los 2 números enteros</returns>
public static int DivisionEntero(int x, int y)
{
//verifica si el segundo número ingresado es 0 ya que la división por 0 no existe
///si es así retornará la excepción DivideByZeroException
if (y == 0)
{
throw new DivideByZeroException();
}
else
{
int div = x / y;
return div;
}
}
}
}
Clase CalculadoraNaturales:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace calculadora
{
class CalculadoraNaturales
{
/// <summary>
/// Método que suma 2 números naturales, las variables son de tipo int por que no aceptan decimales
/// </summary>
/// <param name="x">primer número natural</param>
/// <param name="y">segundo número natural</param>
/// <returns>retorna un int con la suma de los 2 números naturales</returns>
public static int SumaNatural(int x, int y)
{
///verifica si los números ingresados están dentro del rango de los naturales
///si no es así retornará la excepción SystemException
if (x < 0 || y < 0)
{
throw new SystemException();
}
else
{
int suma = x + y;
return suma;
}
}
/// <summary>
/// Método que resta 2 números naturales, las variables son de tipo int por que no aceptan decimales
/// </summary>
/// <param name="x">primer número natural</param>
/// <param name="y">segundo número natural</param>
/// <returns>retorna un int con la resta de los 2 números naturales</returns>
public static int RestaNatural(int x, int y)
{
///verifica si los números ingresados están dentro del rango de los naturales
///si no es así retornará la excepción SystemException
if (x < 0 || y < 0)
{
throw new SystemException();
}
///verifica si el segundo numero es mayor que el primero
///ya que esto produce que el resultado esté fuera de los numeros naturales
///de ser así retornará la excepción InvalidOperationException
else if (x < y)
{
throw new InvalidOperationException();
}
else
{
int resta = x - y;
return resta;
}
}
/// <summary>
/// Método que multiplica 2 números naturales, las variables son de tipo int por que no aceptan decimales
/// </summary>
/// <param name="x">primer número natural</param>
/// <param name="y">segundo número natural</param>
/// <returns>retorna un int con la multiplicación de los 2 números naturales</returns>
public static int MultiplicacionNatural(int x, int y)
{
///verifica si los números ingresados están dentro del rango de los naturales
///si no es así retornará la excepción SystemException
if (x < 0 || y < 0)
{
throw new SystemException();
}
else
{
int multi = x * y;
return multi;
}
}
/// <summary>
/// Método que divide 2 números naturales, las variables son de tipo int por que no aceptan decimales
/// </summary>
/// <param name="x">primer número natural</param>
/// <param name="y">segundo número natural</param>
/// <returns>retorna un int con la división de los 2 números naturales</returns>
public static int DivisionNatural(int x, int y)
{
///verifica si los números ingresados están dentro del rango de los naturales
///si no es así retornará la excepción SystemException
if (x < 0 || y < 0)
{
throw new SystemException();
}
else if (y == 0)//verifica si el segundo número ingresado es 0 ya que la división por 0 no existe
{
throw new DivideByZeroException();
}
else
{
int div = x / y;
return div;
}
}
}
}
Clase Calculadora Racionales:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace calculadora
{
/// <summary>
/// Clase que contiene métodos para operar números racionales
/// </summary>
class CalculadoraRacionales
{
/// <summary>
/// Método que suma 2 números racionales, son de tipo double por que este incluye decimales
/// </summary>
/// <param name="x">primer numero racional,</param>
/// <param name="y">segundo numero racional</param>
/// <returns>retorna un double con la suma de los 2 numeros racionales</returns>
public static double SumaRacional(double x, double y)
{
double suma = x + y;
return suma;
}
/// <summary>
/// Método que resta 2 números racionales, son de tipo double por que este incluye decimales
/// </summary>
/// <param name="x">primer numero racional,</param>
/// <param name="y">segundo numero racional</param>
/// <returns>retorna un double con la resta de los 2 numeros racionales</returns>
public static double RestaRacional(double x, double y)
{
double resta = x - y;
return resta;
}
/// <summary>
/// Método que multiplica 2 números racionales, son de tipo double por que este incluye decimales
/// </summary>
/// <param name="x">primer numero racional,</param>
/// <param name="y">segundo numero racional</param>
/// <returns>retorna un double con la multiplicación de los 2 numeros racionales</returns>
public static double MultiplicacionRacional(double x, double y)
{
double multi = x * y;
return multi;
}
/// <summary>
/// Método que divide 2 números racionales, son de tipo double por que este incluye decimales
/// </summary>
/// <param name="x">primer numero racional,</param>
/// <param name="y">segundo numero racional</param>
/// <returns>retorna un double con la división de los 2 numeros racionales</returns>
public static double DivisionRacional(double x, double y)
{
///verifica si el segundo número ingresado es 0 ya que la división por 0 no existe
///si es así retornará la excepción DivideByZeroException
if (y == 0)
{
throw new DivideByZeroException();
}
else
{
double div = x / y;
return div;
}
}
}
}
Clase CalculadoraReales
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace calculadora
{
/// <summary>
/// Clase que contiene métodos para operar números reales
/// </summary>
class CalculadoraReales
{
/// <summary>
/// Método que suma 2 números reales, usa datos de tipo double debido a que los números reales incluyen decimales
/// </summary>
/// <param name="x">primer número real</param>
/// <param name="y">segundo número real</param>
/// <returns>retorna la suma de 2 números reales</returns>
public static double SumaReal(double x, double y)
{
double suma = x + y;
return suma;
}
/// <summary>
/// Método que resta 2 números reales, usa datos de tipo double debido a que los números reales incluyen decimales
/// </summary>
/// <param name="x">primer número real</param>
/// <param name="y">segundo número real</param>
/// <returns>retorna la resta de 2 números reales</returns>
public static double RestaReal(double x, double y)
{
double Resta = x - y;
return Resta;
}
/// <summary>
/// Método que multiplica 2 números reales, usa datos de tipo double debido a que los números reales incluyen decimales
/// </summary>
/// <param name="x">primer número real</param>
/// <param name="y">segundo número real</param>
/// <returns>retorna la multiplicación de 2 números reales</returns>
public static double MultiplicacionReal(double x, double y)
{
double multi = x * y;
return multi;
}
/// <summary>
/// Método que divide 2 números reales, usa datos de tipo double debido a que los números reales incluyen decimales
/// </summary>
/// <param name="x">primer número real</param>
/// <param name="y">segundo número real</param>
/// <returns>retorna la división de 2 números reales</returns>
public static double DivisionReal(double x, double y)
{
///verifica si el segundo número ingresado es 0 ya que la división por 0 no existe
///si es así retornará la excepción DivideByZeroException
if (y == 0)
{
throw new DivideByZeroException();
}
else
{
double div = x / y;
return div;
}
}
}
}
Clase Principal:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace calculadora
{
/// <summary>
/// Clase principal con los menús para operar los números
/// </summary>
class Program
{
static void Main(string[] args)
{ ///variables para los operadores
///naturales y enteros
int a, b;
///racionales, reales y complejos
double c, d, x, y;
///Menú para seleccionar el dominio de números
Console.WriteLine("Seleccione el dominio de números para trabajar:\n1.Naturales\n2.Enteros\n3.Racionales\n4.Reales\n5.Complejos\n6.Salir\n");
int menu = int.Parse(Console.ReadLine());
switch (menu)
{
///menu números naturales
case 1:
Console.WriteLine("\nEscriba el primer valor: ");
a = int.Parse(Console.ReadLine());
Console.WriteLine("\nEscriba el segundo valor: ");
b = int.Parse(Console.ReadLine());
///submenú para seleccionar operación
Console.WriteLine("\nSeleccione la operación:\n1.Suma\n2.Resta\n3.Multiplicación\n4.División\n5.Salir\n");
int menunatural = int.Parse(Console.ReadLine());
switch (menunatural)
{
case 1:
try
{
Console.WriteLine("\nSuma = " + CalculadoraNaturales.SumaNatural(a, b));
}
catch (SystemException e)
{
Console.WriteLine("\nEn los números naturales no entran los numeros negativos");
}
break;
case 2:
try
{
Console.WriteLine("\nResta = " + CalculadoraNaturales.RestaNatural(a, b));
}
catch (InvalidOperationException e)
{
Console.WriteLine("\nLa operacion da como resultado un número negativo lo que es inválido en los naturales");
}
catch (SystemException e)
{
Console.WriteLine("\nEn los números naturales no entran los numeros negativos");
}
break;
case 3:
try
{
Console.WriteLine("\nMultiplicación = " + CalculadoraNaturales.MultiplicacionNatural(a, b));
}
catch (SystemException e)
{
Console.WriteLine("\nEn los números naturales no entran los numeros negativos");
}
break;
case 4:
try
{
Console.WriteLine("\nDivisión = " + CalculadoraNaturales.DivisionNatural(a, b));
}
catch (DivideByZeroException e)
{
Console.WriteLine("\nNo existe la división por 0");
}
catch (SystemException e)
{
Console.WriteLine("\nEn los números naturales no entran los numeros negativos");
}
break;
case 5:
System.Environment.Exit(0);
break;
default:
Console.WriteLine("\nEscriba un numero de 1 a 5");
break;
}
break;
///menu números enteros
case 2:
Console.WriteLine("\nEscriba el primer valor: ");
a = int.Parse(Console.ReadLine());
Console.WriteLine("\nEscriba el segundo valor: ");
b = int.Parse(Console.ReadLine());
///submenú para seleccionar la operación
Console.WriteLine("\nSeleccione la operación:\n1.Suma\n2.Resta\n3.Multiplicación\n4.División\n5.Salir\n");
int menuentero = int.Parse(Console.ReadLine());
switch (menuentero)
{
case 1:
Console.WriteLine("\nSuma = " + CalculadoraEnteros.SumaEntero(a,b));
break;
case 2:
Console.WriteLine("\nResta = " + CalculadoraEnteros.RestaEntero(a, b));
break;
case 3:
Console.WriteLine("\nMultiplicación = " + CalculadoraEnteros.MultiplicacionEntero(a, b));
break;
case 4:
try
{
Console.WriteLine("\nDivisión = " + CalculadoraEnteros.DivisionEntero(a, b));
}
catch (DivideByZeroException e)
{
Console.WriteLine("\nNo existe la división por 0");
}
break;
case 5:
System.Environment.Exit(0);
break;
default:
Console.WriteLine("\nEscriba un numero de 1 a 5");
break;
}
break;
///menu números racionales
case 3:
Console.WriteLine("\nEscriba el primer valor: ");
c = double.Parse(Console.ReadLine());
Console.WriteLine("\nEscriba el segundo valor: ");
d = double.Parse(Console.ReadLine());
///Submenú para seleccionar la operación
Console.WriteLine("\nSeleccione la operación:\n1.Suma\n2.Resta\n3.Multiplicación\n4.División\n5.Salir\n");
int menuracional = int.Parse(Console.ReadLine());
switch (menuracional)
{
case 1:
Console.WriteLine("\nSuma = " + CalculadoraRacionales.SumaRacional(c, d));
break;
case 2:
Console.WriteLine("\nResta = " + CalculadoraRacionales.RestaRacional(c, d));
break;
case 3:
Console.WriteLine("\nMultiplicación = " + CalculadoraRacionales.MultiplicacionRacional(c, d));
break;
case 4:
try
{
Console.WriteLine("\nDivisión = " + CalculadoraRacionales.DivisionRacional(c, d));
}
catch (DivideByZeroException e)
{
Console.WriteLine("\nNo existe la división por 0");
}
break;
case 5:
System.Environment.Exit(0);
break;
default:
Console.WriteLine("\nEscriba un numero de 1 a 5");
break;
}
break;
/// menú números reales
case 4:
Console.WriteLine("\nEscriba el primer valor: ");
c = double.Parse(Console.ReadLine());
Console.WriteLine("\nEscriba el segundo valor: ");
d = double.Parse(Console.ReadLine());
///Submenú para seleccionar la operación
Console.WriteLine("\nSeleccione la operación:\n1.Suma\n2.Resta\n3.Multiplicación\n4.División\n5.Salir\n");
int menureal = int.Parse(Console.ReadLine());
switch (menureal)
{
case 1:
Console.WriteLine("\nSuma = " + CalculadoraReales.SumaReal(c, d));
break;
case 2:
Console.WriteLine("\nResta = " + CalculadoraReales.RestaReal(c, d));
break;
case 3:
Console.WriteLine("\nMultiplicación = " + CalculadoraReales.MultiplicacionReal(c, d));
break;
case 4:
try
{
Console.WriteLine("\nDivisión = " + CalculadoraReales.DivisionReal(c, d));
}
catch (DivideByZeroException e)
{
Console.WriteLine("\nNo existe la división por 0");
}
break;
case 5:
System.Environment.Exit(0);
break;
default:
Console.WriteLine("\nEscriba un numero de 1 a 5");
break;
}
break;
/// menu numeros complejos
case 5:
Console.WriteLine("\nEscriba valor real del primer complejo ");
c = double.Parse(Console.ReadLine());
Console.WriteLine("\nEscriba el valor imaginario del primer complejo ");
d = double.Parse(Console.ReadLine());
if (d < 0)
{
Console.WriteLine("\nprimer complejo: " + c + d + "i\n");
}
else
{
Console.WriteLine("\nprimer complejo: " + c + "+" + d + "i\n");
}
Console.WriteLine("\nEscriba valor real del segundo complejo ");
x = double.Parse(Console.ReadLine());
Console.WriteLine("\nEscriba el valor imaginario del segundo complejo ");
y = double.Parse(Console.ReadLine());
if (y < 0)
{
Console.WriteLine("\nsegundo complejo: " + x + y + "i\n");
}
else
{
Console.WriteLine("\nsegundo complejo: " + x + "+" + y + "i\n");
}
///Submenú para seleccionar la operación
Console.WriteLine("\nSeleccione la operación:\n1.Suma\n2.Resta\n3.Multiplicación\n4.División\n5.Salir\n");
int menucomplejo = int.Parse(Console.ReadLine());
switch (menucomplejo)
{
case 1:
Console.WriteLine("\nSuma = " + CalculadoraComplejos.SumaComplejo(c, d, x, y) + "i");
break;
case 2:
Console.WriteLine("\nResta = " + CalculadoraComplejos.RestaComplejo(c, d, x, y) + "i");
break;
case 3:
Console.WriteLine("\nMultiplicación = " + CalculadoraComplejos.MultiplicacionComplejo(c, d, x, y) + "i");
break;
case 4:
try
{
Console.WriteLine("\nDivisión = " + CalculadoraComplejos.DivisionComplejo(c, d, x, y) + "i");
}
catch (DivideByZeroException e)
{
Console.WriteLine("\nNo existe la división por 0");
}
break;
case 5:
System.Environment.Exit(0);
break;
default:
Console.WriteLine("\nEscriba un numero de 1 a 5");
break;
}
break;
case 6:
System.Environment.Exit(0);
break;
default:
Console.WriteLine("\nEscriba un numero de 1 a 6");
break;
}
Console.ReadLine();
}
}
}
Proyecto:
Calculadora Primer Avance