Во всех классах реализовать интерфейс IComparable и перегрузить метод CompareTo для сравнения объектов - C#

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

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

В программах требуется описать базовый класс (возможно, абстрактный), в котором задается интерфейс для производных классов. Во всех классах реализовать интерфейс IComparable и перегрузить метод CompareTo для сравнения объектов по каким-либо полям на усмотрение разработчика программы. Функция Main должна содержать массив из элементов базового класса, заполненный ссылками на производные классы. В этой функции должно демонстрироваться использование всех разработанных элементов классов, а также сортировка массива объектов. Вот программа написанная с помощью наследования, нужно переделать на делегаты и интерфейсы.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Наследование
  6. {
  7. //Создать класс Paiг (пара целых чисел).
  8. //Определить метод умножения на число и операцию сложения пар (a,b) + (c,d) = (а + b, с + d).
  9. //Определить класс- наследник Money с полями: рубли и копейки.
  10. //Переопределить операцию сложения и определить методы вычитания денежных сумм.
  11. class Program
  12. {
  13. class Pair
  14. {
  15. public int a, b;
  16. public Pair(int a, int b)
  17. {
  18. this.a = a; this.b = b;
  19. }
  20. public static Pair operator *(int b, Pair a)
  21. {
  22. return new Pair(a.a * b, a.b * b);
  23. }
  24. public static Pair operator +(Pair a, Pair b)
  25. {
  26. return new Pair(a.a + a.b, b.a + b.b);
  27. }
  28. public virtual string show()
  29. {
  30. return Convert.ToString(a) + "," + Convert.ToString(b);
  31. }
  32. }
  33. class Money : Pair
  34. {
  35. public Money(int a, int b)
  36. : base(a, b) { }
  37. public static Money operator +(Money a, Money b)
  38. {
  39. int r, k;
  40. r = a.a + b.a;
  41. if ((a.b + b.b) >= 100)
  42. { r++; k = a.b + b.b - 100; }
  43. else
  44. k = a.b + b.b;
  45. return new Money(r, k);
  46. }
  47. public static Money operator *(int b, Money a)
  48. {
  49. int r, k;
  50. r = b * a.a;
  51. if ((a.b * b) >= 100)
  52. { r = r + a.b / 100; k = a.b % 100; }
  53. else
  54. k = a.b * b;
  55. return new Money(r, k);
  56. }
  57. public static Money operator -(Money a, Money b)
  58. {
  59. int r, k;
  60. r = a.a - b.a;
  61. if ((a.b - b.b) < 0)
  62. { r--; k = a.b - b.b + 100; }
  63. else
  64. k = a.b - b.b;
  65. return new Money(r, k);
  66. }
  67. public override string show()
  68. {
  69. return Convert.ToString(a) + " руб " + Convert.ToString(b) + " коп";
  70. }
  71. }
  72. static void Main(string[] args)
  73. {
  74. Pair p1 = new Pair(6, 4);
  75. Pair p2 = new Pair(8, 9);
  76. Money c1 = new Money(10, 5);
  77. Money c2 = new Money(7, 97);
  78. Console.WriteLine("Класс Pair");
  79. Console.WriteLine("(" + p1.show() + ")" + " + " + "(" + p2.show() + ")" + " = " + "(" + (p1 + p2).show() + ")");
  80. Console.WriteLine(p1.show() + " * " + "4" + " = " + (4 * p1).show());
  81. Console.WriteLine("Класс Money");
  82. Console.WriteLine(c1.show() + " + " + c2.show() + " = " + (c1 + c2).show());
  83. Console.WriteLine(c1.show() + " * " + "8" + " = " + (8 * c1).show());
  84. Console.WriteLine(c1.show() + " - " + c2.show() + " = " + (c1 - c2).show());
  85. Console.ReadLine();
  86. }
  87. }
  88. }

Решение задачи: «Во всех классах реализовать интерфейс IComparable и перегрузить метод CompareTo для сравнения объектов»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace ConsoleApplication11
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             //Создаем массив
  13.             IFigure[] myFigures = new IFigure[5]
  14.             {
  15.                 new Rectangle(82,23,"Rect1",Color.Red),
  16.                 new Triangle(28,40,"Tr1",Color.Green),
  17.                 new Circle(20.5,"Crcl1",Color.Black),
  18.                 new Rectangle(78,30,Color.White),
  19.                 new Circle(10.2,Color.Red)
  20.             };
  21.  
  22.             //Используем общий метод интерфейса
  23.             foreach (IFigure itfIf in myFigures)
  24.             {
  25.                 itfIf.Draw();
  26.             }
  27.             Console.WriteLine();
  28.  
  29.             //Выводим площадь каждой фигуры
  30.             foreach (IFigure itfIf in myFigures)
  31.             {
  32.                 Console.WriteLine("Square is {0}", itfIf.Square);
  33.             }
  34.  
  35.             //Сортируем нашим сортировщиком по площади
  36.             Array.Sort(myFigures, new MyCompare());
  37.  
  38.             Console.WriteLine();
  39.  
  40.             //Выводим снова площадь каждой фигуры
  41.             foreach (IFigure itfIf in myFigures)
  42.             {
  43.                 Console.WriteLine("Square is {0}", itfIf.Square);
  44.             }
  45.             Console.ReadLine();
  46.         }
  47.     }
  48. }

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


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

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

12   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы