Advertisement
Fanta-MindTerror

4lab 2course OAIP

May 21st, 2020
1,031
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 16.61 KB | None | 0 0
  1. //By MindTerror
  2. namespace _4lab
  3. {
  4.     class BritishL
  5.     {
  6.         //1 уставная миля(statute mile) = 5 280 футам = 1609,344 м = 63360 дюймов
  7.         //1 ярд(yard) = 3 футам = 0,9144 м = 36 дюймов
  8.         //1 фут(foot) = 12 дюймам = 0,3048 м
  9.         //1 дюйм(inch) = 2,54 см
  10.  
  11.         // Поля
  12.         double inch = 0;
  13.         double foot = 0;
  14.         double yard = 0;
  15.         double mile = 0;
  16.  
  17.         // Конструкторы
  18.         public BritishL()
  19.         {
  20.             inch = 0;
  21.             foot = 0;
  22.             yard = 0;
  23.             mile = 0;
  24.         }
  25.  
  26.         public BritishL(double inch, double foot, double yard, double mile)
  27.         {
  28.             this.inch = inch;
  29.             this.foot = foot;
  30.             this.yard = yard;
  31.             this.mile = mile;
  32.         }
  33.  
  34.         // Свойства
  35.         public double Inch { get { return inch; } set { inch = value; } }
  36.         public double Foot { get { return foot; } set { foot = value; } }
  37.         public double Yard { get { return yard; } set { yard = value; } }
  38.         public double Mile { get { return mile; } set { mile = value; } }
  39.  
  40.         // Методы
  41.         static BritishL getFromInches(double inches)
  42.         {
  43.             bool isNegative = false;
  44.             if (inches < 0) { isNegative = true; inches -= inches; }
  45.  
  46.             double foots = 0;
  47.             double yards = 0;
  48.             double miles = 0;
  49.             while (inches >= 63360) { inches -= 63360; miles++; }
  50.             while (inches >= 36) { inches -= 36; yards++; }
  51.             while (inches >= 12) { inches -= 12; foots++; }
  52.             if( isNegative ) { inches -= inches; foots -= foots; yards -= yards; miles -= miles; }
  53.             return new BritishL( inches,foots,yards,miles);
  54.         }
  55.  
  56.         public static BritishL Summ(BritishL bl, BritishL bl2)
  57.         {
  58.             return getFromInches(toInch(bl) + toInch(bl2));
  59.         }
  60.  
  61.         public static BritishL Diff(BritishL bl, BritishL bl2)
  62.         {
  63.             return getFromInches(toInch(bl) - toInch(bl2));
  64.         }
  65.  
  66.         public static BritishL Div(BritishL bl, BritishL bl2)
  67.         {
  68.             return getFromInches(toInch(bl) / toInch(bl2));
  69.  
  70.         }
  71.  
  72.         public static bool Equal(BritishL bl, BritishL bl2)
  73.         {
  74.             return toInch(bl) == toInch(bl2);
  75.  
  76.         }
  77.  
  78.         public static bool NotEqual(BritishL bl, BritishL bl2)
  79.         {
  80.             return toInch(bl) != toInch(bl2);
  81.         }
  82.  
  83.         public override bool Equals(object obj)
  84.         {
  85.             if (obj == null) return false;
  86.             BritishL compared = (BritishL)obj;
  87.             if (compared == null) return false;
  88.             return toInch(this) == toInch(compared);
  89.         }
  90.  
  91.         public override string ToString()
  92.         {
  93.             return inch + " дюйм(ов), " + foot + " фут(ов) " + yard + " ярд(ов) " + mile + " миля(ь)";
  94.         }
  95.  
  96.         public static double toInch(BritishL bl)
  97.         {
  98.             return bl.inch + (bl.foot * 12) + (bl.yard * 36) + (bl.mile * 63360);
  99.         }
  100.  
  101.         // Перегруженные операции
  102.         public static BritishL operator + (BritishL bl, BritishL bl2)
  103.         {
  104.             return getFromInches(toInch(bl) + toInch(bl2));
  105.         }
  106.  
  107.         public static BritishL operator - (BritishL bl, BritishL bl2)
  108.         {
  109.             return getFromInches(toInch(bl) - toInch(bl2));
  110.         }
  111.  
  112.         public static bool operator == (BritishL bl, BritishL bl2)
  113.         {
  114.             return toInch(bl) == toInch(bl2);
  115.         }
  116.  
  117.         public static bool operator != (BritishL bl, BritishL bl2)
  118.         {
  119.             return toInch(bl) != toInch(bl2);
  120.         }
  121.  
  122.         public static BritishL operator / (BritishL bl, BritishL bl2)
  123.         {
  124.             return getFromInches(toInch(bl) / toInch(bl2));
  125.         }
  126.  
  127.  
  128.     }
  129.  
  130.     class Angle
  131.     {
  132.         //Поля
  133.         double degrees = 0;
  134.         int minutes = 0;
  135.  
  136.         // Конструкторы
  137.         public Angle()
  138.         {
  139.             degrees = 0;
  140.             minutes = 0;
  141.         }
  142.  
  143.         public Angle(double degrees,int minutes)
  144.         {
  145.             if (minutes < 0) throw new Exception("Минуты не могут быть отрицательными");
  146.             this.degrees = degrees;
  147.             this.minutes = minutes;
  148.         }
  149.  
  150.         public Angle(double degrees)
  151.         {
  152.             this.degrees = degrees;
  153.         }
  154.  
  155.         public Angle(int minutes)
  156.         {
  157.             if (minutes < 0) throw new Exception("Минуты не могут быть отрицательными");
  158.             this.minutes = minutes;
  159.         }
  160.        
  161.         // Методы
  162.         public double getDegrees()
  163.         {
  164.             return degrees;
  165.         }
  166.  
  167.         public void setDegrees(double degree)
  168.         {
  169.             degrees = degree;
  170.         }
  171.  
  172.         public int getMinutes()
  173.         {
  174.             return minutes;
  175.         }
  176.  
  177.         public void setMinutes(int minutes)
  178.         {
  179.             if (minutes < 0) throw new Exception("Минуты не могут быть отрицательными");
  180.             this.minutes = minutes;
  181.         }
  182.  
  183.         private double degFromMin(int min)
  184.         {
  185.             return min / 60.0;
  186.         }
  187.  
  188.         public double toDiapazon()
  189.         {
  190.             return (Math.Abs(degrees) + degFromMin(minutes)) % 360;
  191.         }
  192.  
  193.         public double toRadian()
  194.         {
  195.             return (Math.Abs(degrees) + degFromMin(minutes)) * Math.PI / 180;
  196.         }
  197.  
  198.         public void angleIncrease(double degrees,int minutes)
  199.         {
  200.             this.degrees += degrees;
  201.  
  202.             int newMinutes = this.minutes + minutes;
  203.             if (newMinutes < 0) this.minutes = 0;
  204.             else this.minutes = newMinutes;
  205.         }
  206.  
  207.         public void angleDecrease(double degrees, int minutes)
  208.         {
  209.             this.degrees -= degrees;
  210.             int newMinutes = this.minutes - minutes;
  211.             if (newMinutes < 0) this.minutes = 0;
  212.             else this.minutes = newMinutes;
  213.         }
  214.  
  215.         public double sin()
  216.         {
  217.             return Math.Sin(this.toRadian());
  218.         }
  219.  
  220.         public override string ToString()
  221.         {
  222.             return degrees + "°'" + minutes + "'";
  223.         }
  224.  
  225.         // Перегруженные операции
  226.         static public Angle operator ++(Angle ang)
  227.         {
  228.            return new Angle(ang.degrees+1, ang.minutes + 1);
  229.         }
  230.  
  231.         static public Angle operator --(Angle ang)
  232.         {
  233.             return new Angle(ang.degrees - 1, ang.minutes - 1 < 0 ? 0 : ang.minutes - 1);
  234.         }
  235.  
  236.         static public bool operator ==(Angle ang, Angle ang2)
  237.         {
  238.             return ang.minutes == ang2.minutes && ang.degrees == ang2.degrees;
  239.         }
  240.  
  241.         static public bool operator !=(Angle ang, Angle ang2)
  242.         {
  243.             return !(ang.minutes == ang2.minutes && ang.degrees == ang2.degrees);
  244.         }
  245.  
  246.     }
  247.  
  248.     class Program
  249.     {
  250.         static void Main(string[] args)
  251.         {
  252.             Console.WriteLine("Добро пожаловать, вы запустили 4 практическую работу, выберите действие: \n 1 - Аудиторная работа\n 2 - Самостоятельная работа");
  253.  
  254.             int choose;
  255.             string s = Console.ReadLine();
  256.             while (!Int32.TryParse(s, out choose) || (choose != 1 && choose != 2))
  257.             {
  258.                 Console.WriteLine("\nВыберите действие: \n 1 - Лабораторная работа\n 2 - Самостоятельная работа");
  259.                 s = Console.ReadLine();
  260.             }
  261.  
  262.             switch (choose) {
  263.                 case 1:
  264.                     // Аудиторная
  265.                     Console.WriteLine("Автор|Псевдоним|Название программы: \nВиноградов Артур ПБ-22 | MIND TERROR | British measures of length\n");
  266.                     Console.WriteLine("=======Задание========\nСоздать класс BritishL, представляющий собой английские меры длины: миля, ярд, фут и дюйм.\nРеализовать операции сложения, вычитания, деления и сравнения мер длины.\nРеализовать операцию представления меры длины в дюймах.\n\n");
  267.  
  268.                     Console.WriteLine("====== Тест конструкторов =====\n");
  269.                     // Конструкторы
  270.                     //Первый вариант конструктора
  271.                     BritishL bl = new BritishL();
  272.                     Console.WriteLine("(Первый конструктор) bl: " + bl.ToString());
  273.                     //Второй вариант конструктора
  274.                     BritishL bl2 = new BritishL(30, 30, 30, 30);
  275.                     Console.WriteLine("(Второй конструктор) bl2: " + bl2.ToString());
  276.  
  277.                     // Демонстрация создания массивов мер длин
  278.                     Console.WriteLine("\n===== Тест создания массивов мер длин (Вывод с помощью цикла):");
  279.                     BritishL[] measuresMassive = new BritishL[] { new BritishL(), new BritishL(13, 13, 13, 13), new BritishL(49, 49, 49, 49) };
  280.                     foreach (BritishL ble in measuresMassive)
  281.                     {
  282.                         Console.WriteLine(ble.ToString());
  283.                     }
  284.  
  285.                     Console.WriteLine("\n====== Тест свойств =====\n");
  286.                     // Свойства
  287.                     //Тест присваивания
  288.                     bl.Inch = 10;
  289.                     bl.Foot = 10;
  290.                     bl.Yard = 10;
  291.                     bl.Mile = 10;
  292.                     Console.WriteLine("(Тест присваивания к свойствам) Присвоили всем свойствам bl - 10: " + bl.ToString());
  293.                     //Тест получения свойства
  294.                     Console.WriteLine("(Тест получения свойства) Присвоили 10 дюймов к bl2, стало " + bl.Inch + " дюйм(ов)");
  295.  
  296.                     Console.WriteLine("\n====== Тест операций и методов =====\n");
  297.                     //Сложение (Операция)
  298.                     Console.WriteLine("(Операция) Прибавили bl к bl2: " + (bl + bl2).ToString());
  299.                     //Сложение (Метод)
  300.                     Console.WriteLine("(Метод) Прибавили bl к bl2: " + BritishL.Summ(bl, bl2).ToString());
  301.  
  302.                     //Вычитаение (Операция)
  303.                     Console.WriteLine("(Операция) Вычли из bl2 bl: " + (bl2 - bl).ToString());
  304.                     //Вычитаение (Метод)
  305.                     Console.WriteLine("(Метод) Вычли из bl2 bl: " + BritishL.Diff(bl2, bl).ToString());
  306.  
  307.                     //Деление (Операция)
  308.                     Console.WriteLine("(Операция) Поделили bl2 на bl: " + (bl2 / bl).ToString());
  309.                     //Деление (Метод)
  310.                     Console.WriteLine("(Метод) Поделили bl2 на bl: " + BritishL.Div(bl2, bl).ToString());
  311.  
  312.                     //Равны (Операция)
  313.                     Console.WriteLine("(Операция) Равны ли bl2 и bl: " + (bl2 == bl == true ? "Да" : "Нет"));
  314.                     //Равны (Метод)
  315.                     Console.WriteLine("(Метод) Равны ли bl2 и bl: " + (BritishL.Equal(bl, bl2) == true ? "Да" : "Нет"));
  316.  
  317.                     //Не равны (Операция)
  318.                     Console.WriteLine("(Операция) Не равны ли bl2 и bl: " + (bl2 != bl == true ? "Да" : "Нет"));
  319.                     //Не равны (Метод)
  320.                     Console.WriteLine("(Метод) Не равны ли bl2 и bl: " + (BritishL.NotEqual(bl2, bl) == true ? "Да" : "Нет"));
  321.  
  322.                     //Приведение к дюймам
  323.                     Console.WriteLine("Конвертация bl2 в дюймы: " + BritishL.toInch(bl2).ToString() + " дюйм(ов)");
  324.                     Console.WriteLine("Конвертация bl1 в дюймы: " + BritishL.toInch(bl).ToString() + " дюйм(ов)");
  325.                 break;
  326.                 case 2:
  327.                     // Самостоятельная работа
  328.                     Console.WriteLine("Автор|Псевдоним|Название программы: \nВиноградов Артур ПБ-22 | MIND TERROR | Angle class\n");
  329.                     Console.WriteLine("=======Задание========\nСоздать класс Angle для работы с углами на плоскости, задаваемыми величиной вградусах и минутах.\nОбязательно должны быть реализованы: перевод в радианы, приведение кдиапазону 0–360, увеличение и уменьшение угла на заданную величину, получение синуса,сравнение углов");
  330.  
  331.                     // Конструкторы
  332.                     Console.WriteLine("\n====== Тест конструкторов =====\n");
  333.                     Angle ang1 = new Angle();
  334.                     Console.WriteLine("(Первый конструктор) ang1:" + ang1.ToString());
  335.                     Angle ang2 = new Angle(10,10);
  336.                     Console.WriteLine("(Второй конструктор) ang2:" + ang2.ToString());
  337.                     Angle ang3 = new Angle(20);
  338.                     Console.WriteLine("(Третий конструктор) ang3:" + ang3.ToString());
  339.                     Angle ang4 = new Angle(500.0);
  340.                     Console.WriteLine("(Четвёртый конструктор) ang4:" + ang4.ToString());
  341.  
  342.                     Console.WriteLine("\n===== Тест создания массивов мер длин (Вывод с помощью цикла):");
  343.                     Angle[] angles = new Angle[] { new Angle(), new Angle(100), new Angle(100.0), new Angle(50, 50) };
  344.                     foreach(Angle ang in angles)
  345.                     {
  346.                         Console.WriteLine(ang.ToString());
  347.                     }
  348.  
  349.                     //Методы
  350.                     Console.WriteLine("\n====== Тест Методов =====\n");
  351.                     // Перевод в радианы
  352.                     Console.WriteLine("Перевод в радианы ang2: " + ang2.toRadian() + " Рад.");
  353.                     Console.WriteLine("Перевод в радианы ang3: " + ang3.toRadian() + " Рад.");
  354.  
  355.                     //Приведение к диапазону 0-360
  356.                     Console.WriteLine("\nПриведение ang4 к диапазону 0-360: " + ang4.toDiapazon());
  357.  
  358.                     //Увеличение угла / Уменьшение угла
  359.                     ang1.angleIncrease(45, 10);
  360.                     Console.WriteLine("\nУвеличение угла ang1 на 45 градусов 10 минут: " + ang1.ToString());
  361.                     ang1.angleDecrease(21, 7);
  362.                     Console.WriteLine("Уменьшение угла ang1 на 21 градус 7 минут: " + ang1.ToString());
  363.  
  364.                     //Получение синуса
  365.                     Console.WriteLine("Синус угла ang1: " + ang1.sin());
  366.  
  367.                     //Сравнение углов
  368.                     Console.WriteLine("\nРавны ли ang1 и ang2: " + (ang1 == ang2 == true ? "Да" : "Нет"));
  369.                     ang1.angleIncrease(0, 7);
  370.                     Console.WriteLine("Прибавим к минутам ang1 - 7: " +ang1.ToString());
  371.                     ang1.angleDecrease(14, 0);
  372.                     Console.WriteLine("Вычтем из градусов ang1 - 14: " + ang1.ToString());
  373.                     Console.WriteLine("Равны ли ang1 и ang2: " + (ang1 == ang2 == true ? "Да" : "Нет"));
  374.                     break;
  375.             }
  376.             Console.WriteLine("\nНажмите любую клавишу для выхода из программы...");
  377.  
  378.             Console.ReadKey();
  379.  
  380.         }
  381.     }
  382. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement