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

Классы. Найти сумму элементов каждого столбца матрицы и определить максимальную

13.12.2014, 22:12. Показов 2716. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создайте класс в соответствии с условием задачи. Определите функции-члены класса для установки и получения значений закрытых переменных, для вывода реализации требуемых действий. Используйте конструкторы для инициализации начальных значений закрытых переменных и деструкторы. Расположите интерфейс класса в файле Name.h, а реализацию в Name.cp.

Файл name.h - интерфейс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef LR_10_name_h
#define LR_10_name_h
 
class matrix
{
private:
    int Rows;                                              //ряды(строки)
    int Cols;                                                //колонки(столбцы)
    float ** FloatData;
    float * DataSum;
    
public:
    matrix(int Row=1,int Col=1);                      //конструктор
    ~matrix(void);                                           //деструктор
    float GetAt(int Row,int Col);
    void SetAt(int Row,int Col,float Data);
    void Display();
    void Sum(int Col);
    void Fill();
};
#endif
Файл name.cpp - реализация
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
#include <iostream>
#include "stdlib.h"                 //для функций работы с числами
#include "stdio.h"                  //для printf
#include "name.h"
 
matrix::matrix(int Row, int Col)
{                                   //присвоим внутренним переменным переданные параметры
    Rows=Row;
    Cols=Col;
    DataSum = new float[Cols];      //выделяем память для хранения суммы элементов каждого столбца полученной матрицы
    FloatData= new float * [Cols];   //выделим память для указателей на каждый столбец матрицы
};
matrix::~matrix()
{
    for (int i=0; i<Cols; i++) {
        delete FloatData[i];        //освобождаем выделенную память для каждой колонки
    }
    delete [] FloatData;            //и для массива указателей
}
//находим сумму эл-ов каждого столбца
void matrix::Sum(int Col)
{
 
}
//заполняем матрицу случайными числами
void matrix::Fill()
{
    for (int j=0; j<Rows; j++){
        for (int i=0; i<Cols; i++){
            FloatData[j][i]=/*(float)*/rand()%20;
        }
    }
    return;
}
//вывод матрицы на экран
void matrix::Display()
{
    printf("\n Matrix \n");
    for (int j=0;j<Rows;j++){
        printf("Row:%i>", j);                    //нумеруем каждый ряд
        for (int i=0;i<Cols;i++){
            printf("%5.0f ",FloatData[j][i]); //печатаем колонки
        }
    }
    return;
}
Основная main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include "name.h"
 
using namespace std;
 
int main()
{
    int Row,Col;
    cout << "\nRow ?:" ;
    cin >> Row ;
    cout << "\nCol ?:" ;
    cin >> Col ;
    matrix NMatrix(Row,Col);                 // создадим нашу матрицу
    NMatrix.Fill();                                  // заполним значениями
    NMatrix.Display();                            // и покажем результаты
}
Помогите написать функцию нахождения и вывода суммы элементов каждого столбца
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2014, 22:12
Ответы с готовыми решениями:

Определить сумму элементов каждого столбца левой половины и сумму элементов каждого четного столбца правой половины матрицы А.
Матрица A (М кратно 4) разделена по вертикали на две поло¬вины. Определить сумму элементов каждого...

Определить сумму элементов каждого столбца левой половины и сумму элементов каждого четного столбца правой половины матрицы A
Матрица A (M кратно 4) разделена по вертикали на две половины. Определить сумму элементов каждого...

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

Найти максимальную сумму элементов столбца матрицы
a) Статическая память. Двумерный массив. Дан массив целых чисел (4х6). Найти максимальную сумму...

4
504 / 247 / 75
Регистрация: 31.10.2010
Сообщений: 747
14.12.2014, 06:26 2
Лучший ответ Сообщение было отмечено Niktaria как решение

Решение

Niktaria, пожалуйста:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include "name.h"
 
using namespace std;
 
int main() {
  int Row, Col;
  cout << "\nRow ?:";
  cin >> Row;
  cout << "\nCol ?:";
  cin >> Col;
  matrix NMatrix(Row, Col); // создадим нашу матрицу
  NMatrix.Fill(); // заполним значениями
  NMatrix.Display(); // и покажем результаты
  for(int i = 0; i < Col; i++) {
    NMatrix.Sum(i);
    NMatrix.PrSum(i);
  }
 
  system("pause");
}



Кликните здесь для просмотра всего текста
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
#include <iostream>
#include "stdlib.h"                 //для функций работы с числами
#include "stdio.h"                  //для printf
 
#ifndef nameH
#define nameH
// ---------------------------------------------------------------------------
class matrix {
private:
  int Rows; // ряды(строки)
  int Cols; // колонки(столбцы)
  float** FloatData;
  float* DataSum;
 
public:
  matrix(int Row = 1, int Col = 1); // конструктор
  ~matrix(void); // деструктор
  float GetAt(int Row, int Col);
  void SetAt(int Row, int Col, float Data);
  void Display();
  void Sum(int Col);
  void Fill();
  void PrSum(int Col);
} ;
#endif



Кликните здесь для просмотра всего текста
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
#include "name.h"
 
matrix::matrix(int Row, int Col)
{ // присвоим внутренним переменным переданные параметры
  Rows = Row;
  Cols = Col;
  DataSum = new float[Cols];
  memset(DataSum, 0, sizeof(float)* (Cols));
  // выделяем память для хранения суммы элементов каждого столбца полученной матрицы
  FloatData = new float* [Row];
  // выделим память для строк
  for (int i = 0; i < Row; i++) {
    FloatData[i] = new float[Col];
    memset(FloatData[i], 0, sizeof(float)* (Col));
  }
 
}
matrix::~matrix() {
  if (FloatData) {
    for (int i = 0; i < Cols; i++) {
      delete FloatData[i]; // освобождаем выделенную память для каждой колонки
    }
    delete[]FloatData; // и для массива указателей
  }
  if (DataSum) {
    delete[]DataSum;
  }
}
 
 
// заполняем матрицу случайными числами
void matrix::Fill() {
  for (int j = 0; j < Rows; j++) {
    for (int i = 0; i < Cols; i++) {
      FloatData[j][i] = /* (float) */ rand() % 20;
    }
  }
  return;
}
// вывод матрицы на экран
void matrix::Display() {
  printf("\n Matrix \n");
  for (int j = 0; j < Rows; j++) {
    printf("Row:%i>", j); // нумеруем каждый ряд
    for (int i = 0; i < Cols; i++) {
      printf("%5.0f ", FloatData[j][i]); // печатаем строку !!!!
    }
    printf("\n\r");
  }
  return;
}
// находим сумму эл-ов каждого столбца (одного столбца !)
void matrix::Sum(int Col) {
  DataSum[Col] = 0;
  for (int i = 0; i < Rows; i++) {
    DataSum[Col] += FloatData[i][Col];
  }
}
// вывод на экран суммы
void matrix::PrSum(int Col) {
   printf("DataSum[%i] =  %5.0f \n\r",Col, DataSum[Col]); // печатаем
}
1
0 / 0 / 0
Регистрация: 21.05.2014
Сообщений: 9
14.12.2014, 10:54  [ТС] 3
RefSol, Спасибо, теперь всё работает)

Добавлено через 32 минуты
RefSol, как найти тут максимальную сумму?
0
504 / 247 / 75
Регистрация: 31.10.2010
Сообщений: 747
14.12.2014, 22:00 4
Niktaria, добавь в код изменения где стоят комментарии с воскл. знаками, тогда после цикла подсчёта сумм в maxSumCol будет максимальная сумма:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include "stdlib.h"                 //для функций работы с числами
#include "stdio.h"                  //для printf
 
#ifndef nameH
#define nameH
// ---------------------------------------------------------------------------
class matrix {
private:
  int Rows; // ряды(строки)
  int Cols; // колонки(столбцы)
  float** FloatData;
  float* DataSum;
 
public:
  matrix(int Row = 1, int Col = 1); // конструктор
  ~matrix(void); // деструктор
  float GetAt(int Row, int Col);
  void SetAt(int Row, int Col, float Data);
  void Display();
  void Sum(int Col);
  void Fill();
  void PrSum(int Col);
  float maxSumCol;  // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
} ;
#endif



Кликните здесь для просмотра всего текста
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
#include "name.h"
 
matrix::matrix(int Row, int Col)
{ // присвоим внутренним переменным переданные параметры
  Rows = Row;
  Cols = Col;
  maxSumCol = 0; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  DataSum = new float[Cols];
  memset(DataSum, 0, sizeof(float)* (Cols));
  // выделяем память для хранения суммы элементов каждого столбца полученной матрицы
  FloatData = new float* [Row];
  // выделим память для строк
  for (int i = 0; i < Row; i++) {
    FloatData[i] = new float[Col];
    memset(FloatData[i], 0, sizeof(float)* (Col));
  }
 
}
matrix::~matrix() {
  if (FloatData) {
    for (int i = 0; i < Cols; i++) {
      delete FloatData[i]; // освобождаем выделенную память для каждой колонки
    }
    delete[]FloatData; // и для массива указателей
  }
  if (DataSum) {
    delete[]DataSum;
  }
}
 
 
// заполняем матрицу случайными числами
void matrix::Fill() {
  for (int j = 0; j < Rows; j++) {
    for (int i = 0; i < Cols; i++) {
      FloatData[j][i] = /* (float) */ rand() % 20;
    }
  }
  return;
}
// вывод матрицы на экран
void matrix::Display() {
  printf("\n Matrix \n");
  for (int j = 0; j < Rows; j++) {
    printf("Row:%i>", j); // нумеруем каждый ряд
    for (int i = 0; i < Cols; i++) {
      printf("%5.0f ", FloatData[j][i]); // печатаем строку !!!!
    }
    printf("\n\r");
  }
  return;
}
// находим сумму эл-ов каждого столбца (одного столбца !)
void matrix::Sum(int Col) {
  DataSum[Col] = 0;
  for (int i = 0; i < Rows; i++) {
    DataSum[Col] += FloatData[i][Col];
  }
  if(DataSum[Col] > maxSumCol ) maxSumCol = DataSum[Col]; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
// вывод на экран суммы
void matrix::PrSum(int Col) {
   printf("DataSum[%i] =  %5.0f \n\r",Col, DataSum[Col]); // печатаем
}
 
RefSol на форуме Сообщить модератору о нарушении
0
0 / 0 / 0
Регистрация: 21.05.2014
Сообщений: 9
17.12.2014, 16:06  [ТС] 5
RefSol, при вводе количества строк и столбцов (6 и 5) максимальная сумма получается в третьем столбце, до тех пор он пишет максимальную сумму напротив вывода суммы. Если ввести что-то другое бывает напротив всех сумм пишет максимальная
0
17.12.2014, 16:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2014, 16:06
Помогаю со студенческими работами здесь

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

Определить сумму элементов каждого столбца матрицы
Ввести двумерный массив M x N. Определить сумму элементов каждого столбца :(

Определить сумму элементов каждого столбца матрицы
Помогите, пожалуйста, с решением данной задачи Взять матрицу M x N. Определить сумму элементов...

Определить сумму элементов каждого столбца матрицы
Дана матрица A(QxP) масс Q вагонов (Q=6); P-составов (P=4) 1) Ввести матрицу в диалоговом режиме...


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

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