Advertisement
myloyo

serialization prim

Feb 16th, 2024
813
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.42 KB | None | 0 0
  1. using System;
  2.  
  3. namespace Point_Triangle
  4. {
  5.     [Serializable]
  6.     abstract public class Essence:IComparable<Essence>
  7.     {
  8.         public string Name { get; set; }
  9.         public int CompareTo(Essence item)
  10.         {
  11.             return this.Distance().CompareTo(item.Distance());
  12.         }
  13.         public Essence(string name)
  14.         {
  15.             this.Name = name;
  16.         }
  17.         abstract public double Distance();
  18.         abstract public void Set(params int[] ar);
  19.     }
  20.  }
  21.  
  22.  
  23. using System;
  24.  
  25. namespace Point_Triangle
  26. {
  27.     [Serializable]
  28.     public class PointPlane:Essence
  29.     {
  30.         public int X { get; set; }
  31.         public int Y { get; set; }
  32.         public PointPlane(int x, int y):base("Точка")
  33.         {
  34.             this.X = x;
  35.             this.Y = y;            
  36.         }
  37.         public override string ToString()
  38.         {
  39.             return $"({X}, {Y})";
  40.         }
  41.         public override double Distance()
  42.         {
  43.             return Math.Sqrt(X * X + Y * Y);
  44.         }
  45.         public override void Set(params int[] ar)
  46.         {
  47.             if (ar.Length == 2)
  48.             {
  49.                 X = ar[0];
  50.                 Y = ar[1];
  51.             }
  52.             else
  53.             {
  54.                 throw new Exception("Неверное количество аргументов");
  55.             }
  56.         }
  57.  
  58.     }
  59. }
  60.  
  61. using System;
  62.  
  63. namespace Point_Triangle
  64. {
  65.     [Serializable]
  66.     class PointSpace:PointPlane
  67.     {
  68.         public int Z { get; set; }
  69.         public PointSpace(int x, int y,int z)
  70.             : base(x,y)
  71.         {
  72.             this.Z = z;
  73.         }
  74.         public override string ToString()
  75.         {
  76.             return $"({X}, {Y}, {Z})";
  77.         }
  78.         public override double Distance()
  79.         {
  80.             return Math.Sqrt(X * X + Y * Y+Z*Z);
  81.         }
  82.         public override void Set(params int[] ar)
  83.         {
  84.             if (ar.Length == 3)
  85.             {
  86.                 X = ar[0];
  87.                 Y = ar[1];
  88.                 Z = ar[2];
  89.             }
  90.             else
  91.             {
  92.                 throw new Exception("Неверное количество аргументов");
  93.             }
  94.         }
  95.     }
  96. }
  97.  
  98. using System;
  99.  
  100. namespace Point_Triangle
  101. {
  102.     [Serializable]
  103.     class Segment : Essence
  104.     {
  105.         public PointPlane Begin { get; set; }
  106.         public PointPlane End { get; set; }
  107.         public Segment(int x_begin, int y_begin, int x_end, int y_end)
  108.             : base("Отрезок")
  109.         {
  110.             Begin = new PointPlane(x_begin, y_begin);
  111.             End = new PointPlane(x_end, y_end);
  112.         }
  113.         public override string ToString()
  114.         {
  115.             return $"{Begin}-{End}";
  116.         }
  117.         public override double Distance()
  118.         {
  119.             return (Begin.Distance() >= End.Distance()) ? Begin.Distance() : End.Distance();
  120.         }
  121.         public override void Set(params int[] ar)
  122.         {
  123.             if (ar.Length == 4)
  124.             {
  125.                 Begin.Set(ar[0], ar[1]);
  126.                 End.Set(ar[2], ar[3]);
  127.             }
  128.             else
  129.             {
  130.                 throw new Exception("Неверное количество аргументов");
  131.             }
  132.         }
  133.         public double Length
  134.         {
  135.             get
  136.             {
  137.                 return Math.Sqrt(Math.Pow(Begin.X - End.X, 2) + Math.Pow(Begin.Y - End.Y, 2));
  138.             }
  139.         }
  140.     }
  141. }
  142.  
  143.  
  144. //основная прога
  145. using System;
  146. using System.IO;
  147. using System.Runtime.Serialization.Formatters.Binary;
  148. using System.Collections.Generic;
  149.  
  150. namespace Point_Triangle
  151. {
  152.     class Program
  153.     {
  154.         static void Print(List<Essence> objects)
  155.         {
  156.             if (objects.Count == 0)
  157.             {
  158.                 Console.WriteLine("Список объектов пуст.");
  159.             }
  160.             else
  161.             {
  162.                 Console.WriteLine("Список объектов:");
  163.                 foreach (Essence item in objects)
  164.                 {
  165.                     Console.Write(item.Name+" ");
  166.                     Console.WriteLine(item);
  167.                     switch (item.Name)
  168.                     {
  169.                         case "Точка":
  170.                             Console.WriteLine("Расстояние от точки до начала координат: " + item.Distance());
  171.                             break;
  172.                         case "Отрезок":
  173.                             Console.WriteLine("Расстояние от ближайшей точки отрезка до начала координат: " +
  174.                                 item.Distance());
  175.                             Console.WriteLine("Длина отрезка " + ((Segment)item).Length);
  176.                             break;
  177.                         case "Треугольник":
  178.                             Console.WriteLine("Расстояние от ближайшей точки треугольника до начала координат: " +
  179.                                 item.Distance());
  180.                             Console.WriteLine("Периметр треугольника " + ((Triangle)item).Perimeter);
  181.                             break;
  182.                     }
  183.                    
  184.  
  185.                 }
  186.             }
  187.             Console.WriteLine();
  188.         }
  189.         static void Main(string[] args)
  190.         {
  191.          
  192.             List<Essence> objects = new List<Essence>();
  193.  
  194.             BinaryFormatter formatter = new BinaryFormatter();
  195.  
  196.             using (FileStream f = new FileStream("d:/Point-Triangle-ser/Point-Triangle/input.dat",
  197.                 FileMode.OpenOrCreate))
  198.             {
  199.                 if (f.Length != 0)
  200.                 {
  201.                     objects = (List<Essence>)formatter.Deserialize(f);
  202.                 }
  203.             }
  204.             Print(objects);
  205.  
  206.             objects.Add(new PointPlane(1, 10));
  207.             objects.Add(new PointSpace(1, 1, 1));
  208.             objects.Add(new Segment(-1, 4, 2, 2));
  209.             objects.Add(new Triangle(1, 1, 2, 2, 3, 3));
  210.             Print(objects);
  211.  
  212.             objects.Sort();
  213.             Print(objects);
  214.  
  215.             using (FileStream f = new FileStream("d:/Point-Triangle-ser/Point-Triangle/input.dat",
  216.                 FileMode.OpenOrCreate))
  217.             {
  218.                 formatter.Serialize(f, objects);
  219.             }
  220.  
  221.            
  222.  
  223.            
  224.         }
  225.     }
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement