Наследование и метод CompareTo() - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Задача следующая : 1. Создать абстрактный класс Figure с функциями вычисления площади и периметра, а также функцией, выводящей информацию о фигуре на экран. 2. В абстрактном классе Figure реализовать метод CompareTo так, чтобы можно было отсортировать объекты по их площадям. 3. Создать производные классы: Rectangle (прямоугольник), Circle (круг), Triangle (треугольник). 4. Создать массив n фигур и вывести полную информацию о фигурах на экран, отсортировав объекты по их площадям. Мой код.
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);    
        }
    }
}
Файл test.txt 3 1 2 3 4 5 6 7 Насколько правильно написан метод Print(); Помогите разобраться.

Решение задачи: «Наследование и метод CompareTo()»

textual
Листинг программы
        static public void SortAndPrint(Figure[] array)
        {
            Array.Sort(array);
 
            foreach (Figure item in array)
                item.ShowFigure();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы