Практическая работа №12 Полиморфизмы методов класса. Базовый, средний и высокий уровни
Download 224.81 Kb.
|
11.3 все уровни
Высокий уровень
Задание: описать несколько классов: абстрактный класс-родитель с полями и методами, характерными для всех объектов задания, при этом некоторый метод или методы может быть чисто виртуальным и несколько классовнаследников, определяющих дополнительные поля (при необходимости) и переопределяющие некоторый виртуальный метод (методы). В главной программе должен быть объявлен массив (статический или динамический) объектов (родительского класса), в который помещаются классовпотомков (В C++ необходимо использование массива указателей на объекты). В главной консольной программе или по нажатию кнопки в графической программе создаются соответствующие объекты и выполняются действия, указанные в задании. Промоделировать отливку листов стали. Листы стали характеризуются толщиной (в мм), и плотностью стали (в кг/м3 ). Листы делятся на квадратные (дополнительно задаются одним числом – шириной и длиной одновременно, в мм), прямоугольные (задаются шириной и длиной, в мм) и треугольные (в виде прямоугольного треугольника, задаются двумя катетами, в мм). Для каждого типа стали определите виртуальный метод «Площадь» – возвращающий площадь листа. Также определите метод «Вес», который вычисляет вес листа, умножая площадь листа на его толщину и плотность стали. Также задайте метод «Информация», который будет выдавать информацию об листе. В главной программе создайте массив из 15 листов стали, создав 5 квадратных, 7 прямоугольных и 3 треугольных листа случайных размеров. Выведите информацию о листах и посчитайте суммарную площадь и суммарный вес всех листов. Решение: using System; class Program { static void Main(string[] args) { Random random = new Random(); SteelSheet[] steelSheets = new SteelSheet[15]; // Создание 5 квадратных листов со случайными размерами for (int i = 0; i < 5; i++) { double side = random.Next(50, 200); // Случайная сторона от 50 до 200 мм double thickness = random.Next(1, 10); // Случайная толщина от 1 до 10 мм double density = random.Next(7000, 8000); // Случайная плотность от 7000 до 8000 кг/м^3 steelSheets[i] = new SquareSheet(thickness, density, side); } // Создание 7 прямоугольных листов со случайными размерами for (int i = 5; i < 12; i++) { double width = random.Next(50, 200); // Случайная ширина от 50 до 200 мм double length = random.Next(100, 300); // Случайная длина от 100 до 300 мм double thickness = random.Next(1, 10); // Случайная толщина от 1 до 10 мм double density = random.Next(7000, 8000); // Случайная плотность от 7000 до 8000 кг/м^3 steelSheets[i] = new RectangularSheet(thickness, density, width, length); } // Создание 3 треугольных листов со случайными размерами for (int i = 12; i < 15; i++) { double cathetus1 = random.Next(50, 200); // Случайный катет 1 от 50 до 200 мм double cathetus2 = random.Next(50, 200); // Случайный катет 2 от 50 до 200 мм double thickness = random.Next(1, 10); // Случайная толщина от 1 до 10 мм double density = random.Next(7000, 8000); // Случайная плотность от 7000 до 8000 кг/м^3 steelSheets[i] = new TriangleSheet(thickness, density, cathetus1, cathetus2); } // Вывод информации о листах стали foreach (SteelSheet sheet in steelSheets) { Console.WriteLine(sheet.Information()); } // Вычисление суммарной площади и суммарного веса всех листов стали double totalArea = 0; double totalWeight = 0; foreach (SteelSheet sheet in steelSheets) { totalArea += sheet.Area(); totalWeight += sheet.Weight(); } Console.WriteLine($"Суммарная площадь всех листов стали: {totalArea} мм^2"); Console.WriteLine($"Суммарный вес всех листов стали: {totalWeight} кг"); } } abstract class SteelSheet { protected double thickness; // Толщина листа (в мм) protected double density; // Плотность стали (в кг/м^3) public SteelSheet(double thickness, double density) { this.thickness = thickness; this.density = density; } public abstract double Area(); public double Weight() { double area = Area(); return area * thickness * density / 1000000; // Вес = Площадь * Толщина * Плотность / 1000000 для перевода в кг } public abstract string Information(); } class SquareSheet : SteelSheet { private double side; // Сторона квадратного листа (в мм) public SquareSheet(double thickness, double density, double side) : base(thickness, density) { this.side = side; } public override double Area() { return side * side; } public override string Information() { return $"Квадратный лист: Сторона: {side} мм, Площадь: {Area()} мм^2, Вес: {Weight()} кг"; } } class RectangularSheet : SteelSheet { private double width; // Ширина прямоугольного листа (в мм) private double length; // Длина прямоугольного листа (в мм) public RectangularSheet(double thickness, double density, double width, double length) : base(thickness, density) { this.width = width; this.length = length; } public override double Area() { return width * length; } public override string Information() { return $"Прямоугольный лист: Ширина: {width} мм, Длина: {length} мм, Площадь: {Area()} мм^2, Вес: {Weight()} кг"; } } class TriangleSheet : SteelSheet { private double cathetus1; // Первый катет треугольного листа (в мм) private double cathetus2; // Второй катет треугольного листа (в мм) public TriangleSheet(double thickness, double density, double cathetus1, double cathetus2) : base(thickness, density) { this.cathetus1 = cathetus1; this.cathetus2 = cathetus2; } public override double Area() { return 0.5 * cathetus1 * cathetus2; } public override string Information() { return $"Треугольный лист: Катет 1: {cathetus1} мм, Катет 2: {cathetus2} мм, Площадь: {Area()} мм^2, Вес: {Weight()} кг"; } } Код выполняет следующие действия: 1. В главной программе (методе `Main`) создается массив `steelSheets` для хранения объектов типа `SteelSheet`. 2. С помощью цикла `for` создается 5 квадратных листов, 7 прямоугольных листов и 3 треугольных листа случайных размеров. Для каждого созданного листа вызывается соответствующий конструктор и объект добавляется в массив `steelSheets`. 3. Далее происходит вывод информации о каждом листе стали. Для этого используется цикл `foreach`, который перебирает все объекты в массиве `steelSheets`. Для каждого объекта вызывается метод `Information()`, который возвращает строку с информацией о листе, и эта строка выводится на консоль. 4. После вывода информации о каждом листе стали, происходит подсчет суммарной площади и суммарного веса всех листов. Для этого используются переменные `totalArea` и `totalWeight`, которые инициализируются нулевыми значениями. 5. С помощью цикла `foreach` происходит итерация по массиву `steelSheets`. Для каждого листа вызывается метод `Area()`, который возвращает площадь листа, и результат добавляется к переменной `totalArea`. Затем вызывается метод `Weight()`, который возвращает вес листа, и результат добавляется к переменной `totalWeight`. 6. В конце программы выводится суммарная площадь всех листов стали и суммарный вес всех листов, используя значения переменных `totalArea` и `totalWeight`. Вывод: Эта программа моделирует отливку листов стали различной формы (квадратные, прямоугольные и треугольные) с заданными случайными размерами. Для каждого типа листа определены методы Area() для вычисления площади и Weight() для вычисления веса листа. Метод Information() выводит информацию о листе стали, включая его форму, размеры, площадь и вес. В главной программе создается массив из 15 листов стали (5 квадратных, 7 прямоугольных и 3 треугольных), выводится информация о каждом листе, а затем вычисляется суммарная площадь и суммарный вес всех листов. Download 224.81 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling