Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Создать абстрактный класс Norm с виртуальной функцией вычисления нормы и модуля
- Определить производные классы Complex и Vector3D с собственными функциями вычисления нормы и модуля
- */
- #include <iostream>
- #include <cmath>
- using namespace std;
- class Norm { // Наш абстрактный класс(класс называется абстрактным, если все в нем функции виртуальные)
- public:
- virtual double absolute() = 0; // функция вычисления абсолютной величины (виртуальная функция будет переопределяться автоматически в классе-наследнике)
- virtual double norm() = 0; // функция вычисления нормы (аналогично ведет себя как виртуальная функция выше)
- virtual void show() = 0; // функция вывода на экран результата (также виртуальная)
- protected: // protected состояния класса, чтобы были доступны при наследовании этого абстрактного класса
- int d, m; // d - действительная, m - мнимая часть (в классах-потомках будут переопределяться в зависимости от роли)
- };
- class Complex : public Norm { // класс комплексного числа
- public:
- Complex(int D, int M) { // конструктор класса
- d = D;
- m = M;
- }
- ~Complex() { // деструткор класса
- d = m = 0;
- }
- double absolute() {
- return sqrt(d*d + m*m);
- }
- double norm() {
- return absolute() * absolute();
- }
- void show() {
- if (m < 0) {
- cout << "Полученное комплексное число: " << d << " -i" << -m << endl;
- } else if (!m) {
- cout << "Полученное комплексное число: " << d << endl;
- } else {
- cout << "Полученное комплексное число: " << d << " +i" << m << endl;
- }
- }
- };
- class Vector3D : public Norm { // класс, отвечающий за объект вектор
- public:
- Vector3D(int D, int M) { // конструктор этого класса
- d = D;
- m = M;
- }
- ~Vector3D() { // деструктор класса вектор3д
- d = m = 0;
- }
- double absolute() {
- return sqrt(d*d + m*m);
- }
- double norm() {
- int result = max(abs(d), abs(m));
- return result;
- }
- void show() {
- cout << "Полученный вектор: " << d << ' ' << m << endl;
- }
- };
- int main() {
- setlocale(LC_ALL, "Russian");
- int D, M;
- cout << "Введите два произвольных целых числа: "; cin >> D >> M; // задаем два произвольных целых числа, которые будем использовать либо как действительную и мнимую часть, либо как координаты вектора
- Complex complex(D, M); Vector3D vector(D, M);
- complex.show(); vector.show(); // выводим их на экран
- char choice;
- cout << "Введите, с чем хотите работать (как с комплексным числом --- c как с вектором --- v): "; cin >> choice;
- switch (choice) {
- case ('c'):
- complex.show();
- cout << "Модуль комплексного числа: " << complex.absolute();
- cout << "\nНорма равна: " << complex.norm() << endl;
- break;
- case ('v'):
- vector.show();
- cout << "Модуль вектора: " << vector.absolute();
- cout << "\nНорма вектора равна: " << vector.norm() << endl;
- break;
- }
- char final_choice;
- cout << "Чтобы продолжить работу, нажмите c: "; cin >> final_choice;
- if (final_choice == 'c') {
- main();
- } else {
- system("pause");
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment