Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
0xDC
2 / 2 / 0
Регистрация: 15.09.2011
Сообщений: 104
#1

Не складывается сумма - C++

22.02.2012, 00:20. Просмотров 391. Ответов 5
Метки нет (Все метки)

Ошибка в том что матрицы складываются не совсем корректно, в чем подвох?
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
class Matrix
{
private:
        int **Matr;
        int m;
        int n;
        int **Matr1;
        int **Matr2;
 
        void Create()
        {
            Matr = new int*[m];
            Matr1 = new int*[m];
            Matr2 = new int*[m];
            for (int z=0; z<m; z++){
                Matr[z] = new int[n];
                Matr1[z] = new int[n];
                Matr2[z] = new int[n];
            }
        }
       
public:
     
        Matrix(int i,int j): m(i), n(j) { Create(); }
        ~Matrix()
        {
            for (int z=0; z<m; z++)
            {
               delete[] Matr[z];
            }
        }
 
 
void Fill()
{
    for (int i=0;i<m;i++){
        for (int j=0;j<n;j++){
            //int r=0+rand() % 9;
            Matr[i][j]=0;
            Matr1[i][j]=0+rand() % 9;
            Matr2[i][j]=0+rand() % 9;
            
        }
    }
}
 
 
 
    
        void sum()
        {
        for(int i=0;i<m;i++)
        {
        for(int j=0;j<n;j++)
        {
    Matr[i][j] = Matr1[i][j] + Matr2[i][j];
        }
        }
        }
 
 
 
          void Display()
        {
            for(int i=0; i<m; i++)
            {
                for(int j=0; j<n; j++)
                {
                    cout.width(5);
                    cout << Matr[i][j]; 
                 }
                            
                cout << endl;
            }
            cout<<"\n";
        }
 
 
          void Display1()
        {
            for(int i=0; i<m; i++)
            {
                for(int j=0; j<n; j++)
                {
                    cout.width(5);
                    cout << Matr1[i][j]; 
                 }
                            
                cout << endl;
            }
            cout<<"\n";
        }
 
 
           void Display2()
        {
            for(int i=0; i<m; i++)
            {
                for(int j=0; j<n; j++)
                {
                    cout.width(5);
                    cout << Matr2[i][j]; 
                 }
                            
                cout << endl;
            }
            cout<<"\n";
        }
 
};
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
#include "clasMatr.h"
int main()
{
    
    Matrix M(1,1);
    Matrix A(1,1);
    Matrix B(1,1);
 
    M.Fill();
    A.Fill();
    B.Fill();
 
    M.Display();
    A.Display1();
    B.Display2();
        M.sum();
        //A.sum();
        //B.sum();
 
    cout << "\n After sum" << endl;
 
 
  
    M.Display();
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2012, 00:20     Не складывается сумма
Посмотрите здесь:

Складывается два колебания - Колебания и волны
Помогите пожалуйста решить задачу: Складывается два колебания одинакового направления и одинакового периода: х1=А1sinω1t и ...

Матрица складывается с нулей и единиц. - Java SE
Матрица складывается с нулей и единиц. Найти в ней самую длинную цепь подряд нулей, что стоять, по горизонтали, вертикали либо диагонали. ...

Складывается два колебания одинакового направления - Колебания и волны
Складывается два колебания одинакового направления и одинакового периода: х1=А1sinω1t и x2=A2sinω2(t+τ), где А1=А2=3 см, ω1=ω2=πс-1, τ=0,5...

почему дата складывается неправильно? DateSerial(y+1,m,d) - VBA
Я прибавляю один год к числу 29 февраля 2016 года. И он мне выдает первое марта 17го. Разве так и должно быть? ...

Число 2 складывается 10 раз, найти конечное - Turbo Pascal
1)Написать программу с помощью цикла while:число 2 складывается 10 раз,найти конечное 2)Написать программу с помощью цикла while: х...

Создать массив, каждый элемент которого складывается из суммы n-слагаемых - VBA
Такая проблема,не могу сообразить как решить следующую задачу:нужно создать n-массив,причем каждый элемент массива складывается из суммы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.02.2012, 00:51     Не складывается сумма #2
подробности по поводу самого класса пропустим. там все печально. однако сумма вроде считается правильно. только main поправить нужно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
  Matrix M(2,2);
  M.Fill();
  M.Display();
  M.Display1();
  M.Display2();
  M.sum();
  cout << "\n After sum" << endl;
  M.Display();
  return 0;
}
0xDC
2 / 2 / 0
Регистрация: 15.09.2011
Сообщений: 104
23.02.2012, 01:03  [ТС]     Не складывается сумма #3
а что с классом-то.Выслушаю все замечания
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.02.2012, 02:27     Не складывается сумма #4
В классе матрицы присутствуют три матрицы. Две из них заполняются, потом вызывается
функция для их суммирования ну и печатается результат этой суммы.
Должно быть так:
В один объект типа матрицы представляет одну матрицу.
В классе могут быть функции заполнения этой матрицы,
ее печати ну и возможно арифметические операции.
Арифметические операции наверно лучше оформить в виде свободных функций.
Есть также утечка памяти и нереализованные конструктор копирования и оператор =
Вот более менее корректное решение

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
#include <iostream>
#include <cassert>
 
using namespace std;
 
class Matrix
{
  int** Matr;
  unsigned Width;
  unsigned Height;
 
  Matrix(const Matrix&);
  Matrix& operator = (const Matrix&);
 
public:
  Matrix(unsigned width, unsigned height)
    : Width(width), Height(height)
  {
    // Тут не безопасно с точки зрения исключений, но пофиг.
    assert(Width > 0 && Height > 0);
    Matr = new int*[Height];
    for (unsigned i = 0; i < Height; ++i)
    {
      Matr[i] = new int[Width];
      // Тут возможно в каждую ячейку нули прописать надо.
    }
  }
 
  ~Matrix()
  {
    for (unsigned i = 0; i < Height; ++i)
    {
      delete[] Matr[i];
    }
    delete[] Matr;
  }
 
  void RandomFill()
  {
    for (unsigned y = 0; y < Height; ++y)
    {
      for (unsigned x = 0; x < Width; ++x)
      {
        Matr[y][x] = rand() % 9;
      }
    }
  }
 
  void Print() const
  {
    for (unsigned y = 0; y < Height; ++y)
    {
      for (unsigned x = 0; x < Width; ++x)
      {
        cout.width(5);
        cout << Matr[y][x]; 
      }
      cout << endl;
    }
    cout << endl;
  }
 
  bool Add(const Matrix& other)
  {
    if (Width != other.Width || Height != other.Height)
    {
      assert(!"Bad matrix size.");
      return false;
    }
 
    for (unsigned y = 0; y < Height; ++y)
    {
      for (unsigned x = 0; x < Width; ++x)
      {
        Matr[y][x] += other.Matr[y][x];
      }
    }
 
    return true;
  }
 
  bool Sub(const Matrix& other)
  {
    if (Width != other.Width || Height != other.Height)
    {
      assert(!"Bad matrix size.");
      return false;
    }
 
    for (unsigned y = 0; y < Height; ++y)
    {
      for (unsigned x = 0; x < Width; ++x)
      {
        Matr[y][x] -= other.Matr[y][x];
      }
    }
 
    return true;
  }
};
 
 
int main()
{
  Matrix m1(2, 3);
  m1.RandomFill();
 
  Matrix m2(2, 3);
  m2.RandomFill();
 
  cout << "M1:" << endl;
  m1.Print();
 
  cout << "M2:" << endl;
  m2.Print();
 
  m1.Add(m2);
  cout << "M1 after add:" << endl;
  m1.Print();
 
  m1.Sub(m2);
  cout << "M1 after sub:" << endl;
  m1.Print();
 
  m1.Sub(m1);
  cout << "M1 after self sub:" << endl;
  m1.Print();
 
  return 0;
}
0xDC
2 / 2 / 0
Регистрация: 15.09.2011
Сообщений: 104
24.02.2012, 00:54  [ТС]     Не складывается сумма #5
а что это за строчки ?

Matrix(const Matrix&);
Matrix& operator = (const Matrix&);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2012, 00:58     Не складывается сумма
Еще ссылки по теме:

При сложении двух TextBox складывается только целые части чисел - Visual Basic
Доброго времени суток всем. Недавно выкладывал на форуме программку которую ща пишу, вот ссылка...

операция, при которой младший байт слова логически складывается со старшим байтом записанным в обратном порядке - Assembler
В общем проблемка срочная 3 дня осталась необходимо на делфи сделать языком ассемблер следующую задачку: &quot;Реализуйте с помощью логических...

Матрица складывается с нулей и единиц. Найти в ней самую длинную цепь подряд нулей - Java SE
Матрица складывается с нулей и единиц. Найти в ней самую длинную цепь подряд нулей, что стоять, по горизонтали, вертикали либо диагонали.

Сумма денег S в банке под процентом T. Какая будет сумма через 1, 2, 3, 4, 5 лет? - Turbo Pascal
Помогите((( сума денег S в банку под процентом T. Какая будет сума через 1, 2, 3, 4, 5, лет?


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

Или воспользуйтесь поиском по форуму:
samdavydov
60 / 21 / 2
Регистрация: 23.02.2012
Сообщений: 36
24.02.2012, 00:58     Не складывается сумма #6
Это конструктор копирования и оператор присваивания.

Они объявлены в закрытой области класса, чтобы матрицу нельзя было копировать.

Т.е., чтобы код вида m2 = m1; не скомпилировался.

Но ведь копировать матрицы вполне естесвенно.
Просто код, копирующий матрицу, довольно громоздкий и DU решил оставить это тебе в качестве домашнего задания.

Если эти две строки просто убрать, то код m2 = m1 будет компилироваться, но программа будет работать неверно.
Yandex
Объявления
24.02.2012, 00:58     Не складывается сумма
Ответ Создать тему
Опции темы

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