Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы вариант 4 / Классы 2.2

.docx
Скачиваний:
6
Добавлен:
15.12.2020
Размер:
84.52 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего образования

Национальный исследовательский университет «МЭИ»

Институт ИнЭИ

Кафедра БИТ

ПРАКТИЧЕСКАЯ РАБОТА №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^2r^2)=9,42

S = π(R^2r^2)= -15,7

S = π(R^2r^2)= -21,98

P = 2π(R+r)=18,84

P =2π(R+r)=31,4

P = 2π(R+r)=43,96

2)

S = π(R^2r^2)= -9,42

S = π(R^2r^2)= -15,7

S = π(R^2r^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-Результат работы программы

Соседние файлы в папке лабы вариант 4