EJERCICIO 5 (ENTREGA 12)

 

RESOLUCIÓN DEL EJERCICIO

 

Este ha sido bastante hermoso, sin duda. Aquí lo tienes.

 

using System;

 

namespace EjercicioMonedas

{

    public class Euro

    {

        public double valor;

 

        private Euro() {}

 

        // Conversiones de de double a Euro y de Euro a double

        public static implicit operator Euro(double d)

        {

            Euro e=new Euro();

            e.valor=Math.Round(d,2);

 

            return e;

        }

 

        public static implicit operator double(Euro e)

        {

            return e.valor;

        }

 

        // Conversión de Peseta a Euro

        public static implicit operator Euro(Peseta p)

        {

            Euro e=new Euro();

            e.valor=Math.Round(p/166.386,2);

 

            return e;

        }

 

        // Operadores de comparación para la compatibilidad Euro y double

        public static bool operator==(Euro e, double d)

        {

            return e.valor==d;

        }

 

        public static bool operator!=(Euro e, double d)

        {

            return e.valor!=d;

        }

 

        public static bool operator>=(Euro e, double d)

        {

            return e.valor>=d;

        }

 

        public static bool operator>(Euro e, double d)

        {

            return e.valor>d;

        }

 

        public static bool operator<=(Euro e, double d)

        {

            return e.valor<=d;

        }

 

        public static bool operator<(Euro e, double d)

        {

            return e.valor<d;

        }

 

        // Operadores de suma y resta para compatibilidad Euro y double

        public static Euro operator+(Euro e, double d)

        {

            Euro ret=new Euro();

            ret.valor=e.valor+Math.Round(d,2);

 

            return ret;

        }

 

        public static Euro operator-(Euro e, double d)

        {

            Euro ret=new Euro();

            ret.valor=e.valor-Math.Round(d,2);

 

            return ret;

        }

 

        // Operadores de incremento y decremento

        public static Euro operator++(Euro e)

        {

            e.valor++;

            return e;

        }

 

        public static Euro operator--(Euro e)

        {

            e.valor--;

            return e;

        }

 

        // Operadores de suma y resta para compatibilidad Euro y Peseta

        public static Euro operator+(Euro e, Peseta p)

        {

            Euro ret=new Euro();

            ret.valor=e.valor+Math.Round(p/166.386,2);

 

            return ret;

        }

 

        public static Euro operator-(Euro e, Peseta p)

        {

            Euro ret=new Euro();

            ret.valor=e.valor-Math.Round(p/166.386,2);

 

            return ret;

        }

 

        // Operadores de comparación para compatibilidad Euro y Peseta

        public static bool operator==(Euro e, Peseta p)

        {

            return e.valor==Math.Round(p/166.386,2);

        }

 

        public static bool operator!=(Euro e, Peseta p)

        {

            return e.valor!=Math.Round(p/166.386,2);

        }

 

        public static bool operator>=(Euro e, Peseta p)

        {

            return e.valor>=Math.Round(p/166.386,2);

        }

        

        public static bool operator>(Euro e, Peseta p)

        {

            return e.valor>Math.Round(p/166.386,2);

        }

 

        public static bool operator<=(Euro e, Peseta p)

        {

            return e.valor<=Math.Round(p/166.386,2);

        }

        

        public static bool operator<(Euro e, Peseta p)

        {

            return e.valor<Math.Round(p/166.386,2);

        }

    }

 

    public class Peseta

    {

        public double valor;

 

        private Peseta() {}

 

        // Conversiones de double a Peseta y de Peseta a double

        public static implicit operator Peseta(double d)

        {

            Peseta p=new Peseta();

            p.valor=Math.Round(d);

 

            return p;

        }

 

        public static implicit operator double(Peseta p)

        {

            return p.valor;

        }

 

        // Conversión de Euro a Peseta

        public static implicit operator Peseta(Euro e)

        {

            Peseta p=new Peseta();

            p.valor=Math.Round(e*166.386);

 

            return p;

        }

 

        // Operadores de comparación para compatiblidad Peseta y double

        public static bool operator==(Peseta p, double d)

        {

            return p.valor==d;

        }

 

        public static bool operator!=(Peseta p, double d)

        {

            return p.valor!=d;

        }

 

        public static bool operator>=(Peseta p, double d)

        {

            return p.valor>=d;

        }

 

        public static bool operator>(Peseta p, double d)

        {

            return p.valor>d;

        }

 

        public static bool operator<=(Peseta p, double d)

        {

            return p.valor<=d;

        }

 

        public static bool operator<(Peseta p, double d)

        {

            return p.valor<d;

        }

 

        // Operadores de suma y resta para compatibilidad Peseta y double

        public static Peseta operator+(Peseta p, double d)

        {

            Peseta ret=new Peseta();

            ret.valor=p.valor+Math.Round(d);

 

            return ret;

        }

 

        public static Peseta operator-(Peseta p, double d)

        {

            Peseta ret=new Peseta();

            ret.valor=p.valor-Math.Round(d);

 

            return ret;

        }

 

        // Operadores de incremento y decremento

        public static Peseta operator++(Peseta p)

        {

            p.valor++;

            return p;

        }

 

        public static Peseta operator--(Peseta p)

        {

            p.valor--;

            return p;

        }

 

        // Operadores de suma y resta para compatibilidad Peseta y Euro

        public static Peseta operator+(Peseta p, Euro e)

        {

            Peseta ret=new Peseta();

            ret.valor=p.valor+Math.Round(e*166.386);

 

            return ret;

        }

 

        public static Peseta operator-(Peseta p, Euro e)

        {

            Peseta ret=new Peseta();

            ret.valor=p.valor+Math.Round(e*166.386);

 

            return ret;

        }

 

        // Operadores de comparación para compatibilidad Peseta y Euro

        public static bool operator==(Peseta p, Euro e)

        {

            return e==Math.Round(p.valor/166.386,2);

        }

 

        public static bool operator!=(Peseta p, Euro e)

        {

            return e!=Math.Round(p.valor/166.386,2);

        }

 

        public static bool operator>=(Peseta p, Euro e)

        {

            return p.valor>=Math.Round(e*166.386);

        }

 

        public static bool operator>(Peseta p, Euro e)

        {

            return p.valor>Math.Round(e*166.386);

        }

 

        public static bool operator<=(Peseta p, Euro e)

        {

            return p.valor<=Math.Round(e*166.386);

        }

 

        public static bool operator<(Peseta p, Euro e)

        {

            return p.valor<Math.Round(e*166.386);

        }

    }

 

    class EjercicioMonedasApp

    {

        static void Main()

        {

            double d;

            Euro e;

            Peseta p;

            string a;

 

            Console.Write("Dame un valor para double: ");

            d=Double.Parse(Console.ReadLine());

 

            Console.Write("Dame un valor para Euros: ");

            e=Double.Parse(Console.ReadLine());

 

            Console.Write("Dame un valor para Pesetas: ");

            p=Double.Parse(Console.ReadLine());

 

            Comparaciones(e,p,d);

            Console.WriteLine();

 

            Console.Write("Pulsa INTRO para asignar Euros=Pesetas");

            a=Console.ReadLine();

            e=p;

            Console.WriteLine("Euros=Pesetas asignado. Las comparaciones son:");

            Comparaciones(e,p,d);

 

            Console.Write("Pulsa INTRO para asignar Euros=double");

            a=Console.ReadLine();

            e=d;

            Console.WriteLine("Euros=double asignado. Las comparaciones son:");

            Comparaciones(e,p,d);

 

            Console.Write("Pulsa INTRO para asignar Pesetas=Euros");

            a=Console.ReadLine();

            p=e;

            Console.WriteLine("Pesetas=Euros asignado. Las comparaciones son:");

            Comparaciones(e,p,d);

 

            Console.Write("Pulsa INTRO para asignar Pesetas=double");

            a=Console.ReadLine();

            p=d;

            Console.WriteLine("Pesetas=double asignado. Las comparaciones son:");

            Comparaciones(e,p,d);

 

            Console.Write("Pulsa INTRO para asignar double=Euros");

            a=Console.ReadLine();

            d=e;

            Console.WriteLine("double=Euros asignado. Las comparaciones son:");

            Comparaciones(e,p,d);

 

            Console.Write("Pulsa INTRO para asignar double=Pesetas");

            a=Console.ReadLine();

            d=p;

            Console.WriteLine("double=Pesetas asignado. Las comparaciones son:");

            Comparaciones(e,p,d);

 

            Console.Write("Pulsa INTRO para Euros++ y Pesetas++");

            a=Console.ReadLine();

            e++;p++;

            Console.WriteLine("Euros ahora vale: {0}; Pesetas ahora vale: {1}",e.valor,p.valor);

            Console.WriteLine();

 

            Console.Write("Pulsa INTRO para Euros-- y Pesetas--");

            a=Console.ReadLine();

            e--;p--;

            Console.WriteLine("Euros ahora vale: {0}; Pesetas ahora vale: {1}",e.valor,p.valor);

            Console.WriteLine();

 

            Console.Write("Pulsa INTRO para Euros += Pesetas");

            a=Console.ReadLine();

            Console.WriteLine("Sumando {0} Euros + {1} Pesetas",e.valor,p.valor);

            e+=p;

            Console.WriteLine("El resultado es {0} Euros",e.valor);

            Console.WriteLine();

 

            Console.Write("Pulsa INTRO para Euros += double");

            a=Console.ReadLine();

            Console.WriteLine("Sumando {0} Euros + {1} double",e.valor,d);

            e+=d;

            Console.WriteLine("El resultado es {0} Euros",e.valor);

            Console.WriteLine();

            

            Console.Write("Pulsa INTRO para Pesetas += Euros");

            a=Console.ReadLine();

            Console.WriteLine("Sumando {0} Pesetas + {1} Euros",p.valor,e.valor);

            p+=e;

            Console.WriteLine("El resultado es {0} Pesetas",p.valor);

            Console.WriteLine();

 

            Console.Write("Pulsa INTRO para Pesetas += double");

            a=Console.ReadLine();

            Console.WriteLine("Sumando {0} Pesetas + {1} double",p.valor,d);

            p+=d;

            Console.WriteLine("El resultado es {0} Pesetas",p.valor);

            Console.WriteLine();

 

            Console.WriteLine("Listo. Pulsa una INTRO, que ya hemos terminado");

            a=Console.ReadLine();

        }

 

        static void Comparaciones (Euro e, Peseta p, double d)

        {

            Console.WriteLine("La comparación {0} euros == {1} double devuelve {2}",e.valor,d,e==d);

            Console.WriteLine("La comparación {0} euros == {1} pesetas devuelve {2}",e.valor,p.valor,e==p);

            Console.WriteLine("La comparación {0} pesetas == {1} double devuelve {2}",p.valor,d,p==d);

            Console.WriteLine();

 

            Console.WriteLine("La comparación {0} euros != {1} double devuelve {2}",e.valor,d,e!=d);

            Console.WriteLine("La comparación {0} euros != {1} pesetas devuelve {2}",e.valor,p.valor,e!=p);

            Console.WriteLine("La comparación {0} pesetas != {1} double devuelve {2}",p.valor,d,p!=d);

            Console.WriteLine();

 

            Console.WriteLine("La comparación {0} euros >= {1} double devuelve {2}",e.valor,d,e>=d);

            Console.WriteLine("La comparación {0} euros >= {1} pesetas devuelve {2}",e.valor,p.valor,e>=p);

            Console.WriteLine("La comparación {0} pesetas >= {1} double devuelve {2}",p.valor,d,p>=d);

            Console.WriteLine();

 

            Console.WriteLine("La comparación {0} euros > {1} double devuelve {2}",e.valor,d,e>d);

            Console.WriteLine("La comparación {0} euros > {1} pesetas devuelve {2}",e.valor,p.valor,e>p);

            Console.WriteLine("La comparación {0} pesetas > {1} double devuelve {2}",p.valor,d,p>d);

            Console.WriteLine();

 

            Console.WriteLine("La comparación {0} euros <= {1} double devuelve {2}",e.valor,d,e<=d);

            Console.WriteLine("La comparación {0} euros <= {1} pesetas devuelve {2}",e.valor,p.valor,e<=p);

            Console.WriteLine("La comparación {0} pesetas <= {1} double devuelve {2}",p.valor,d,p<=d);

            Console.WriteLine();

 

            Console.WriteLine("La comparación {0} euros < {1} double devuelve {2}",e.valor,d,e<d);

            Console.WriteLine("La comparación {0} euros < {1} pesetas devuelve {2}",e.valor,p.valor,e<p);

            Console.WriteLine("La comparación {0} pesetas < {1} double devuelve {2}",p.valor,d,p<d);

            Console.WriteLine();

        }

    }

}

 

Sigue este vínculo si te lo quieres bajar.