Наследование и метод CompareTo() - C#
Формулировка задачи:
Добрый день. Задача следующая :
1. Создать абстрактный класс Figure с функциями вычисления площади и периметра, а также функцией, выводящей информацию о фигуре на экран.
2. В абстрактном классе Figure реализовать метод CompareTo так, чтобы можно было отсортировать объекты по их площадям.
3. Создать производные классы: Rectangle (прямоугольник), Circle (круг), Triangle (треугольник).
4. Создать массив n фигур и вывести полную информацию о фигурах на экран, отсортировав объекты по их площадям.
Мой код.
Файл test.txt
3
1 2
3
4 5 6 7
Насколько правильно написан метод Print();
Помогите разобраться.
using System; using System.IO; namespace ConsoleApplication17 { abstract class Figure : IComparable { abstract public double Area(); abstract public double Perimeter(); abstract public void ShowFigure(); public int CompareTo(object obj) { Figure s = (Figure)obj; if (Area() == s.Area()) { return 0; } else if (Area() > s.Area()) { return 1; } else { return -1; } } static public Figure[] Input() { using (StreamReader fileIn = new StreamReader("d:/test.txt")) { int n = int.Parse(fileIn.ReadLine()); Figure[] ar = new Figure[n]; for (int i = 0; i < n; i++) { string[] text = fileIn.ReadLine().Split(' '); if (text.Length == 2) { ar[i] = new Rectangle(int.Parse(text[0]), int.Parse(text[1])); } else if (text.Length == 1) { ar[i] = new Circle(double.Parse(text[0])); } else if (text.Length == 4) { ar[i] = new Triangle(double.Parse(text[0]), double.Parse(text[1]), double.Parse(text[2]), double.Parse(text[3])); } else { Console.WriteLine("Неверное количество аргументов"); } } return ar; } } static public void Print(Figure[] array) { for (int i = 1; i < array.Length; i++) { if(array[i - 1].CompareTo(array[i]) < array[i].CompareTo(array[i -1])) { object temp = array[i - 1]; array[i - 1] = array[i]; array[i] = (Figure)temp; } } foreach (Figure item in array) { item.ShowFigure(); } } } }
using System; namespace ConsoleApplication17 { class Triangle : Figure { private double a; private double b; private double c; private double h; public Triangle(double a, double b, double c, double h) { this.a = a; this.b = b; this.c = c; this.h = h; } public override double Area() { return (a * h) / 2; } public override double Perimeter() { return a + b + c; } public override void ShowFigure() { Console.WriteLine("Площадь круга с основанием a = {0} и высотой h = {1}, равна {2}.", a, h, Area()); Console.WriteLine("Периметр круга со сторонами а = {0}, b = {1} и с = {2} равен {3}.", a, b, c, Perimeter()); } } }
namespace ConsoleApplication17 { class Circle : Figure { private double r; public Circle(double r) { this.r = r; } public override double Area() { return 3.14 * Math.Pow(r, 2); } public override double Perimeter() { return 2 * 3.14 * r; } public override void ShowFigure() { Console.WriteLine("Площадь круга с радиусом r = {0} равна {1}.", r, Area()); Console.WriteLine("Периметр круга с радиусом r = {0} равен {1}.", r, Perimeter()); } } }
using System; namespace ConsoleApplication17 { class Rectangle : Figure { private int a; private int b; public Rectangle(int a, int b) { this.a = a; this.b = b; } public override double Area() { return a * b; } public override double Perimeter() { return (a + b) * 2; } public override void ShowFigure() { Console.WriteLine("Площадь прямоугольника со сторонами a = {0} и b = {1} равна {2}.", a, b, Area()); Console.WriteLine("Периметр прямоугольника со сторонами а = {0} и b = {1} равен {2}.", a, b, Perimeter()); } } }
using System; namespace ConsoleApplication17 { class Program { static void Main(string[] args) { Figure[] array = Figure.Input(); Figure.Print(array); } } }
Решение задачи: «Наследование и метод CompareTo()»
textual
Листинг программы
static public void SortAndPrint(Figure[] array) { Array.Sort(array); foreach (Figure item in array) item.ShowFigure(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д