Advertisement
istomina_sofia

С# классы2

Dec 29th, 2021
1,071
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.63 KB | None | 0 0
  1. using System;
  2. using System.Drawing;
  3. namespace Ллаба_5
  4. {
  5.     public interface IShape
  6.     {
  7.         public double GetSquare();
  8.         public double GetPerimetr();
  9.     }
  10.  
  11.     public class Quadrangle : IShape
  12.     {
  13.         protected Point p1, p2, p3, p4;
  14.         protected double sideA, sideB, sideC, sideD;
  15.         protected double diag_1, diag_2;
  16.         public double Diag1 => diag_1;
  17.         public double Diag2 => diag_2;
  18.         public double side { get => sideA; }
  19.  
  20.         public Quadrangle(Point p1, Point p2, Point p3, Point p4)
  21.         {
  22.             this.p1 = p1;
  23.             this.p2 = p2;
  24.             this.p3 = p3;
  25.             this.p4 = p4;
  26.  
  27.             if (IsQuadrangle())
  28.             {
  29.                 SetSides();
  30.                 SetDiagonals();
  31.             }
  32.             else
  33.             {
  34.                 Console.WriteLine("Фигура не четырёхугольник");
  35.             }
  36.         }
  37.         public Quadrangle(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
  38.         {
  39.             p1 = new Point(x1, y1);
  40.             p2 = new Point(x2, y2);
  41.             p3 = new Point(x3, y3);
  42.             p4 = new Point(x4, y4);
  43.  
  44.             if (IsQuadrangle())
  45.             {
  46.                 SetSides();
  47.                 SetDiagonals();
  48.             }
  49.             else
  50.             {
  51.                 Console.WriteLine("Фигура не четырёхугольник");
  52.             }
  53.         }
  54.  
  55.         public bool IsQuadrangle()
  56.         {
  57.             // проверим лежат ли точки на одной прямой
  58.             double X(double x, double x1, double x2) => (x - x1) / (x2 - x1);
  59.             double Y(double y, double y1, double y2) => (y - y1) / (y2 - y1);
  60.             if (X(p3.X, p1.X, p2.X) == Y(p3.Y, p1.Y, p2.Y)
  61.                 || X(p4.X, p1.X, p2.X) == Y(p4.Y, p1.Y, p2.Y)) return false;
  62.             return true;
  63.         }
  64.  
  65.         protected void SetSides()
  66.         {
  67.             sideA = Math.Sqrt(Math.Pow((p2.X - p1.X), 2) + Math.Pow((p2.Y - p1.Y), 2));
  68.             sideB = Math.Sqrt(Math.Pow((p3.X - p2.X), 2) + Math.Pow((p3.Y - p2.Y), 2));
  69.             sideC = Math.Sqrt(Math.Pow((p4.X - p3.X), 2) + Math.Pow((p4.Y - p3.Y), 2));
  70.             sideD = Math.Sqrt(Math.Pow((p1.X - p4.X), 2) + Math.Pow((p1.Y - p4.Y), 2));
  71.         }
  72.  
  73.         protected void SetDiagonals()
  74.         {
  75.             diag_1 = Math.Sqrt(Math.Pow((p1.X - p3.X), 2) + Math.Pow((p1.Y - p3.Y), 2));//считаем диагонали
  76.             diag_2 = Math.Sqrt(Math.Pow((p2.X - p4.X), 2) + Math.Pow((p2.Y - p4.Y), 2));
  77.         }
  78.         public double GetSquare()
  79.         {
  80.             double polP = GetPerimetr() / 2; //полупериметр
  81.             double alpha = Math.Acos((Math.Pow(sideA, 2) + Math.Pow(sideB, 2) - Math.Pow(diag_1, 2)) / (2 * sideA * sideB));
  82.             double beta = Math.Acos((Math.Pow(sideC, 2) + Math.Pow(sideD, 2) - Math.Pow(diag_2, 2)) / (2 * sideB * sideD));
  83.             var s = Math.Sqrt((polP - sideA) * (polP - sideB) * (polP - sideC) * (polP - sideD) - sideA * sideB * sideC * sideD * Math.Cos((alpha + beta) / 2));
  84.  
  85.             return s;
  86.         }
  87.         public double GetPerimetr() => sideA + sideB + sideC + sideD;
  88.         public virtual void GetShapeStat()
  89.         {
  90.             if (IsQuadrangle())
  91.                 Console.WriteLine($"Четырёхугольник с вершинами\n" +
  92.                 $"p1 = ({p1.X}; {p1.Y}), p2 = ({p2.X}; {p2.Y}), p3 = ({p3.X}; {p3.Y}), p4 = ({p4.X}; {p4.Y})\n" +
  93.                 $"диагоналями {diag_1} и {diag_2}\n" +
  94.                 $"сторонами A = {sideA}, B = {sideB}, C = {sideC}, D = {sideD}" +
  95.                 $"Площадью = {GetSquare()} и периметром {GetPerimetr()}");
  96.         }
  97.     }
  98.  
  99.     public class Parallelogram : Quadrangle
  100.     {
  101.         Circle c1;
  102.         public Parallelogram(Point p1, Point p2, Point p3, Point p4)
  103.             : base(p1, p2, p3, p4)
  104.         {
  105.             if (!IsParallelogram())
  106.                 Console.WriteLine("Фигура не парраллелограм");
  107.  
  108.             // окружность вписана в параллелограмм тогда и только тогда
  109.             // когда параллелограмм - ромб
  110.             if (sideA == sideB && sideA == sideC && sideA == sideD)
  111.             {
  112.                 c1 = new Circle((Diag1 / 2) * (Diag2 / 2) / side);
  113.             }
  114.         }
  115.  
  116.         public Parallelogram(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
  117.             : base(x1, y1, x2, y2, x3, y3, x4, y4)
  118.         {
  119.             if (!IsParallelogram())
  120.                 Console.WriteLine("Фигура не парраллелограмм");
  121.  
  122.             // окружность вписана в параллелограмм тогда и только тогда
  123.             // когда параллелограмм - ромб
  124.             if (sideA == sideB && sideA == sideC && sideA == sideD)
  125.             {
  126.                 c1 = new Circle((Diag1 / 2) * (Diag2 / 2) / side);
  127.             }
  128.         }
  129.  
  130.         public bool IsParallelogram() => sideA == sideC && sideB == sideD;
  131.  
  132.         public override void GetShapeStat()
  133.         {
  134.             if (IsParallelogram())
  135.                 Console.WriteLine($"Параллелограмм с вершинами\n" +
  136.                 $"p1 = ({p1.X}; {p1.Y}), p2 = ({p2.X}; {p2.Y}), p3 = ({p3.X}; {p3.Y}), p4 = ({p4.X}; {p4.Y})\n" +
  137.                 $"диагоналями {diag_1} и {diag_2}\n" +
  138.                 $"сторонами A = {sideA}, B = {sideB}, C = {sideC}, D = {sideD}" +
  139.                 $"Площадью = {GetSquare()} и периметром {GetPerimetr()}");
  140.             else Console.WriteLine("Фигура не парраллелограм");
  141.         }
  142.     }
  143.  
  144.  
  145.     public class Parallelepiped : Parallelogram
  146.     {
  147.         private double h;
  148.  
  149.         public Parallelepiped(Point p1, Point p2, Point p3, Point p4, double h)
  150.             : base(p1, p2, p3, p4) { this.h = h; }
  151.  
  152.         public Parallelepiped(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, double h)
  153.                 : base(x1, y1, x2, y2, x3, y3, x4, y4) { this.h = h; }
  154.  
  155.         public double GetVolume() => base.GetSquare() * h;
  156.         public new double GetSquare() => base.GetSquare() * 2 + 2 * sideA * h + 2 * sideB * h;
  157.  
  158.         public override void GetShapeStat()
  159.         {
  160.             Console.WriteLine($"Параллелепипед с вершинами\n" +
  161.             $"p1 = ({p1.X}; {p1.Y}), p2 = ({p2.X}; {p2.Y}), p3 = ({p3.X}; {p3.Y}), p4 = ({p4.X}; {p4.Y})\n" +
  162.             $"сторонами A = {sideA}, B = {sideB}, C = {sideC}, D = {sideD} и высотой {h} \n" +
  163.             $"Площадью = {GetSquare()} и объёмом {GetSquare()}");
  164.         }
  165.     }
  166.  
  167.     public class Circle : IShape
  168.     {
  169.         double r;
  170.         public double R { get => r; }
  171.         public Circle(double r)
  172.         {
  173.             this.r = r;
  174.         }
  175.  
  176.         public double GetSquare()
  177.         {
  178.             return Math.PI * r * r;
  179.         }
  180.         public double GetPerimetr()
  181.         {
  182.             return 2 * Math.PI * r;
  183.         }
  184.         public void GetShapeStat()
  185.         {
  186.             Console.WriteLine($"Круг с радиусом = {r}\n" +
  187.                 $"периметром = {GetPerimetr()} и площадью = {GetSquare()}");
  188.         }
  189.  
  190.         public void ChangeR(Parallelogram p)
  191.         {
  192.             // если в параллелограмм можно вписать окружность то это ромб
  193.             // тогда радиус ищем по известной формуле для высоты опущенной на гипотенузу
  194.             r = (p.Diag1 / 2) * (p.Diag2 / 2) / p.side;
  195.         }
  196.  
  197.     }
  198.  
  199.     class Program
  200.     {
  201.         public static void Task1()
  202.         {
  203.             int n;
  204.             int m;
  205.             int x1, x2, x3, x4, y1, y2, y3, y4;
  206.             Console.WriteLine("Введите количество четырехугольников: ");
  207.             n = Convert.ToInt32(Console.ReadLine());
  208.             double AvgS = 0;
  209.             double maxS = 0;
  210.             double minS = double.MaxValue;
  211.             int nmax = 0;
  212.             int nmin = 0;
  213.             // int sravn = 0;
  214.             for (int i = 0; i < n; i++)
  215.             {
  216.                 Console.WriteLine("Четырёхугольник " + (i + 1));
  217.                 Console.Write("x1: ");
  218.                 x1 = Convert.ToInt32(Console.ReadLine());
  219.                 Console.Write("y1: ");
  220.                 y1 = Convert.ToInt32(Console.ReadLine());
  221.                 Console.Write("x2: ");
  222.                 x2 = Convert.ToInt32(Console.ReadLine());
  223.                 Console.Write("y2: ");
  224.                 y2 = Convert.ToInt32(Console.ReadLine());
  225.                 Console.Write("x3: ");
  226.                 x3 = Convert.ToInt32(Console.ReadLine());
  227.                 Console.Write("y3: ");
  228.                 y3 = Convert.ToInt32(Console.ReadLine());
  229.                 Console.Write("x4: ");
  230.                 x4 = Convert.ToInt32(Console.ReadLine());
  231.                 Console.Write("y4: ");
  232.                 y4 = Convert.ToInt32(Console.ReadLine());
  233.                 Quadrangle a = new Quadrangle(x1, y1, x2, y2, x3, y3, x4, y4);
  234.                 if (a.IsQuadrangle())
  235.                 {
  236.                     AvgS += a.GetSquare();
  237.                 }
  238.                 else Console.WriteLine("Фигура не четырёхугольник");
  239.             }
  240.             AvgS /= n;
  241.             Console.WriteLine("среднюю  площадь четырехугольников = " + AvgS);
  242.             Console.WriteLine();
  243.  
  244.  
  245.             Console.WriteLine("Введите количество параллелограммов: ");
  246.             m = Convert.ToInt32(Console.ReadLine());
  247.             // int sravn = 0;
  248.             for (int i = 0; i < m; i++)
  249.             {
  250.                 Console.WriteLine("Параллелограмм " + (i + 1));
  251.                 Console.Write("x1: ");
  252.                 x1 = Convert.ToInt32(Console.ReadLine());
  253.                 Console.Write("y1: ");
  254.                 y1 = Convert.ToInt32(Console.ReadLine());
  255.                 Console.Write("x2: ");
  256.                 x2 = Convert.ToInt32(Console.ReadLine());
  257.                 Console.Write("y2: ");
  258.                 y2 = Convert.ToInt32(Console.ReadLine());
  259.                 Console.Write("x3: ");
  260.                 x3 = Convert.ToInt32(Console.ReadLine());
  261.                 Console.Write("y3: ");
  262.                 y3 = Convert.ToInt32(Console.ReadLine());
  263.                 Console.Write("x4: ");
  264.                 x4 = Convert.ToInt32(Console.ReadLine());
  265.                 Console.Write("y4: ");
  266.                 y4 = Convert.ToInt32(Console.ReadLine());
  267.                 Parallelogram a = new Parallelogram(x1, y1, x2, y2, x3, y3, x4, y4);
  268.                 if (a.GetSquare() > maxS)
  269.                 {
  270.                     maxS = a.GetSquare();
  271.                     nmax = i + 1;
  272.                 }
  273.                 if (a.GetSquare() < minS)
  274.                 {
  275.                     minS = a.GetSquare();
  276.                     nmin = i + 1;
  277.                 }
  278.             }
  279.             Console.WriteLine($"Параллелограмм с максимальной площадью ({maxS}): " + nmax);
  280.             Console.WriteLine($"Параллелограмм с минимальной площадью ({minS}): " + nmin);
  281.             Console.ReadLine();
  282.         }
  283.  
  284.         static void Main(string[] args)
  285.         {
  286.             Task1();
  287.             Circle c1 = new Circle(3);
  288.             c1.GetShapeStat();
  289.         }
  290.     }
  291. }
  292.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement