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

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

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

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

22.02.2012, 00:20. Просмотров 399. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2012, 00:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не складывается сумма (C++):

Составить программу, в которой вычислить z=(s1+s2)/(k1*k2), где s1 и k1 - сумма и количество положительных элементов массива Х[N]; s1 u k2 - сумма - C++
Составить программу, в которой вычислить z=(s1+s2)/(k1*k2), где s1 и k1 - сумма и количество положительных элементов массива Х; s1 u k2 ...

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

Максимальная сумма элементов строки / минимальная сумма элементов столбца матрицы - C++
дан двумерный массив. Найти: а)максимальную сумму элементов строки б) минимальную сумму элементов столбца нужна помощь не знаю что...

Найдите такие натуральные числа, чтобы сумма их цифр, а также сумма цифр следующего за ним числа делилась на 7 - C++
Помогите пожалуйста с задачей. Найдите натуральные числа такие, чтобы сумма их цифр следующего за ним числа делилась на 7. (язык С++)...

Найти простые числа, чтобы сумма их цифр, а также сумма цифр следующего за ним числа, делилась на 7 - C++
задание:&quot;найдите простые числа такие, чтобы сумма их цифр, а также сумма цифр следующего за ним числа делилась на 7&quot; помогите...

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

5
DU
1483 / 1129 / 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;
}
0
0xDC
2 / 2 / 0
Регистрация: 15.09.2011
Сообщений: 104
23.02.2012, 01:03  [ТС] #3
а что с классом-то.Выслушаю все замечания
0
DU
1483 / 1129 / 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;
}
1
0xDC
2 / 2 / 0
Регистрация: 15.09.2011
Сообщений: 104
24.02.2012, 00:54  [ТС] #5
а что это за строчки ?

Matrix(const Matrix&);
Matrix& operator = (const Matrix&);
0
samdavydov
60 / 21 / 2
Регистрация: 23.02.2012
Сообщений: 36
24.02.2012, 00:58 #6
Это конструктор копирования и оператор присваивания.

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

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

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

Если эти две строки просто убрать, то код m2 = m1 будет компилироваться, но программа будет работать неверно.
0
24.02.2012, 00:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2012, 00:58
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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