Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //By MindTerror
- namespace _4lab
- {
- class BritishL
- {
- //1 уставная миля(statute mile) = 5 280 футам = 1609,344 м = 63360 дюймов
- //1 ярд(yard) = 3 футам = 0,9144 м = 36 дюймов
- //1 фут(foot) = 12 дюймам = 0,3048 м
- //1 дюйм(inch) = 2,54 см
- // Поля
- double inch = 0;
- double foot = 0;
- double yard = 0;
- double mile = 0;
- // Конструкторы
- public BritishL()
- {
- inch = 0;
- foot = 0;
- yard = 0;
- mile = 0;
- }
- public BritishL(double inch, double foot, double yard, double mile)
- {
- this.inch = inch;
- this.foot = foot;
- this.yard = yard;
- this.mile = mile;
- }
- // Свойства
- public double Inch { get { return inch; } set { inch = value; } }
- public double Foot { get { return foot; } set { foot = value; } }
- public double Yard { get { return yard; } set { yard = value; } }
- public double Mile { get { return mile; } set { mile = value; } }
- // Методы
- static BritishL getFromInches(double inches)
- {
- bool isNegative = false;
- if (inches < 0) { isNegative = true; inches -= inches; }
- double foots = 0;
- double yards = 0;
- double miles = 0;
- while (inches >= 63360) { inches -= 63360; miles++; }
- while (inches >= 36) { inches -= 36; yards++; }
- while (inches >= 12) { inches -= 12; foots++; }
- if( isNegative ) { inches -= inches; foots -= foots; yards -= yards; miles -= miles; }
- return new BritishL( inches,foots,yards,miles);
- }
- public static BritishL Summ(BritishL bl, BritishL bl2)
- {
- return getFromInches(toInch(bl) + toInch(bl2));
- }
- public static BritishL Diff(BritishL bl, BritishL bl2)
- {
- return getFromInches(toInch(bl) - toInch(bl2));
- }
- public static BritishL Div(BritishL bl, BritishL bl2)
- {
- return getFromInches(toInch(bl) / toInch(bl2));
- }
- public static bool Equal(BritishL bl, BritishL bl2)
- {
- return toInch(bl) == toInch(bl2);
- }
- public static bool NotEqual(BritishL bl, BritishL bl2)
- {
- return toInch(bl) != toInch(bl2);
- }
- public override bool Equals(object obj)
- {
- if (obj == null) return false;
- BritishL compared = (BritishL)obj;
- if (compared == null) return false;
- return toInch(this) == toInch(compared);
- }
- public override string ToString()
- {
- return inch + " дюйм(ов), " + foot + " фут(ов) " + yard + " ярд(ов) " + mile + " миля(ь)";
- }
- public static double toInch(BritishL bl)
- {
- return bl.inch + (bl.foot * 12) + (bl.yard * 36) + (bl.mile * 63360);
- }
- // Перегруженные операции
- public static BritishL operator + (BritishL bl, BritishL bl2)
- {
- return getFromInches(toInch(bl) + toInch(bl2));
- }
- public static BritishL operator - (BritishL bl, BritishL bl2)
- {
- return getFromInches(toInch(bl) - toInch(bl2));
- }
- public static bool operator == (BritishL bl, BritishL bl2)
- {
- return toInch(bl) == toInch(bl2);
- }
- public static bool operator != (BritishL bl, BritishL bl2)
- {
- return toInch(bl) != toInch(bl2);
- }
- public static BritishL operator / (BritishL bl, BritishL bl2)
- {
- return getFromInches(toInch(bl) / toInch(bl2));
- }
- }
- class Angle
- {
- //Поля
- double degrees = 0;
- int minutes = 0;
- // Конструкторы
- public Angle()
- {
- degrees = 0;
- minutes = 0;
- }
- public Angle(double degrees,int minutes)
- {
- if (minutes < 0) throw new Exception("Минуты не могут быть отрицательными");
- this.degrees = degrees;
- this.minutes = minutes;
- }
- public Angle(double degrees)
- {
- this.degrees = degrees;
- }
- public Angle(int minutes)
- {
- if (minutes < 0) throw new Exception("Минуты не могут быть отрицательными");
- this.minutes = minutes;
- }
- // Методы
- public double getDegrees()
- {
- return degrees;
- }
- public void setDegrees(double degree)
- {
- degrees = degree;
- }
- public int getMinutes()
- {
- return minutes;
- }
- public void setMinutes(int minutes)
- {
- if (minutes < 0) throw new Exception("Минуты не могут быть отрицательными");
- this.minutes = minutes;
- }
- private double degFromMin(int min)
- {
- return min / 60.0;
- }
- public double toDiapazon()
- {
- return (Math.Abs(degrees) + degFromMin(minutes)) % 360;
- }
- public double toRadian()
- {
- return (Math.Abs(degrees) + degFromMin(minutes)) * Math.PI / 180;
- }
- public void angleIncrease(double degrees,int minutes)
- {
- this.degrees += degrees;
- int newMinutes = this.minutes + minutes;
- if (newMinutes < 0) this.minutes = 0;
- else this.minutes = newMinutes;
- }
- public void angleDecrease(double degrees, int minutes)
- {
- this.degrees -= degrees;
- int newMinutes = this.minutes - minutes;
- if (newMinutes < 0) this.minutes = 0;
- else this.minutes = newMinutes;
- }
- public double sin()
- {
- return Math.Sin(this.toRadian());
- }
- public override string ToString()
- {
- return degrees + "°'" + minutes + "'";
- }
- // Перегруженные операции
- static public Angle operator ++(Angle ang)
- {
- return new Angle(ang.degrees+1, ang.minutes + 1);
- }
- static public Angle operator --(Angle ang)
- {
- return new Angle(ang.degrees - 1, ang.minutes - 1 < 0 ? 0 : ang.minutes - 1);
- }
- static public bool operator ==(Angle ang, Angle ang2)
- {
- return ang.minutes == ang2.minutes && ang.degrees == ang2.degrees;
- }
- static public bool operator !=(Angle ang, Angle ang2)
- {
- return !(ang.minutes == ang2.minutes && ang.degrees == ang2.degrees);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("Добро пожаловать, вы запустили 4 практическую работу, выберите действие: \n 1 - Аудиторная работа\n 2 - Самостоятельная работа");
- int choose;
- string s = Console.ReadLine();
- while (!Int32.TryParse(s, out choose) || (choose != 1 && choose != 2))
- {
- Console.WriteLine("\nВыберите действие: \n 1 - Лабораторная работа\n 2 - Самостоятельная работа");
- s = Console.ReadLine();
- }
- switch (choose) {
- case 1:
- // Аудиторная
- Console.WriteLine("Автор|Псевдоним|Название программы: \nВиноградов Артур ПБ-22 | MIND TERROR | British measures of length\n");
- Console.WriteLine("=======Задание========\nСоздать класс BritishL, представляющий собой английские меры длины: миля, ярд, фут и дюйм.\nРеализовать операции сложения, вычитания, деления и сравнения мер длины.\nРеализовать операцию представления меры длины в дюймах.\n\n");
- Console.WriteLine("====== Тест конструкторов =====\n");
- // Конструкторы
- //Первый вариант конструктора
- BritishL bl = new BritishL();
- Console.WriteLine("(Первый конструктор) bl: " + bl.ToString());
- //Второй вариант конструктора
- BritishL bl2 = new BritishL(30, 30, 30, 30);
- Console.WriteLine("(Второй конструктор) bl2: " + bl2.ToString());
- // Демонстрация создания массивов мер длин
- Console.WriteLine("\n===== Тест создания массивов мер длин (Вывод с помощью цикла):");
- BritishL[] measuresMassive = new BritishL[] { new BritishL(), new BritishL(13, 13, 13, 13), new BritishL(49, 49, 49, 49) };
- foreach (BritishL ble in measuresMassive)
- {
- Console.WriteLine(ble.ToString());
- }
- Console.WriteLine("\n====== Тест свойств =====\n");
- // Свойства
- //Тест присваивания
- bl.Inch = 10;
- bl.Foot = 10;
- bl.Yard = 10;
- bl.Mile = 10;
- Console.WriteLine("(Тест присваивания к свойствам) Присвоили всем свойствам bl - 10: " + bl.ToString());
- //Тест получения свойства
- Console.WriteLine("(Тест получения свойства) Присвоили 10 дюймов к bl2, стало " + bl.Inch + " дюйм(ов)");
- Console.WriteLine("\n====== Тест операций и методов =====\n");
- //Сложение (Операция)
- Console.WriteLine("(Операция) Прибавили bl к bl2: " + (bl + bl2).ToString());
- //Сложение (Метод)
- Console.WriteLine("(Метод) Прибавили bl к bl2: " + BritishL.Summ(bl, bl2).ToString());
- //Вычитаение (Операция)
- Console.WriteLine("(Операция) Вычли из bl2 bl: " + (bl2 - bl).ToString());
- //Вычитаение (Метод)
- Console.WriteLine("(Метод) Вычли из bl2 bl: " + BritishL.Diff(bl2, bl).ToString());
- //Деление (Операция)
- Console.WriteLine("(Операция) Поделили bl2 на bl: " + (bl2 / bl).ToString());
- //Деление (Метод)
- Console.WriteLine("(Метод) Поделили bl2 на bl: " + BritishL.Div(bl2, bl).ToString());
- //Равны (Операция)
- Console.WriteLine("(Операция) Равны ли bl2 и bl: " + (bl2 == bl == true ? "Да" : "Нет"));
- //Равны (Метод)
- Console.WriteLine("(Метод) Равны ли bl2 и bl: " + (BritishL.Equal(bl, bl2) == true ? "Да" : "Нет"));
- //Не равны (Операция)
- Console.WriteLine("(Операция) Не равны ли bl2 и bl: " + (bl2 != bl == true ? "Да" : "Нет"));
- //Не равны (Метод)
- Console.WriteLine("(Метод) Не равны ли bl2 и bl: " + (BritishL.NotEqual(bl2, bl) == true ? "Да" : "Нет"));
- //Приведение к дюймам
- Console.WriteLine("Конвертация bl2 в дюймы: " + BritishL.toInch(bl2).ToString() + " дюйм(ов)");
- Console.WriteLine("Конвертация bl1 в дюймы: " + BritishL.toInch(bl).ToString() + " дюйм(ов)");
- break;
- case 2:
- // Самостоятельная работа
- Console.WriteLine("Автор|Псевдоним|Название программы: \nВиноградов Артур ПБ-22 | MIND TERROR | Angle class\n");
- Console.WriteLine("=======Задание========\nСоздать класс Angle для работы с углами на плоскости, задаваемыми величиной вградусах и минутах.\nОбязательно должны быть реализованы: перевод в радианы, приведение кдиапазону 0–360, увеличение и уменьшение угла на заданную величину, получение синуса,сравнение углов");
- // Конструкторы
- Console.WriteLine("\n====== Тест конструкторов =====\n");
- Angle ang1 = new Angle();
- Console.WriteLine("(Первый конструктор) ang1:" + ang1.ToString());
- Angle ang2 = new Angle(10,10);
- Console.WriteLine("(Второй конструктор) ang2:" + ang2.ToString());
- Angle ang3 = new Angle(20);
- Console.WriteLine("(Третий конструктор) ang3:" + ang3.ToString());
- Angle ang4 = new Angle(500.0);
- Console.WriteLine("(Четвёртый конструктор) ang4:" + ang4.ToString());
- Console.WriteLine("\n===== Тест создания массивов мер длин (Вывод с помощью цикла):");
- Angle[] angles = new Angle[] { new Angle(), new Angle(100), new Angle(100.0), new Angle(50, 50) };
- foreach(Angle ang in angles)
- {
- Console.WriteLine(ang.ToString());
- }
- //Методы
- Console.WriteLine("\n====== Тест Методов =====\n");
- // Перевод в радианы
- Console.WriteLine("Перевод в радианы ang2: " + ang2.toRadian() + " Рад.");
- Console.WriteLine("Перевод в радианы ang3: " + ang3.toRadian() + " Рад.");
- //Приведение к диапазону 0-360
- Console.WriteLine("\nПриведение ang4 к диапазону 0-360: " + ang4.toDiapazon());
- //Увеличение угла / Уменьшение угла
- ang1.angleIncrease(45, 10);
- Console.WriteLine("\nУвеличение угла ang1 на 45 градусов 10 минут: " + ang1.ToString());
- ang1.angleDecrease(21, 7);
- Console.WriteLine("Уменьшение угла ang1 на 21 градус 7 минут: " + ang1.ToString());
- //Получение синуса
- Console.WriteLine("Синус угла ang1: " + ang1.sin());
- //Сравнение углов
- Console.WriteLine("\nРавны ли ang1 и ang2: " + (ang1 == ang2 == true ? "Да" : "Нет"));
- ang1.angleIncrease(0, 7);
- Console.WriteLine("Прибавим к минутам ang1 - 7: " +ang1.ToString());
- ang1.angleDecrease(14, 0);
- Console.WriteLine("Вычтем из градусов ang1 - 14: " + ang1.ToString());
- Console.WriteLine("Равны ли ang1 и ang2: " + (ang1 == ang2 == true ? "Да" : "Нет"));
- break;
- }
- Console.WriteLine("\nНажмите любую клавишу для выхода из программы...");
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement