лабы вариант 4 / Классы2.3
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего образования
Национальный исследовательский университет «МЭИ»
|
Институт ИнЭИ
Кафедра БИТ |
ПРАКТИЧЕСКАЯ РАБОТА №2
Задание №3
по дисциплине
«Объектно-ориентированный анализ и программирование»
Тема
« Классы »
|
Студент
|
Газизова Юлия Маратовна _______________________ |
|
Группа
|
ИЭс-161-19 _______________________ |
|
Лектор
|
Овсянникова М.Р. _______________________ |
|
Руководитель
|
_______________________ |
|
|
|
Работа защищена |
_______________________ оценка |
_______________________ дата |
Москва |
2020 |
1. Условие задачи
1. Описать новый класс объектов на основе существующего класса. Добавить новую характеристику для нового класса – цвет фигуры.
2. Создать массив объектов нового класса. Вывести все объекты класса в табличном виде (полный набор характеристик).
3. Вывести все объекты класса в табличном виде. В таблице показать подмножество всех характеристик класса объектов.
4. Вывести данные (в табличном виде с соответствующим заголовком) обо всех фигурах желтого цвета. Предусмотреть реакцию программы на ситуацию, когда объекты с указанными свойствами в таблице отсутствуют.
5. Решить задачу п.4 с использованием модуля.
Исходя из условий поставленной лабораторной работы, вычисляем площадь и периметр для класса объекта –кольцо.
2. Состав данных
В таблице 1 показаны данные используемые в программе.
Таблица 1
Название |
Тип данных |
Значение |
S |
double |
Переменная для расчета площади |
P |
double |
Переменная для расчета площади |
R |
double |
Внешний радиус кольца для объекта |
r |
double |
Внутренний радиус кольца для объекта |
c_array |
string |
Массив, содержащий в себе цвета: Оранжевый Зеленый Желтый |
array |
double |
Записываем внешний радиус кольца |
array1
|
double |
Записываем внутренний радиус кольца |
array2 |
double |
Записываем расчет площади |
array3 |
double |
Записываем расчет периметра |
rw |
static const unsigned int |
Статическая переменная для массивов: с_array,array,array1,array2,array3
|
3. Набор тестовых данных. Ожидаемые результаты
Внешний радиус кольца : R=1
Внутренний радиус кольца: r=2
Тестовые значения №1:
Внешний радиус=1
Внутренний радиус=2
Площадь=-9,42
Периметр=18,84
Цвет= Оранжевый
Тестовые значения №2:
Внешний радиус=2
Внутренний радиус=3
Площадь= -15,7
Периметр= 31,4
Цвет= Зеленый
Тестовые значения №3:
Внешний радиус=3
Внутренний радиус= 4
Площадь= -21,98
Периметр= 43,96
Цвет= Желтый
Ожидаемые результаты:
Внешний радиус=3
Внутренний радиус= 4
Площадь= -21,98
Периметр= 43,96
Цвет= Желтый
4. Метод решения задачи, основные формулы
Формула для вычисления площади кольца:
S=π⋅(R^2−r^)
Формула для вычисления периметра кольца:
P=2⋅π⋅(R+r)
5. Текст программы
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
class ring // имя класса
{
static const unsigned int rw = 3; // Const переменная для массивов
public: // Спецификатор доступа
double S; // Переменная площади
double P; // Переменная периметра
double s(double R, double r) // Метод класса - рассчитывается площадь через радиусы
{
S = 3.14 * (pow(R, 2) - pow(r, 2));
return S;
}
double p(double R, double r) // Метод класса - рассчитывается периметр
{
P = 2 * 3.14 * (R + r);
return P;
}
void table(double array[rw], double array1[rw], double array2[rw], double array3[rw], string c_array[rw]) // Метод класса - сохраняет результат в файл и выводит на консоль результат
{
double R = 1; // Внешний радиус кольца
double r = 2; // Внутренний радиус кольца
// Составление таблицы и запись её в файл
for (int i = 0; i < rw; i++)
{
ofstream file("test.txt", ios::app);
array[i] = i + R; // // Внешний радиус кольца
file << endl << array[i] << "\t"; // Запись в файл внешнего ридиуса кольца
array1[i] = i + r; // Внутренний радиус кольца
file << array1[i] << "\t"; // Запись в файл внутр. ридиуса кольца
array2[i] = s(i + R, i + r); // Расчёт площади
file << array2[i] << "\t"; // Запись в файл результата
array3[i] = p(i + R, i + r); // Расчёт периметра
file << array3[i] << "\t"; // Запись в файл результата
cout << setw(8) << array[i] << setw(15) << array1[i] << setw(18) << array2[i] << setw(15) << array3[i] << setw(20) << c_array[i] << endl; // Вывод таблицы
file.close(); // Закрытие файла
}
}
void color(double array[rw], double array1[rw], double array2[rw], double array3[rw], string c_array[rw]) // Метод класса выделяющий строку с желтым цветом объекта
{
if (c_array[0] == "Yellow")
{
cout << "\n" << "Result:" << endl;
cout << "Outer radius " << "Inner radius " << setw(12) << "Area " << setw(16) << "Perimeter" << setw(20) << "Color" << endl;
cout << setw(8) << array[0] << setw(15) << array1[0] << setw(18) << array2[0] << setw(15) << array3[0] << setw(20) << c_array[0] << endl; // Вывод строки из таблицы с цветом
}
else if (c_array[1] == "Yellow")
{
cout << "\n" << "Result:" << endl;
cout << "Outer radius " << "Inner radius " << setw(12) << "Area " << setw(16) << "Perimeter" << setw(20) << "Color" << endl;
cout << setw(8) << array[1] << setw(15) << array1[1] << setw(18) << array2[1] << setw(15) << array3[1] << setw(20) << c_array[1] << endl; // Вывод строки из таблицы с цветом
}
else if (c_array[2] == "Yellow")
{
cout << "\n" << "Result:" << endl;
cout << "Outer radius " << "Inner radius " << setw(12) << "Area " << setw(16) << "Perimeter" << setw(20) << "Color" << endl;;
cout << setw(8) << array[2] << setw(15) << array1[2] << setw(18) << array2[2] << setw(15) << array3[2] << setw(20) << c_array[2] << endl; // Вывод строки из таблицы с цветом
}
else
{
cout << "Not found " << endl;
}
}
};
int main()
{
static const unsigned int rw = 3; // Статическая переменная для массива
// Объявление статических массивов
double array[rw];
double array1[rw];
double array2[rw];
double array3[rw];
string c_array[rw] = { "Orange", "Green", "Yellow" }; // Стринговый массив
int R = 1; // Внешний радиус кольца для первого объекта
int r = 2; // Внутренний радиус кольца для первого объекта
ring object; // объявление объекта кольца
cout << "\n" << "Table:" << endl;
cout << "Outer radius " << "Inner radius " << setw(12) << "Area " << setw(16) << "Perimeter" << setw(20) << "Color" << endl;
object.table(array, array1, array2, array3, c_array); //Вызов метода класса output - сохраняет результат в файл и выводит на консоль результат
cout << endl;
object.color(array, array1, array2, array3, c_array); //вызов метода класса input - пересчитывающая параметры в случае их изменений
cout << endl;
system("pause");
return 0;
}
6. Результаты выполнения программы на наборе тестовых данных
Результаты работы программы при тестовых данных показаны на рисунке 1.
Рисунок 1 - Результаты работы программы