Curso de iniciación a la programación con C# |
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.