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

Дружественные функции, не правильно считается сумма элементов массива и матрицы - C++

Восстановить пароль Регистрация
 
kabka
13 / 13 / 1
Регистрация: 12.05.2013
Сообщений: 34
04.12.2013, 17:35     Дружественные функции, не правильно считается сумма элементов массива и матрицы #1
Заданы матрица и массив. Определить сумму всех элементов матрицы и элементов массива.

Реализовал все по заданию, но проблема заключается в том, что идет не правильный подсчет суммы элементов матрицы и элементов массива.
пожалуйста подскажите как будет правильно это сделать, что исправить?




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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <stdlib.h> 
#include <stdio.h> 
using namespace std;
 
class array;
 
class matrix
{
int n,m;
int **a;
public:
    matrix();
    ~matrix();
    friend float func (array,matrix);
    friend void get(array,matrix);
};
 
class array
{
int *a,n;
public:
    array();
    ~array();
    friend float func (array,matrix);
    friend void get(array,matrix);
};
 
matrix::matrix()
{
    int i,j;
    cout<<"\n введите n , m : ";
    cin>>n>>m;
    a =new int* [m];
    for(i=0;i<m;i++)
    a[i]=  new int [n];
      for(i=0;i<n;i++)
          for (j=0;j<m;j++)
         a[i][j]=(rand()%100);
}
 
array::array()
{
    cout<<"\n введите n ";
    cin>>n; 
    a=new int[n]; 
      for(int i=0;i<n;i++)
          a[i]=(rand()%100);
}
 
void get(array a , matrix b )
{
    int i,j;
    for(i=0;i<a.n;i++)
        cout<<a.a[i]<<"  ";
    cout<<"\n\n";
    for(i=0;i<b.n;i++)
    {
        cout<<endl;
          for (j=0;j<b.m;j++)
          {
              cout.width(3);
          cout<<b.a[i][j]<<"  ";
          }
    }
    
    
}
 
 
float func (array a , matrix b )
{
    int i,j;
    int sum1=0,sum2=0;
    for (i=0;i<a.n;i++)
        sum1+=a.a[i];
    for (i=0;i<b.n;i++)
        for (j=0;j<b.m;j++)
        sum2+=b.a[i][j];
    
    cout<<"Сумма элементов массива "<<sum1<<endl;
    cout<<"Сумма элементов матрицы "<<sum2<<endl;
}
 
matrix::~matrix()
{
    for(int i=0;i<m;i++)
    delete a[i];
    delete []a;
}
 
array::~array()
{
    delete []a;
}
 
int main()
{
    setlocale(0,"");
    array a;
    matrix b;
    func(a,b);
    get(a,b);
    getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 17:35     Дружественные функции, не правильно считается сумма элементов массива и матрицы
Посмотрите здесь:

C++ Сумма элементов массива, от первого до последнего нулевого, с использованием функции
C++ Для заданной матрицы размера NхN найти такие k и n, что сумма элементов k- столбца матрицы совпадает с суммой элементов n- го строки
Удалить из матрицы A все строки, сумма элементов которых четна, а из матрицы B – строки, сумма элементов которых нечетна(функции) C++
Почему правильно считается C++
Классы, матрицы, перегрузка операторов, дружественные функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 19:13     Дружественные функции, не правильно считается сумма элементов массива и матрицы #2
C++
1
2
3
4
5
6
a =new int* [m];
for(i=0;i<m;i++)
   a[i]=  new int [n];
for(i=0;i<n;i++)
   for (j=0;j<m;j++)
      a[i][j]=(rand()%100);
Сначала m - это строки, n - столбцы, потом, при заполнении, уже n - строки, m - столбцы. Вы уж, как-то, определитесь с этим...
kabka
13 / 13 / 1
Регистрация: 12.05.2013
Сообщений: 34
04.12.2013, 23:39  [ТС]     Дружественные функции, не правильно считается сумма элементов массива и матрицы #3
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
a =new int* [m];
for(i=0;i<m;i++)
   a[i]=  new int [n];
for(i=0;i<n;i++)
   for (j=0;j<m;j++)
      a[i][j]=(rand()%100);
Сначала m - это строки, n - столбцы, потом, при заполнении, уже n - строки, m - столбцы. Вы уж, как-то, определитесь с этим...
вроде все верно, но не суть..

если даже взять в моем коде одномерный массив, то в нем сумма тоже не верно считается. В этом и заключался мой вопрос, что не так в подсчете суммы?

Добавлено через 7 минут
извиняюсь, проверил, заполнял массив вручную

итог- сумма посчитана верно
неверно выводит массив и матрицу на экран

но проблема осталась, как выводить правильно?

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
int main()
{
    setlocale(0,"");
    array a;
    matrix b;
    func(a,b);
    get(a,b);
    getch();
}
нашел проблемку, если первой использую функцию подсчета, а второй вывод, то сумма выходит верно, а вывод неправильный

если же первый ставить вывод, то выводит верно, но считает неправильно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.12.2013, 00:36     Дружественные функции, не правильно считается сумма элементов массива и матрицы #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
131
132
133
134
135
136
137
#include <iostream>
#include <conio.h>
#include <math.h>
#include <stdlib.h> 
#include <stdio.h> 
using namespace std;
 
class array;
 
class matrix
{
int n, m;
int **a;
public:
    matrix();
    matrix(const matrix&);
    ~matrix();
    
    friend void func (array,matrix);
    friend void get(array,matrix);
};
 
class array
{
int *a;
int n;
public:
    array();
    array(const array&);
    ~array();
    
    friend void func (array, matrix);
    friend void get(array, matrix);
};
 
matrix::matrix()
{
    int i,j;
    cout<<"\n введите n , m : ";
    cin >> n >> m;
    a = new int* [n];
    for(i=0;i<n;i++)
        a[i] =  new int [m];
    
    for(i=0;i<n;i++)
       for (j=0;j<m;j++)
         a[i][j]=(rand()%100);
}
 
matrix::matrix(const matrix& mat)
{
    n = mat.n;
    m = mat.m;
    a = new int* [n];
    for(int i=0;i<n;i++)
        a[i] =  new int [m];
    
    for(int i=0;i<n;i++)
       for (int j=0;j<m;j++)
         a[i][j]=mat.a[i][j];
}
 
array::array()
{
    cout<<"\n введите n ";
    cin>>n; 
    a=new int[n]; 
      for(int i=0;i<n;i++)
          a[i]=(rand()%100);
}
 
array::array(const array& arr)
{
    n = arr.n;
    a=new int[n]; 
      for(int i=0;i<n;i++)
          a[i]= arr.a[i];
}
 
 
 
void get(array a , matrix b )
{
    int i,j;
    for(i=0;i<a.n;i++)
        cout<<a.a[i]<<"  ";
    cout<<"\n\n";
    for(i=0;i<b.n;i++)
    {
          cout<<endl;
          for (j=0;j<b.m;j++)
          {
              cout.width(3);
              cout<<b.a[i][j]<<"  ";
          }
    }
}
 
 
void func (array a , matrix b )
{
    int i,j;
    int sum1=0,sum2=0;
    for (i=0;i<a.n;i++)
        sum1+=a.a[i];
    for (i=0;i<b.n;i++)
        for (j=0;j<b.m;j++)
            sum2+=b.a[i][j];
    
    cout<<"\nСумма элементов массива "<<sum1<<endl;
    cout<<"Сумма элементов матрицы "<<sum2<<endl;
}
 
matrix::~matrix()
{
    for(int i=0;i<n;i++)
        delete a[i];
    delete [] a;
}
 
array::~array()
{
    delete [] a;
}
 
int main()
{
    setlocale(0,"");
    
    array a;
    matrix b;
    
    get(a,b);
    func(a,b);
 
    getch();
}
Yandex
Объявления
05.12.2013, 00:36     Дружественные функции, не правильно считается сумма элементов массива и матрицы
Ответ Создать тему
Опции темы

Текущее время: 21:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru