Загрузка данных


1 вар 1 зад

using System;

class VALUE : IComparable<VALUE>
{
    public long WholePart;
    public ushort FractionPart;

    public VALUE(long whole, ushort fraction)
    {
        WholePart = whole;
        FractionPart = fraction;
    }

    private double ToDouble()
    {
        return WholePart + FractionPart / 1000.0;
    }

    public static VALUE FromDouble(double value)
    {
        long whole = (long)value;
        ushort fraction = (ushort)((value - whole) * 1000);

        return new VALUE(whole, fraction);
    }

    // Сложение
    public static VALUE operator +(VALUE a, VALUE b)
    {
        return FromDouble(a.ToDouble() + b.ToDouble());
    }

    // Вычитание
    public static VALUE operator -(VALUE a, VALUE b)
    {
        return FromDouble(a.ToDouble() - b.ToDouble());
    }

    // Умножение
    public static VALUE operator *(VALUE a, VALUE b)
    {
        return FromDouble(a.ToDouble() * b.ToDouble());
    }

    // Сравнение
    public int CompareTo(VALUE other)
    {
        return ToDouble().CompareTo(other.ToDouble());
    }

    public static bool operator >(VALUE a, VALUE b)
    {
        return a.CompareTo(b) > 0;
    }

    public static bool operator <(VALUE a, VALUE b)
    {
        return a.CompareTo(b) < 0;
    }

    public override string ToString()
    {
        return $"{WholePart},{FractionPart:D3}";
    }

    static void Main()
    {
        VALUE a = new VALUE(5, 250);
        VALUE b = new VALUE(2, 500);

        Console.WriteLine("a = " + a);
        Console.WriteLine("b = " + b);

        Console.WriteLine("a + b = " + (a + b));
        Console.WriteLine("a - b = " + (a - b));
        Console.WriteLine("a * b = " + (a * b));

        Console.WriteLine("a > b : " + (a > b));
    }
}

1 вар 2 зад

using System;

abstract class Triangle
{
    protected double a;
    protected double b;
    protected double angle;

    public Triangle(double a, double b, double angle)
    {
        this.a = a;
        this.b = b;
        this.angle = angle;
    }

    public abstract double Area();
    public abstract double Perimeter();
}

// Прямоугольный
class RightTriangle : Triangle
{
    public RightTriangle(double a, double b)
        : base(a, b, 90) { }

    public override double Area()
    {
        return a * b / 2;
    }

    public override double Perimeter()
    {
        return a + b + Math.Sqrt(a * a + b * b);
    }
}

// Равнобедренный
class IsoscelesTriangle : Triangle
{
    public IsoscelesTriangle(double side, double baseSide, double angle)
        : base(side, baseSide, angle) { }

    public override double Area()
    {
        double rad = angle * Math.PI / 180;
        return a * b * Math.Sin(rad) / 2;
    }

    public override double Perimeter()
    {
        double c = Math.Sqrt(a * a + b * b -
                 2 * a * b * Math.Cos(angle * Math.PI / 180));

        return a + b + c;
    }
}

// Равносторонний
class EquilateralTriangle : Triangle
{
    public EquilateralTriangle(double side)
        : base(side, side, 60) { }

    public override double Area()
    {
        return Math.Sqrt(3) * a * a / 4;
    }

    public override double Perimeter()
    {
        return 3 * a;
    }
}

class Program
{
    static void Main()
    {
        Triangle t1 = new RightTriangle(3, 4);
        Triangle t2 = new IsoscelesTriangle(5, 5, 60);
        Triangle t3 = new EquilateralTriangle(6);

        Console.WriteLine("Прямоугольный:");
        Console.WriteLine("S = " + t1.Area());
        Console.WriteLine("P = " + t1.Perimeter());

        Console.WriteLine();

        Console.WriteLine("Равнобедренный:");
        Console.WriteLine("S = " + t2.Area());
        Console.WriteLine("P = " + t2.Perimeter());

        Console.WriteLine();

        Console.WriteLine("Равносторонний:");
        Console.WriteLine("S = " + t3.Area());
        Console.WriteLine("P = " + t3.Perimeter());
    }
}

2 вар 1 зад

using System;

class MONEY : IComparable<MONEY>
{
    public long Rubles;
    public byte Kopecks;

    public MONEY(long rubles, byte kopecks)
    {
        Rubles = rubles;
        Kopecks = kopecks;
    }

    private double ToDouble()
    {
        return Rubles + Kopecks / 100.0;
    }

    public static MONEY FromDouble(double value)
    {
        long rubles = (long)value;
        byte kopecks = (byte)((value - rubles) * 100);

        return new MONEY(rubles, kopecks);
    }

    // Сложение
    public static MONEY operator +(MONEY a, MONEY b)
    {
        return FromDouble(a.ToDouble() + b.ToDouble());
    }

    // Вычитание
    public static MONEY operator -(MONEY a, MONEY b)
    {
        return FromDouble(a.ToDouble() - b.ToDouble());
    }

    // Деление сумм
    public static MONEY operator /(MONEY a, MONEY b)
    {
        return FromDouble(a.ToDouble() / b.ToDouble());
    }

    // Деление на число
    public static MONEY operator /(MONEY a, double number)
    {
        return FromDouble(a.ToDouble() / number);
    }

    // Умножение на число
    public static MONEY operator *(MONEY a, double number)
    {
        return FromDouble(a.ToDouble() * number);
    }

    // Сравнение
    public int CompareTo(MONEY other)
    {
        return ToDouble().CompareTo(other.ToDouble());
    }

    public static bool operator >(MONEY a, MONEY b)
    {
        return a.CompareTo(b) > 0;
    }

    public static bool operator <(MONEY a, MONEY b)
    {
        return a.CompareTo(b) < 0;
    }

    public override string ToString()
    {
        return $"{Rubles},{Kopecks:D2}";
    }

    static void Main()
    {
        MONEY a = new MONEY(10, 50);
        MONEY b = new MONEY(3, 25);

        Console.WriteLine("a = " + a);
        Console.WriteLine("b = " + b);

        Console.WriteLine("a + b = " + (a + b));
        Console.WriteLine("a - b = " + (a - b));
        Console.WriteLine("a / b = " + (a / b));
        Console.WriteLine("a / 2 = " + (a / 2.0));
        Console.WriteLine("a * 1.5 = " + (a * 1.5));

        Console.WriteLine("a > b : " + (a > b));
    }
}


2 вар 2 зад

using System;

abstract class Payment
{
    public abstract void CalculateRoots();
    public abstract void PrintResult();
}

// Линейное уравнение
class Linear : Payment
{
    private double a;
    private double b;
    private double x;

    public Linear(double a, double b)
    {
        this.a = a;
        this.b = b;
    }

    public override void CalculateRoots()
    {
        x = -b / a;
    }

    public override void PrintResult()
    {
        Console.WriteLine("Корень линейного уравнения:");
        Console.WriteLine("x = " + x);
    }
}

// Квадратное уравнение
class Square : Payment
{
    private double a;
    private double b;
    private double c;

    private double x1;
    private double x2;

    public Square(double a, double b, double c)
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public override void CalculateRoots()
    {
        double d = b * b - 4 * a * c;

        if (d > 0)
        {
            x1 = (-b + Math.Sqrt(d)) / (2 * a);
            x2 = (-b - Math.Sqrt(d)) / (2 * a);
        }
        else if (d == 0)
        {
            x1 = x2 = -b / (2 * a);
        }
        else
        {
            Console.WriteLine("Корней нет");
        }
    }

    public override void PrintResult()
    {
        Console.WriteLine("Корни квадратного уравнения:");
        Console.WriteLine("x1 = " + x1);
        Console.WriteLine("x2 = " + x2);
    }
}

class Program
{
    static void Main()
    {
        Payment p1 = new Linear(2, -4);

        p1.CalculateRoots();
        p1.PrintResult();

        Console.WriteLine();

        Payment p2 = new Square(1, -5, 6);

        p2.CalculateRoots();
        p2.PrintResult();
    }
}