Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 28.10.2020
Сообщений: 20
1

Что не так с кодом? Выглядит круто,но работает плохо

06.12.2020, 17:05. Показов 1050. Ответов 3

Author24 — интернет-сервис помощи студентам
Вот задание:. Создать класс матрица Данный класс содержит указатель на long, размер строк и столбцов и состояние ошибки. Определить конструктор без параметров, конструктор с одним параметром и конструктор с двумя параметрами, деструктор. Определить методы доступа: возвращать значение элемента (i,j) и адрес этого элемента. Определить функцию печати. Определить функции сложения и вычитания (матрицы с матрицей), умножение матрицы на матрицу. Определить умножение матрицы на число. Проверить работу этого класса. В случае нехватки памяти, несоответствия размерностей, выхода за пределы устанавливать код ошибки.


Вот код:
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <iostream>
using namespace std;
 
// шаблонный класс Матрица
template <typename T>
class MATRIX
{
private:
  T** M; // матрица
  int m; // количество строк
  int n; // количество столбцов
 
public:
  // конструкторы
  MATRIX()
  {
    n = m = 0;
    M = nullptr; // необязательно
  }
 
  // конструктор с двумя параметрами
  MATRIX(int _m, int _n)
  {
    m = _m;
    n = _n;
 
    // Выделить память для матрицы
    // Выделить пам'ять для массива 
    // Выделить память для каждого указателя
    for (int i = 0; i < m; i++)
      M[i] = (T*)new T[n];
 
    // заполнить массив M нулями
    for (int i = 0; i < m; i++)
      for (int j = 0; j < n; j++)
        M[i][j] = 0;
  }
 
  // Конструктор копирования - обязательный
  MATRIX(const MATRIX& _M)
  {
    // Создается новый объект для которого виделяется память
    // Копирование данных *this <= _M
    m = _M.m;
    n = _M.n;
 
    // Выделить память для M
    M = (T**) new T*[m]; // количество строк, количество указателей
 
    for (int i = 0; i < m; i++)
      M[i] = (T*) new T[n];
 
    // заполнить значениями
    for (int i = 0; i < m; i++)
      for (int j = 0; j < n; j++)
        M[i][j] = _M.M[i][j];
  }
 
  // методы доступа
  T GetMij(int i, int j)
  {
    if ((m > 0) && (n > 0))
      return M[i][j];
    else
      return 0;
  }
 
  void SetMij(int i, int j, T value)
  {
    if ((i < 0) || (i >= m))
      return;
    if ((j < 0) || (j >= n))
      return;
    M[i][j] = value;
  }
 
  // метод, выводящий матрицу
  void Print(const char* ObjName)
  {
    cout << "Object: " << ObjName << endl;
    for (int i = 0; i < m; i++)
    {
      for (int j = 0; j < n; j++)
        cout << M[i][j] << "\t";
      cout << endl;
    }
    cout << "---------------------" << endl << endl;
  }
 
  // оператор копирования - обязательный
  MATRIX operator=(const MATRIX& _M)
  {
    if (n > 0)
    {
      // освободить память, выделенную ранее для объекта *this
      for (int i = 0; i < m; i++)
        delete[] M[i];
    }
 
    if (m > 0)
    {
      delete[] M;
    }
 
    // Копирование данных M <= _M
    m = _M.m;
    n = _M.n;
 
    // Выделить память для M опять
    M = (T**) new T*[m]; // количество строк, количество указателей
    for (int i = 0; i < m; i++)
      M[i] = (T*) new T[n];
 
    // заполнить значениями
    for (int i = 0; i < m; i++)
      for (int j = 0; j < n; j++)
        M[i][j] = _M.M[i][j];
    return *this;
  }
 
  // Деструктор - освобождает память, выделенную для матрицы
  ~MATRIX()
  {
    if (n > 0)
    {
      // освободить выделенную память для каждой строки
      for (int i = 0; i < m; i++)
        delete[] M[i];
    }
 
    if (m > 0)
      delete[] M;
  }
};
 
void main()
{
  // тест для класса MATRIX
  MATRIX<int> M(2, 3);
  M.Print("M");
 
  // Заполнить матрицу значеннями по формуле
  int i, j;
  for (i = 0; i < 2; i++)
    for (j = 0; j < 3; j++)
      M.SetMij(i, j, i + j);
 
  M.Print("M");
 
  MATRIX<int> M2 = M; // вызов конструктора копирования
  M2.Print("M2");
 
  MATRIX<int> M3; // вызов оператора копирования - проверка
  M3 = M;
  M3.Print("M3");
 
  MATRIX<int> M4;
  M4 = M3 = M2 = M; // вызов оператора копирования в виде "цепочки"
  M4.Print("M4");
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2020, 17:05
Ответы с готовыми решениями:

Что с моим кодом не так?Он работает
Из несколько примеров собрал свой) Я в JS ноль)! Я чувствую что-то с ним не так)...

Что не так с кодом? Компилируется, но не работает (связные списки)
#include &quot;stdio.h&quot; #include &quot;stdlib.h&quot; #include &lt;string.h&gt; #include &quot;iostream&quot; using...

Что не так с кодом? ( пытаюсь понять, что не так? )
Есть исходный код. Hook, работает хорошо, но есть минус огромный - перестаёт писать в лог, при...

Не могу понять почему все так плохо работает...
Program Zachot; USES graph,crt; CONST K=3; type mas=array of string; tip...

3
1537 / 457 / 101
Регистрация: 17.05.2015
Сообщений: 1,425
06.12.2020, 17:33 2
Цитата Сообщение от Kikiiiii132 Посмотреть сообщение
Что не так с кодом?
Что не так с вами?

Приходит ветеринар к терапевту.
Терапевт:
- На что жалуетесь?
Ветеринар:
- Нет, ну так каждый может!
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
06.12.2020, 17:37 3
Лучший ответ Сообщение было отмечено Kikiiiii132 как решение

Решение

Цитата Сообщение от Kikiiiii132 Посмотреть сообщение
MATRIX(int _m, int _n)
  {
    m = _m;
    n = _n;
// Выделить память для матрицы
    // Выделить пам'ять для массива
    // Выделить память для каждого указателя
    for (int i = 0; i < m; i++)
      M[i] = (T*)new T[n];
Потерял вот это
C++
1
2
 // Выделить память для M
    M = (T**) new T*[m]; // количество строк, количество указателей
1
0 / 0 / 0
Регистрация: 28.10.2020
Сообщений: 20
06.12.2020, 22:45  [ТС] 4
А с вами что не так?
0
06.12.2020, 22:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2020, 22:45
Помогаю со студенческими работами здесь

Почему сайт плохо выглядит на мобильных?
Всем привет. Есть сайт: volfilarmonia.ru Сайт на joomla. Сделан еще в 2012. На сайте использован...

Что не так с кодом?
&lt;?php $surname = $_POST; $name = $_POST; $workName = $_POST; $tel = $_POST; $email = $_POST;...

Что не так с кодом?
Дорогие форумяне, помогите разобраться... на листе 2 кода. при BRC - один выполняется если лист...

Что не так с кодом?
Нужно вывести максимальное значение массива, если ввести отрицательные числа, то выводит 0. В чем...

Что не так с кодом?
Слетела карусель с уже просмотренными товарами в карточки товара. Я нашел код, но что с ним не...

Что не так с кодом?
вот задание:Создать абстрактный тип данных - класс вектор, который имеет указатель на long, число...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru