Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
39 / 4 / 2
Регистрация: 15.02.2019
Сообщений: 238
1

Создать класс который проверяет, является матрица нормальной (размерность матрицы и ее элементы вводятся с клавиатуры по

21.10.2019, 22:52. Просмотров 1161. Ответов 2
Метки нет (Все метки)

Создать класс который проверяет, является матрица нормальной (размерность матрицы и ее элементы вводятся с клавиатуры пользователем).
Непонятно как реализовать это на C++

Когда я создаю два объекта, каждый имеет матрицу и мне нужно получить две матрицы одну введенную и другую транспонированную относительно введенной, чтобы я мог их умножит поэлементно и получить единичную матрицу.
Проблема в том, что я хочу передать элементы матрицы А в объект B в оригинале и сохранить там их статическими, а транспонировать только объект А и получить две матрицы над которыми можно сделать соответствующие математические операции, когда я транспонирую матрицу А, то и транспонуютса элементы в B матрицы, а мне такое не нужно.

Пожалуйста помогите кто знает.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include<iostream>
#include<cstdlib>
#include<conio.h>
using namespace std;
class Myclass{
    public:
    int rows;
    int cols;
    int **arr;
    
    Myclass(int rows,int cols)
    {
     this->rows=rows;
     this->cols=cols;
     this->arr=new int*[rows];
      for(int i=0;i<rows;i++)
     {
        arr[i]=new int[cols];
        
     }  
    
    }
    
   void input(int rows,int cols)
   {
    for(int i=0;i<rows;i++)
     {
       for(int j=0;j<cols;j++)
       {
        cin>>arr[i][j];
       }
     }  
   }
   void inputb(int rows,int cols)
   {
    for(int i=0;i<rows;i++)
     {
       for(int j=0;j<cols;j++)
       {
        arr[i][j]=0;
       }
     }  
   }
   void print()
   {
    for(int i=0;i<rows;i++)
     {
       for(int j=0;j<cols;j++)
       {
        cout<<arr[i][j]<<"\t";
       }
       cout<<endl;
     }  
   }
   void transpont(int rows,int cols)
   {
    int t;
    for(int i = 0; i < rows; ++i)
    {
        for(int j = i; j < cols; ++j)
        {
            t = arr[i][j];
            arr[i][j] = arr[j][i];
            arr[j][i] = t;
        }
    }
   }
    Myclass & operator=(const Myclass &other)
        {
         this->rows=other.rows;
         this->arr=new int*[other.rows];
         for(int i=0; i<other.rows; i++)
         {
            this->arr[i]=other.arr[i];
         }
         
         return *this;
           
        }
};
int main()
{
    int r,c;
    cout<<"Enter rows:";
    cin>>r;
    cout<<"Enter cols:";
    cin>>c;
    
    Myclass a(r,c);
    Myclass b(r,c);
   
        a.input(r,c);
        b.inputb(r,c);
 
    a.print();
    a.transpont(r,c);
    cout<<"_______B____"<<endl;
    b.print();
    b=a;
    cout<<"_______B_ after b=a___"<<endl;
    b.print();
        cout<<"_______A____"<<endl;
        a.print();
 
 
    _getch();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2019, 22:52
Ответы с готовыми решениями:

Класс "Матрица" с членами: размерность матрицы, элементы матрицы
Доброго времени суток! Необходимо создать класс &quot;Матрица&quot;, члены класса: &quot;Размерность матрицы,...

Написать программу,которая проверяет,является ли введенная с клавиатуры квадратная матрица магическим квадратом.
Написать программу,которая проверяет,является ли введенная с клавиатуры квадратная матрица...

С клавиатуры вводится размерность целочисленной матрицы, затем сама матрица
доброе время суток )помогите пожалуйста с задачкой,если кому не сложно ) 3. С клавиатуры вводится...

Динамическая матрица, размерность вводится с клавиатуры, обнулить элементы стоящие на главной и ниже
Имею задание: Ввести с клавиатуры N (натуральное число не превышает 7). Сформировать целочисленную...

2
Мозгоправ
1581 / 919 / 423
Регистрация: 01.10.2018
Сообщений: 1,920
Записей в блоге: 2
22.10.2019, 00:47 2
Лучший ответ Сообщение было отмечено AlexKOR5 как решение

Решение

AlexKOR5, во-первых, вы неправильно написали оператор присваивания. Матрицу надо копировать полностью, а не только указатели на строки. Поэтому вы и работаете с одним и тем же набором чисел.

Во-вторых, вы не выполнили Правило трёх, а тем более Правило пяти.

В-третьих, неправильно написали метод транспонирования. Например, неквадратную матрицу он у вас не обработает. Да и ваще

И, наконец, запутались в логике работы. Начали придумывать какие-то пути обхода проблемы, которой не существует.

Попробуйте это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include<iostream>
#include<cstdlib>
#include<conio.h>
using namespace std;
class Myclass {
    void create()
    {
        arr = new int* [rows];
        for (int i = 0; i < rows; i++)
            arr[i] = new int[cols];
    }
    void destroy()
    {
        for (int i = 0; i < rows; i++)
            delete[] arr[i];
        delete arr;
    }
    void copyFrom(const Myclass& other)
    {
        for (int i = 0; i < rows; ++i)
            for (int j = 0; j < cols; ++j)
                arr[i][j] = other.arr[i][j];
    }
public:
    int rows;
    int cols;
    int** arr;
 
    Myclass(int r, int c) : rows(r), cols(c), arr(nullptr)
    {
        create();
    }
    Myclass(const Myclass& other) : rows(other.rows), cols(other.cols), arr(nullptr)
    {
        create();
        copyFrom(other);
    }
    ~Myclass()
    {
        destroy();
    }
 
    void input(int rows, int cols)
    {
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                cin >> arr[i][j];
            }
        }
    }
    void inputb(int rows, int cols)
    {
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                arr[i][j] = 0;
            }
        }
    }
    void print()
    {
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                cout << arr[i][j] << "\t";
            }
            cout << endl;
        }
    }
    Myclass transpont()
    {
        Myclass res(cols, rows);
        for (int i = 0; i < rows; ++i)
            for (int j = 0; j < cols; ++j)
                res.arr[j][i] = arr[i][j];
        return res;
    }
    Myclass& operator=(const Myclass& other)
    {
        destroy();
        rows = other.rows;
        cols = other.cols;
        create();
        copyFrom(other);
        return *this;
    }
};
int main()
{
    int r, c;
    cout << "Enter rows:";
    cin >> r;
    cout << "Enter cols:";
    cin >> c;
 
    Myclass a(r, c);
    Myclass b(r, c);
 
    a.input(r, c);
    cout << "_______A____" << endl;
    a.print();
 
    cout << "_______B____" << endl;
    b.inputb(r, c);
    b.print();
 
    b = a.transpont();
    cout << "_______B_ after b = a.transpont()___" << endl;
    b.print();
 
    cout << "_______A____" << endl;
    a.print();
 
 
    _getch();
    return 0;
}
1
39 / 4 / 2
Регистрация: 15.02.2019
Сообщений: 238
24.10.2019, 14:58  [ТС] 3
Большое человеческое спасибо!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2019, 14:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Класс: Матрица (n x m). Поля: размерность и значение матрицы. Реализовать методы сложения и умножения матриц
Нужно сделать с использованием конструкторов и методов доступа, а я не могу понять как это,...

Создать класс вектор, содержащий элементы типа long double, размерность вектора
срочно!!!!!!!!!!! Пожалуйстаааа Задание 3. Создать класс вектор, содержащий элементы типа long...

Создать массив, элементы которого вводятся с клавиатуры, и определить наибольший элемент массива
создать массив, элементы массива вводятся с клавиатуры и определить наибольший элемент массива

Создать и вывести на экран дерево, элементы которого вводятся с клавиатуры и имеют целый тип
Создать и вывести на экран дерево, элементы которого вводятся с клавиатуры и имеют целый тип....

Подсчитать количество положительных элементов в каждой строке матрицы, элементы которой вводятся с клавиатуры
Подсчитать количество положительных элементов в каждой строке матрицы, элементы которой вводятся с...

С клавиатуры вводятся размеры (<=100x100) матрицы и её (целые) элементы. Составить вектор номеров столбцов, в которых есть хотя бы один элемент, котор
Помогите решить!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.