Сортировка по параметрам и поиск по значению в массиве - C#
Формулировка задачи:
1) сортировка: отсортировать фигуры по типам сначала квадраты потом треугольники, круги
2) поиск: определить есть ли фигура с площадью > 10
Код:
using System; using System.Linq; class TwoDShape { double pri_size; public TwoDShape() { Size = 0.0; name = "null"; } public TwoDShape(double x, string n) { Size = x; name = n; } public TwoDShape(TwoDShape ob) { Size = ob.Size; name = ob.name; } public double Size { get { return pri_size; } set { pri_size = value < 0 ? -value : value; } } public string name { get; set; } public virtual double Area() { Console.WriteLine("Метод Area() должен быть переопределен"); return 0.0; } } class Triangle : TwoDShape { string Style; public Triangle() { Style = "null"; } public Triangle(string s, double x) : base(x, "Треугольник") { Style = s; } public Triangle(double x) : base(x, "Треугольник") { Style = "Равносторонний"; } public override double Area() { return (Math.Sqrt(3) / 4) * (Size * Size); } public void ShowStyle() { Console.WriteLine("Треугольник " + Style); } } class Rectangle : TwoDShape { public Rectangle(double x) : base(x, "Квадрат") { } public Rectangle(Rectangle ob) : base(ob) { } public override double Area() { return Size * Size; } } class Circle : TwoDShape { public Circle(double x) : base(x, "Круг") { } public Circle(Circle ob) : base(ob) { } public override double Area() { return Math.PI * (Size * Size); } } class DynShapes { static void Main() { TwoDShape[] shapes = new TwoDShape[10]; shapes[0] = new Triangle(2.0); shapes[1] = new Rectangle(10.0); shapes[2] = new Circle(3.0); shapes[3] = new Rectangle(4.0); shapes[4] = new Triangle(7.0); shapes[5] = new Circle(5.0); shapes[6] = new Rectangle(6.0); shapes[7] = new Triangle(1.0); shapes[8] = new Circle(8.0); shapes[9] = new Circle(10.0); Console.WriteLine("\tПлощадь\t\0|Параметр|Обьект\n"); //вывод общий Console.WriteLine(new string('=', 50)); for (int i = 0; i < 10; i++) { Console.WriteLine("{0,17}|{1,8}|{2,0}", shapes[i].Area(), shapes[i].Size, shapes[i].name); Console.WriteLine(); } Array.Sort(shapes, new Comparison<TwoDShape>(CompareShapes)); Console.WriteLine("параметры по возрастанию.\n\tПлощадь\t\0|Параметр|Обьект\n "); //вывод сортированных параметров Console.WriteLine(new string('=', 50)); for (int i = 0; i < 10; i++) { Console.WriteLine("{0,17}|{1,8}|{2,0}", shapes[i].Area(), shapes[i].Size, shapes[i].name); Console.WriteLine(); } Array.Sort(shapes, new Comparison<TwoDShape>(CompareArea)); //вывод сортированной площади (убыв) Console.WriteLine("убывание площади\n\tПлощадь\t\0|Параметр|Обьект\n "); Console.WriteLine(new string('=', 50)); for (int i = 0; i < 10; i++) { Console.WriteLine("{0,17}|{1,8}|{2,0}", shapes[i].Area(), shapes[i].Size, shapes[i].name); Console.WriteLine(); } } private static int CompareShapes(TwoDShape x, TwoDShape y) //сортированных параметров { return x.Size.CompareTo(y.Size); } private static int CompareArea(TwoDShape z, TwoDShape w) //сортированной площади (убыв) { return w.Area().CompareTo(z.Area()); } }
спасибо покорно за помощь с поиском разобрался, помогите с сортировкой , действительно не понимаю
Решение задачи: «Сортировка по параметрам и поиск по значению в массиве»
textual
Листинг программы
private static int TypesComparison(TwoDShape x, TwoDShape y) { var xCircle = x as Circle; var xTriangle = x as Triangle; var xRectangle = x as Rectangle; var yCircle = y as Circle; var yTriangle = y as Triangle; var yRectangle = y as Rectangle; if (xCircle != null) { if (yCircle != null) return 0; return -1; } if (xTriangle != null) { if (yTriangle != null) return 0; if (yRectangle != null) return -1; return 1; } if (xRectangle != null) { if (yRectangle != null) return 0; return 1; } throw new Exception(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д