Практическая работа №12 Полиморфизмы методов класса. Базовый, средний и высокий уровни


Download 224.81 Kb.
bet4/4
Sana21.06.2023
Hajmi224.81 Kb.
#1645005
TuriПрактическая работа
1   2   3   4
Bog'liq
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:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling