<repo_name>josemariaallegue/Laboratorio_II_TP<file_sep>/TP-01/Entidades/MiCalculadora/Form1.cs
﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Entidades;

namespace MiCalculadora
{
    public partial class LaCalculadora : Form
    {
        public LaCalculadora()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.MaximizeBox = false;
            this.MinimizeBox = false;
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            this.Limpiar();
        }

        private void btnOperar_Click(object sender, EventArgs e)
        {
            lblResultado.Text = LaCalculadora.Operar(txtNumero1.Text, txtNumero2.Text, cmbOperador.Text).ToString();

            //aplicacion de formatos a los textbox y comobox para hacer que la calculadora sea
            //mas agradable visualmente
            if (txtNumero1.Text == "")
            {
                txtNumero1.Text = "0";
            }
            if (txtNumero2.Text == "")
            {
                txtNumero2.Text = "0";
            }
            if (cmbOperador.Text != "+" && cmbOperador.Text != "-" && cmbOperador.Text != "/" && cmbOperador.Text != "*")
            {
                cmbOperador.Text = "+";
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnConvertirADecimal_Click(object sender, EventArgs e)
        {
            Numero numero = new Numero();
            lblResultado.Text = numero.BinarioDecimal(lblResultado.Text);
        }

        private void btnConvertirABinario_Click(object sender, EventArgs e)
        {
            Numero numero = new Numero();
            lblResultado.Text = numero.DecimalBinario(lblResultado.Text);
        }

        /// <summary>
        /// Limpia todos los textbox y combobox
        /// </summary>
        private void Limpiar()
        {
            this.txtNumero1.Clear();
            this.txtNumero2.Clear();
            this.cmbOperador.Text = "";
            this.lblResultado.Text = "";
        }

        /// <summary>
        /// Calcula el resultado a partir de los numeros y operadores ingresados
        /// </summary>
        /// <param name="numero1"> Primer numero a operar </param>
        /// <param name="numero2"> Segundo numero a operar </param>
        /// <param name="operador"> El string que determinar la operacion </param>
        /// <returns> El resultado de la operacion </returns>
        private static double Operar(string numero1, string numero2, string operador)
        {
            double retorno;
            Calculadora calculadora = new Calculadora();
            Numero num1 = new Numero(numero1);
            Numero num2 = new Numero(numero2);

            retorno = calculadora.Operar(num1,num2, operador);

            return retorno;
        }
    }
}
<file_sep>/TP-01/Entidades/Entidades/Calculadora.cs
﻿using System;

namespace Entidades
{
    public class Calculadora
    {
        /// <summary>
        /// Suma 
        /// </summary>
        /// <param name="num1"> Primer numero a operar </param>
        /// <param name="num2"> Segundo numero a operar</param>
        /// <param name="operador"> Determina que cuenta se va a realizar </param>
        /// <returns> Devuelve el resultado de la operacion entre los dos numeros </returns>
        public double Operar(Numero num1, Numero num2, string operador)
        {
            double retorno = 0;

            switch (Calculadora.ValidarOperador(operador))
            {
                case "+":
                    retorno = num1 + num2;
                    break;

                case "-":
                    retorno = num1 - num2;
                    break;

                case "/":
                    retorno = num1 / num2;
                    break;

                case "*":
                    retorno = num1 * num2;
                    break;
            }

            return retorno;
        }

        /// <summary>
        /// Valida que operador sea +, - , / o *
        /// </summary>
        /// <param name="operador"> El string a comprobar </param>
        /// <returns> Si es distinto a alguna de las 4 opciones devuelve + si no el correspondiente</returns>
        private static string ValidarOperador(string operador)
        {
            string retorno = "+";

            if (operador == "-" || operador == "*" || operador == "/")
            {
                retorno = operador;
            }

            return retorno;
        }
    }
}
<file_sep>/TP-01/Entidades/Entidades/Numero.cs
﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Entidades
{
    public class Numero
    {
        private double numero;

        private string SetNumero
        {
            set
            {
                this.numero = this.ValidarNumero(value);          
            }
        }

        public Numero()
        {

        }

        public Numero(double numero)
        {
            this.numero = numero;
        }

        public Numero(string numero)
        {
            this.SetNumero = numero;
        }

        /// <summary>
        /// Convierte un string a double
        /// </summary>
        /// <param name="strNumero"> La cadena a convertir </param>
        /// <returns> El numero en formato double </returns>
        private double ValidarNumero(string strNumero)
        {
            double retorno = 0;

            if (double.TryParse(strNumero, out double auxiliarRetorno))
            {
                retorno = auxiliarRetorno;
            }

            return retorno;
        }

        /// <summary>
        /// Convierte un numero binario en formato string a un decimal en formato string
        /// </summary>
        /// <param name="binario"> El binario a convertir </param>
        /// <returns> Un string que contiene el numero en decimal </returns>
        public string BinarioDecimal(string binario)
        {
            double retorno = 0;
            bool flag = true;

            if (binario.Length > 1)
            {
                if (binario[0] == '-')
                {
                    binario = binario.Substring(3, binario.Length - 3);
                }
                else
                {
                    binario = binario.Substring(2, binario.Length - 2);
                }
            }
            
            for (int j = 0; j <= binario.Length - 1; j++)
            {
                if (binario[j].ToString() != "0" && binario[j].ToString() != "1")
                {
                    flag = false;
                    break;
                }
            }

            if (flag)
            {
                for (int i = 1; i <= binario.Length; i++)
                {
                    retorno += double.Parse(binario[i - 1].ToString()) * (double)Math.Pow(2, binario.Length - i);
                }
            }
            else
            {
                return "Valor inválido";
            }

            return retorno.ToString();
        }

        /// <summary>
        /// Convierte un decimal en formato double a binario
        /// </summary>
        /// <param name="numero"> Numero a convertir a binario </param>
        /// <returns> El numero binario en formato string </returns>
        public string DecimalBinario(double numero)
        {
            string retorno = "";
            int numeroEntero = (int)numero;

            if (numeroEntero < 0)
            {
                numeroEntero = numeroEntero * -1;
            }

            while (numeroEntero > 0)
            {
                retorno = (numeroEntero % 2).ToString() + retorno;
                numeroEntero = numeroEntero / 2;
            }

            if (numero >= 0)
            {
                retorno = "0b" + retorno;
            }
            else
            {
                retorno = "-0b" + retorno;
            }

            return retorno.ToString();
        }

        /// <summary>
        /// Convierte un decimal en formato string a binario
        /// </summary>
        /// <param name="numero"> Numero a convertir a bianario </param>
        /// <returns> El numero binario en formato string </returns>
        public string DecimalBinario(string numero)
        {
            string retorno = "";

            if (double.TryParse(numero, out double auxiliar))
            {
                retorno = this.DecimalBinario(auxiliar);
            }

            return retorno;
        }

        /// <summary>
        /// Permite que al sumar dos objetos numero no haga falta llamar a sus variables
        /// </summary>
        /// <param name="n1"> Primer numero a operar </param>
        /// <param name="n2"> Segundo numero a operar </param>
        /// <returns> El resultado de la operacion </returns>
        public static double operator +(Numero n1, Numero n2)
        {
            return n1.numero + n2.numero;
        }

        /// <summary>
        /// Permite que al restar dos objetos numero no haga falta llamar a sus variables
        /// </summary>
        /// <param name="n1"> Primer numero a operar </param>
        /// <param name="n2"> Segundo numero a operar </param>
        /// <returns> El resultado de la operacion </returns>
        public static double operator -(Numero n1, Numero n2)
        {
            return n1.numero - n2.numero;
        }

        /// <summary>
        /// Permite que al dividir dos objetos numero no haga falta llamar a sus variables
        /// </summary>
        /// <param name="n1"> Primer numero a operar </param>
        /// <param name="n2"> Segundo numero a operar </param>
        /// <returns> El resultado de la operacion </returns>
        public static double operator /(Numero n1, Numero n2)
        {
            return n1.numero / n2.numero;
        }

        /// <summary>
        /// Permite que al multiplicar dos objetos numero no haga falta llamar a sus variables
        /// </summary>
        /// <param name="n1"> Primer numero a operar </param>
        /// <param name="n2"> Segundo numero a operar </param>
        /// <returns> El resultado de la operacion </returns>
        public static double operator *(Numero n1, Numero n2)
        {
            return n1.numero * n2.numero;
        }
    }

        




}
