static void Main(string[] args)
        {
            #region Prueba1

            //CalculadoraSimple cs = new CalculadoraSimple();
            //cs.Ejecuta(new Operacion('+', 2));
            //cs.Ejecuta(new Operacion('+', 3));
            //cs.Ejecuta(new Operacion('*', 10));
            //Console.WriteLine(cs.ResultadoActual()); //imprime 50
            //cs.Undo();
            //Console.WriteLine(cs.ResultadoActual()); //imprime 5
            //cs.Undo();
            //Console.WriteLine(cs.ResultadoActual()); //imprime 2
            //cs.Redo();
            //Console.WriteLine(cs.ResultadoActual()); //imprime 5



            #endregion
            #region Prueba2
            //CalculadoraSimple cs = new CalculadoraSimple();
            //cs.Ejecuta(new Operacion('*', 0)); //operacion 1
            //Console.WriteLine(cs.ResultadoActual()); // imprime 0
            //cs.Ejecuta(new Operacion('/', 5)); //operacion 2
            //Console.WriteLine(cs.ResultadoActual()); // imprime 0
            //cs.Ejecuta(new Operacion('+', 10)); //operacion 3
            //cs.Ejecuta(new Operacion('+', 10)); //operacion 4
            //cs.Ejecuta(new Operacion('+', 10)); //operacion 5
            //cs.Ejecuta(new Operacion('+', 10)); //operacion 6
            //Console.WriteLine(cs.ResultadoActual()); // imprime 40
            //cs.Undo(); //des-hace la opereación 6
            //Console.WriteLine(cs.ResultadoActual()); // imprime 30
            //cs.Ejecuta(new Operacion('+', 5)); //operacion 7
            //cs.Redo(); //sin efecto pq la instrucción inmediata anterior no fue "Undo"
            //Console.WriteLine(cs.ResultadoActual()); // imprime 35
            //cs.Undo(); //des-hace la opereación 7
            //cs.Undo(); //des-hace la opereación 5 (la operacion 6 ya había sido des-hecha)
            //Console.WriteLine(cs.ResultadoActual()); // imprime 20
            //cs.Redo(); //re-hace la operacion 5
            //cs.Redo(); //re-hace la operacion 7
            //cs.Redo(); //sin efecto porque solo se habían hecho dos Undo inmediatamente antes
            //Console.WriteLine(cs.ResultadoActual()); // imprime 35 //Note que en este caso la operacion 6 fue des-hecha y no interviene en el resultado
            //foreach (var operacion in cs.OperacionesEfectivas())
            //{
            //    Console.WriteLine(operacion);
            //}
            ////Note que la operación 6 no se considera efectiva (fue deshecha y no se rehízo)
            ////Esto imprime las operaciones 1, 2, 3, 4, 5 y 7, es decir se escribiría
            //// (* 0) // (/ 5) // (+ 10) // (+ 10) // (+ 10)// (+,5)



            #endregion
            #region Prueba3

            CalculadoraSimple cs = new CalculadoraSimple();
            cs.Ejecuta(new Operacion('+', 5));       //operacion 1
            cs.Undo();                               //des-hace la operacion 1
            cs.Undo();                               //sin efecto, no existen instrucciones efectivas
            Console.WriteLine(cs.ResultadoActual()); //imprime 0
            cs.Ejecuta(new Operacion('/', 0));       //lanza DivideByZeroException



            #endregion
        }