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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
wallhack
0 / 0 / 0
Регистрация: 04.01.2012
Сообщений: 10
#1

Составить класс для работы с целочисленной матрицей - C++

06.01.2012, 00:02. Просмотров 1862. Ответов 21
Метки нет (Все метки)

Составить класс для работы с целочисленной матрицей произвольного размера, который задается в конструкторе,где данная матрица создается динамически. Включить саму матрицу во внутреннюю часть класса.
Во внешней части задать и реализовать следующие функции-методы:
-функция автоматического (через функцию rand) заполнение матрицы значениями из диапазона от -N до N (данный параметр передаются в качестве аргумента функции);
-функция возврата размера матрицы;
-функцию вывода всех элементов матрицы на печать;
-функцию перемножения данной матрицы с матрицей того же размера;
В основной программе создать объект данного класса, организовать циклическое меню для работы с объектом, позволяющим проверить выполнение всех функций класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2012, 00:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Составить класс для работы с целочисленной матрицей (C++):

Составить класс для работы с целочисленной матрицей размера 3х3. - C++
Составить класс для работы с целочисленной матрицей размера 3х3. Включить саму матрицу во внутреннюю часть класса. Во внешней части задать...

Реализовать класс для работы с квадратной целочисленной матрицей - C++
1) Составить описание класса для работы с квадратной целочисленной матрицей. Обязательные функции-члены класса для ввода/вывода ...

Описать класс для работы с целочисленной матрицей произвольного размера - C++
Составить класс для работы с целочисленной матрицей произвольного размера, который задается в конструкторе,где данная матрица создается...

Составить описание класса для работы с квадратной целочисленной матрицей - C++
Здравствуйте! Помогите, пожалуйста, написать при объектно-ориентированном подходе программу: составить описание класса для работы с...

Создать класс для работы с матрицей - C++
создать класс для работы с матрицей согласно задания. Предусмотреть наличие функций конструктора и деструктора, ввода и вывода элементов...

Создать класс для работы с матрицей по условию - C++
Ребят привет... Есть задание... Создайте класс matrix, который осуществляет проверку индексов массива на вхождение их в границы...

21
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
06.01.2012, 01:00 #2
какие-нибудь наработки есть?

Добавлено через 33 минуты
.....ясно.

все седал кроме имплеменации умножения матриц. скажем так вам домашнее задание.
обратите внимание на строки 28 и 103,104;
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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include <iomanip>
using std::setw;
 
#include <cstdlib>
using std::rand;
using std::srand;
 
#include <ctime>
using std::time;
 
class MyMatrix {
public:
    //контсруктор создает матрицу. если рамеры не заданы то по дефолту 5х5
    MyMatrix(int = 5, int = 5);
    ~MyMatrix();
 
    int getColumns() const;
    int getRows() const;
    void setRandValues(const int, const int);
    void printMatrix() const;
 
    //вам осталось выполнить имплеменатацию перегрузки оператора умножения. :)
    MyMatrix &operator*(const MyMatrix &);
 
private:
    int rows;
    int columns;
    int **myMatrix;
};
 
MyMatrix::MyMatrix(int r, int c) :
        rows(r), columns(c) {
    myMatrix = new int*[rows];
    for (int i = 0; i < rows; ++i) {
        myMatrix[i] = new int[columns];
    }
 
}
 
MyMatrix::~MyMatrix() {
    for (int i = 0; i < rows; ++i) {
        delete [] myMatrix[i];
    }
    delete [] myMatrix;
}
 
//print matrix
void MyMatrix::printMatrix() const {
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < columns; ++j) {
            cout << setw(4) << myMatrix[i][j];
        }
        cout << endl;
    }
}
 
//fill matrix with random values
void MyMatrix::setRandValues(const int from, const int to) {
    srand(time(NULL));
    for (int i = 0; i < this->rows; ++i) {
        for (int j = 0; j < this->columns; ++j) {
            this->myMatrix[i][j] = (from + (rand() % (to-from)));
        }
    }
}
 
int MyMatrix::getColumns() const {
    return columns;
}
 
int MyMatrix::getRows() const {
    return rows;
}
 
int main() {
 
    //cоздаем матрицу
    MyMatrix matrix(6, 6);
    MyMatrix zatrix(6, 6);
 
        //получаем размеры
    cout << "MATRIX SIZE:: " << matrix.getRows() << "x" << matrix.getColumns() << endl;
    cout << "ZATRIX SIZE:: " << zatrix.getRows() << "x" << zatrix.getColumns() << endl;
 
    //заполняем случайными числами.
    matrix.setRandValues(1, 50);
    zatrix.setRandValues(30,99);
 
    //печатаем что получилось
    cout << "\nMATRIX ::\n";
    matrix.printMatrix();
 
    cout << "\nZATRIX ::\n";
    zatrix.printMatrix();
 
    //умножение
    //отклмментить после имплементации перегрузки оператора умножения
    // cout << "\nMATRIX * ZATRIX ::\n";
    //(matrix*zatrix).printMatrix();
 
    cin.get();
    return 0;
}
ВЫВОД
MATRIX SIZE:: 6x5
ZATRIX SIZE:: 6x5

MATRIX ::
10 20 18 26 25
45 8 37 6 11
6 27 5 48 29
21 34 28 15 38
9 25 41 48 33
25 1 18 7 42

ZATRIX ::
50 93 46 66 81
75 76 44 69 47
50 51 42 36 35
88 71 87 50 31
37 40 98 94 57
93 67 53 54 76
1
wallhack
0 / 0 / 0
Регистрация: 04.01.2012
Сообщений: 10
07.01.2012, 15:27  [ТС] #3
мне не удается запустить программу жалуется на:
error C2039: 'rand' : is not a member of 'std'
error C2873: 'rand' : symbol cannot be used in a using-declaration
error C2039: 'srand' : is not a member of 'std'
error C2873: 'srand' : symbol cannot be used in a using-declaration
error C2039: 'time' : is not a member of 'std'
error C2873: 'time' : symbol cannot be used in a using-declaration
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
07.01.2012, 20:49 #4
Цитата Сообщение от wallhack Посмотреть сообщение
мне не удается запустить
чем компилируете ?
0
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
07.01.2012, 20:58 #5
Убери using для этих функций.
0
wallhack
0 / 0 / 0
Регистрация: 04.01.2012
Сообщений: 10
07.01.2012, 22:04  [ТС] #6
Цитата Сообщение от greeezz Посмотреть сообщение
чем компилируете ?
visual c++ 6.0


Цитата Сообщение от NoMasters Посмотреть сообщение
Убери using для этих функций.
не помогло
0
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
07.01.2012, 22:12 #7
Что, даже вывод компилятора не изменился?
0
wallhack
0 / 0 / 0
Регистрация: 04.01.2012
Сообщений: 10
07.01.2012, 22:15  [ТС] #8
Цитата Сообщение от NoMasters Посмотреть сообщение
Что, даже вывод компилятора не изменился?
после этого вообще 27 ошибок выдает и 2 варнинга
0
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
07.01.2012, 22:18 #9
Забавно. Итоговый код и ошибки в студию
0
wallhack
0 / 0 / 0
Регистрация: 04.01.2012
Сообщений: 10
07.01.2012, 22:24  [ТС] #10
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
 
class MyMatrix {
public:
        //контсруктор создает матрицу. если рамеры не заданы то по дефолту 5х5
        MyMatrix(int = 5, int = 5);
        ~MyMatrix();
 
        int getColumns() const;
        int getRows() const;
        void setRandValues(const int, const int);
        void printMatrix() const;
 
        //вам осталось выполнить имплеменатацию перегрузки оператора умножения. :)
        MyMatrix &operator*(const MyMatrix &);
 
private:
        int rows;
        int columns;
        int **myMatrix;
};
 
MyMatrix::MyMatrix(int r, int c) :
                rows(r), columns(c) {
        myMatrix = new int*[rows];
        for (int i = 0; i < rows; ++i) {
                myMatrix[i] = new int[columns];
        }
 
}
 
MyMatrix::~MyMatrix() {
        for (int i = 0; i < rows; ++i) {
                delete [] myMatrix[i];
        }
        delete [] myMatrix;
}
 
//print matrix
void MyMatrix::printMatrix() const {
        for (int i = 0; i < rows; ++i) {
                for (int j = 0; j < columns; ++j) {
                        cout << setw(4) << myMatrix[i][j];
                }
                cout << endl;
        }
}
 
//fill matrix with random values
void MyMatrix::setRandValues(const int from, const int to) {
        srand(time(NULL));
        for (int i = 0; i < this->rows; ++i) {
                for (int j = 0; j < this->columns; ++j) {
                        this->myMatrix[i][j] = (from + (rand() % (to-from)));
                }
        }
}
 
int MyMatrix::getColumns() const {
        return columns;
}
 
int MyMatrix::getRows() const {
        return rows;
}
 
int main() {
 
        //cоздаем матрицу
        MyMatrix matrix(6, 6);
        MyMatrix zatrix(6, 6);
 
        //получаем размеры
        cout << "MATRIX SIZE:: " << matrix.getRows() << "x" << matrix.getColumns() << endl;
        cout << "ZATRIX SIZE:: " << zatrix.getRows() << "x" << zatrix.getColumns() << endl;
 
        //заполняем случайными числами.
        matrix.setRandValues(1, 50);
        zatrix.setRandValues(30,99);
 
        //печатаем что получилось
        cout << "\nMATRIX ::\n";
        matrix.printMatrix();
 
        cout << "\nZATRIX ::\n";
        zatrix.printMatrix();
 
        //умножение
        //отклмментить после имплементации перегрузки оператора умножения
        // cout << "\nMATRIX * ZATRIX ::\n";
        //(matrix*zatrix).printMatrix();
 
        cin.get();
        return 0;
}
: error C2065: 'cout' : undeclared identifier
: error C2065: 'setw' : undeclared identifier
: warning C4552: '<<' : operator has no effect; expected operator with side-effect
: error C2065: 'endl' : undeclared identifier
: warning C4552: '<<' : operator has no effect; expected operator with side-effect
: error C2297: '<<' : illegal, right operand has type 'char [15]'
: error C2297: '<<' : illegal, right operand has type 'char [15]'
error C2297: '<<' : illegal, right operand has type 'char [12]'
: error C2297: '<<' : illegal, right operand has type 'char [12]'
: error C2065: 'cin' : undeclared identifier
: error C2228: left of '.get' must have class/struct/union type
Error executing cl.exe.

5.exe - 9 error(s), 2 warning(s)
0
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
07.01.2012, 22:29 #11
Не для всех функций надо было убрать, а только для тех, на которые ругалось.
1
wallhack
0 / 0 / 0
Регистрация: 04.01.2012
Сообщений: 10
07.01.2012, 22:41  [ТС] #12
Цитата Сообщение от NoMasters Посмотреть сообщение
Не для всех функций надо было убрать, а только для тех, на которые ругалось.
во помогло Благодарю)) все заработало
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
07.01.2012, 23:14 #13
Цитата Сообщение от wallhack Посмотреть сообщение
во помогло Благодарю)) все заработало
Вы когда домашнее задание выполните, дайте хоть взглянуть, чтобы было понятно что не зря старались
1
wallhack
0 / 0 / 0
Регистрация: 04.01.2012
Сообщений: 10
08.01.2012, 00:52  [ТС] #14
Цитата Сообщение от greeezz Посмотреть сообщение
Вы когда домашнее задание выполните, дайте хоть взглянуть, чтобы было понятно что не зря старались
проверьте, я хоть в правильном направлении,
а то я чет запутался

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool MultiplyMatrix(double matrix, int Rows1, int Columns1
     double zatrix, int Rows2, int Columns2,
     int getRows(), int getRows())
{
Rows1=matrix.getRows();
Columns1=matrix.getColumns();
 Rows2=zatrix.getRows();
 
  for (int i = 0; i < Rows1; i++)
   for (int j = 0; j < Columns1; j++)
   {
    double prz = 0;
    for (int n = 0; n < Rows2; n++)
    {
     prz += matrix[i][n]*zatrix[n][j];
    }
    (matrix*zatrix)[i][j] = prz;
   }
  return 0;
 }
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
08.01.2012, 10:43 #15
Цитата Сообщение от wallhack Посмотреть сообщение
проверьте, я хоть в правильном направлении,
а то я чет запутался
Честно говоря тут не только вы запутались. Тут перегрузкой оператора умножения (для двух матриц) даже и не пахнет. Я с трудом понимаю что вы хотели сказать при помощи функции которую вы написали.

Добавлено через 2 часа 20 минут
хех.. ну ок.

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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include <iomanip>
using std::setw;
 
#include <cstdlib>
using std::rand;
using std::srand;
 
#include <ctime>
using std::time;
 
class MyMatrix {
public:
    //контсруктор создает матрицу. если рамеры не заданы то по дефолту 5х5
    MyMatrix(int = 5, int = 5);
    ~MyMatrix();
 
    int getColumns() const;
    int getRows() const;
    void setRandValues(const int, const int);
    void printMatrix() const;
 
    //перегрузка оператора умножения матрицы на матрицу
    MyMatrix operator*(const MyMatrix &);
 
private:
    int rows;
    int columns;
    int **myMatrix;
};
 
//перегузка оператора умножения матриц
MyMatrix MyMatrix::operator*(const MyMatrix &right) {
    MyMatrix temp(this->getRows(), right.getColumns());
    for (int i = 0; i < getRows(); ++i) {
        for (int j = 0; j < getColumns(); ++j) {
            for (int k = 0; k < getRows(); ++k) {
                temp.myMatrix[i][j] += (myMatrix[i][k] * right.myMatrix[k][j]);
            }
        }
    }
 
    return temp;
}
 
MyMatrix::MyMatrix(int r, int c) :
        rows(r), columns(c) {
    rows = (rows <= 0 ? 5 : rows);
    columns = (columns <= 0 ? 5 : columns);
    myMatrix = new int*[rows];
    for (int i = 0; i < rows; ++i) {
        myMatrix[i] = new int[columns];
        for(int j = 0; j < columns; ++j){
            myMatrix[i][j] = 0; //set default values to matrix as ZERO
        }
    }
 
}
 
MyMatrix::~MyMatrix() {
    for (int i = 0; i < rows; ++i) {
        delete[] myMatrix[i];
    }
    delete[] myMatrix;
}
 
//print matrix
void MyMatrix::printMatrix() const {
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < columns; ++j) {
            cout << setw(4) << myMatrix[i][j];
        }
        cout << endl;
    }
}
 
//fill matrix with random values
void MyMatrix::setRandValues(const int from, const int to) {
    srand(time(NULL));
    for (int i = 0; i < this->rows; ++i) {
        for (int j = 0; j < this->columns; ++j) {
            this->myMatrix[i][j] = (from + (rand() % (to - from)));
        }
    }
}
 
int MyMatrix::getColumns() const {
    return columns;
}
 
int MyMatrix::getRows() const {
    return rows;
}
 
int main() {
 
    //cоздаем матрицу
    MyMatrix matrix(5, 6);
    MyMatrix zatrix(6, 5);
 
    //получаем размеры
    cout << "MATRIX SIZE:: " << matrix.getRows() << "x" << matrix.getColumns() << endl;
    cout << "ZATRIX SIZE:: " << zatrix.getRows() << "x" << zatrix.getColumns() << endl;
 
    //заполняем случайными числами.
    matrix.setRandValues(1, 10); // например от 1 до 9
    zatrix.setRandValues(0, 2); //например от 0 до 1
 
    //печатаем что получилось
    cout << "\nMATRIX ::\n";
    matrix.printMatrix();
 
    cout << "\nZATRIX ::\n";
    zatrix.printMatrix();
 
    //умноженаем матрицу MATRIX на матрицу ZATRIX
    //и печатаем что получилось
    cout << "\nMATRIX * ZATRIX ::\n";
    (matrix * zatrix).printMatrix() ;
 
 
    cin.get();
    return 0;
}
ПРИМЕР РАБОТЫ ПРОГРАММЫ

MATRIX SIZE:: 5x6
ZATRIX SIZE:: 6x5

MATRIX ::
6 8 7 4 3 8
6 4 6 8 2 5
1 1 8 9 3 9
3 2 7 7 9 8
2 6 9 2 6 7

ZATRIX ::
1 1 1 1 1
0 1 0 0 1
0 1 0 1 1
0 0 0 0 1
0 0 0 0 1
0 1 0 1 0

MATRIX * ZATRIX ::
6 21 6 13 28
6 16 6 12 26
1 10 1 9 22
3 12 3 10 28
2 17 2 11 25
1
08.01.2012, 10:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2012, 10:43
Привет! Вот еще темы с ответами:

Описать класс для работы с матрицей вещественных чисел. - C++
Здравствуйте. Помогите пожалуйста разработать программу с классами. Задание: Описать класс CFMATRIX2 для работы с матрицей ...

Описать класс CFMATRIX1 для работы с матрицей вещественных чисел - C++
Описать класс CFMATRIX1 для работы с матрицей вещественных чисел. Класс должен реализовывать следующие операции над матрицами: сложение,...

Создать класс для работы с прямоугольной матрицей размером 3х3 - C++
ввести класс для работы с прямоугольной матрицей(3х3) Реализовать оперцию : ввод матрицы с консоли (оператор &gt;&gt;)продемонстрируйте...

Класс для работы с прямоугольной матрицей, ввод матрицы с консоли (оператор >>) - C++
ввести класс для работы с прямоугольной матрицей(3х3) Реализовать операцию : ввод матрицы с консоли (оператор &gt;&gt;)продемонстрируйте...


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

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

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