лабы вариант 4 / Классы 2.2
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего образования
Национальный исследовательский университет «МЭИ»
|
Институт ИнЭИ
Кафедра БИТ |
ПРАКТИЧЕСКАЯ РАБОТА №2
Задание №2
по дисциплине
«Объектно-ориентированный анализ и программирование»
Тема
« Классы »
|
Студент
|
Газизова Юлия Маратовна _______________________ |
|
Группа
|
ИЭс-161-19 _______________________ |
|
Лектор
|
Овсянникова М.Р. _______________________ |
|
Руководитель
|
_______________________ |
|
|
|
Работа защищена |
_______________________ оценка |
_______________________ дата |
Москва |
2020 |
1. Условие задачи
1. Создать массив объектов класса. Количество элементов массива пользователь вводит с клавиатуры.
2. Добавить метод класса – вывод характеристик объектов на экран дисплея в табличном виде.
Таблица имеет заголовок и имена столбцов.
3. Сохранить сведения об объектах класса в типизированном файле.
4. Изменить характеристики третьей фигуры. Внести соответствующие изменения в типизированный файл.
5. Вывести на экран сведения обо всех фигурах, хранящихся в файле.
Исходя из условий поставленной лабораторной работы, вычисляем площадь и периметр для класса объекта –кольцо.
2. Состав данных
В таблице 1 показаны данные используемые в программе.
Таблица 1
Название |
Тип данных |
Значение |
R |
double |
Внешний радиус кольца для объекта |
r |
double |
Внутренний радиус кольца для объекта |
S |
double |
Переменная площади |
P |
double |
Переменная периметра |
rw |
static const unsigned int |
Размерность массива: array,array1,array2,array3 |
array |
double |
Массив для переменной R (внешний радиус кольца) |
array1 |
double |
Массив для переменной r (внутренний радиус кольца) |
array2 |
double |
Массив для переменной S (переменная площади) |
array3 |
double |
Массив для переменной P (переменная периметра) |
a |
static const unsigned int |
Количество столбцов для двумерного массива arr |
b |
static const unsigned int |
Количество строк для двумерного массива arr |
arr |
double |
Двумерный массив для вывода информации из файла
|
3. Набор тестовых данных. Ожидаемые результаты
Переменная для двумерного массива(столбец): a=4
Переменная для двумерного массива(строка): b=3
Переменная для массива: rw=3
Внешний радиус кольца : R=1
Внутренний радиус кольца: r=2
Ожидаемые результаты :
1)
S = π⋅(R^2−r^2)=9,42
S = π⋅(R^2−r^2)= -15,7
S = π⋅(R^2−r^2)= -21,98
P = 2⋅π⋅(R+r)=18,84
P =2⋅π⋅(R+r)=31,4
P = 2⋅π⋅(R+r)=43,96
2)
S = π⋅(R^2−r^2)= -9,42
S = π⋅(R^2−r^2)= -15,7
S = π⋅(R^2−r^2)=-21,98
P = 2⋅π⋅(R+r)=18,84
P = 2⋅π⋅(R+r)=31,4
P = 2⋅π⋅(R+r)=43,96
После изменений :
S=-103,62
P=69,08
4. Метод решения задачи, основные формулы
Формула для вычисления площади кольца:
S=π⋅(R^2−r^2)
Формула для вычисления периметра кольца:
P=2⋅π⋅(R+r)
5. Текст программы
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
class ring // имя класса
{
static const unsigned int a = 4; // Const переменная для двумерного массива (столбец)
static const unsigned int b = 3; // Const переменная для двумерного массива (строка)
static const unsigned int rw = 3; // Const переменная для массивов
// Объявление массива для класса
double array[rw];
double array1[rw];
double array2[rw];
double array3[rw];
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]) // Метод класса - сохраняет результат в файл и выводит на консоль результат
{
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] << endl; // Вывод таблицы
file.close(); // Закрытие файла
}
}
void table_change() // Метод класса пересчитывающий параметры в случае их изменений
{
double arr[b][a]; // Двумерный массив
ifstream file;
file.open("change.txt", ios::in); // Открываем измененный файл input2
if (file.is_open())
{
cout << "Change table:" << endl;
cout << "Outer radius " << "Inner radius " << setw(18) <<"Area " << setw(16) << "Perimeter" << endl;
// Заполнение двумерного массива
for (int i = 0; i < b; i++)
{
for (int j = 0; j < a; j++)
{
file >> arr[i][j]; // читаем все,что есть в нашем файле в двумерный массив
cout << setw(8) << arr[i][j] << "\t"; // выводим в консоль
}
cout << endl;
}
cout << endl;
arr[2][2] = s(arr[2][0], arr[2][1]); // Пересчитываем площадь в связи с изменением в файле
arr[2][3] = p(arr[2][0], arr[2][1]); // Пересчитываем периметр в связи с изменением в файле
cout << "After change: " << endl;
cout << "Area:" << arr[2][2] << "\n" << "Perimeter:" << arr[2][3] << endl;
}
file.close(); // закрываем файл
}
};
int main()
{
static const unsigned int rw = 3; // Статическая переменная для массива
// Объявление статических массивов
double array[rw];
double array1[rw];
double array2[rw];
double array3[rw];
double R = 1; // Внешний радиус кольца для первого объекта
double r = 2; // Внутренний радиус кольца для первого объекта
ring object; // объявление объекта кольца
cout << "\n" << "Table:" << endl;
cout << "Outer radius " << "Inner radius " << setw(18) << "Area " << setw(16) << "Perimeter" << endl;
object.table(array, array1, array2, array3); //Вызов метода класса output - сохраняет результат в файл и выводит на консоль результат
cout << endl;
object.table_change(); //вызов метода класса input - пересчитывающая параметры в случае их изменений
cout << endl;
system("pause");
return 0;
}
6. Результаты выполнения программы на наборе тестовых данных
Результаты работы программы при тестовых данных показаны на рисунке 1-3.
Рисунок 1 – test файл
Рисунок 2- change файл
Рисунок 3-Результат работы программы