powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Реализация класса для работы с матрицами целых чисел
25 сообщений из 37, страница 1 из 2
Реализация класса для работы с матрицами целых чисел
    #38069904
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задание: Составить описание класса для определения квадратных матриц целых чисел. Обеспечить выполнение операций над матрицами: слоение, вычитание, умножение, транспонирование, умножение элементов матриц на скаляр. Предусмотреть вывод отдельных элементов и самих матриц на экран.

Помогите пожалуйста.
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38069925
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть часть программы с ошибками. Но исправить я не могу(((

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>

class QMatrix
{
private:
int N;
int M;
double** matrix;
public:
QMatrix(); // конструктор по умолчанию
QMatrix(int n):Matrix(n,n) // конструктор с параметрами
QMatrix(const Matrix& ob) // конструктор копии
~QMatrix() // деструктор
void Enter()
void Show()
QMatrix operator + (const Matrix&)
QMatrix operator = (const Matrix&)
QMatrix operator - (const Matrix& )
QMatrix operator * (const Matrix& )
}

QMatrix::QMatrix() // реализация конструктора по умолчанию
{
N = 0; M = 0;
matrix = new double*[N];
for ( int i = 0; i < N; ++i)
matrix[i] = new double[M];
}

QMatrix:: QMatrix(int n1) // реализация конструктора с параметрами
{
N = n1;
M = n1;
a=new double* [M];
for (int i=0;i<M;i++)
a[i] = new double [N];
for (int i=0;i<M;i++)
for (int j=0;j<N;j++)
a[i][j]=0.0;

}

QMatrix::QMatrix (const Matrix &ob) // реализация конструктора копии
{
N = ob.N;
M = ob.M;
matrix = new double*[N];
for ( int i = 0; i < N; ++i)
matrix[i] = new double[M];

for ( int i = 0; i < N; ++i)
for ( int j = 0; j < M; ++j)
matrix[i][j] = ob.matrix[i][j];

}

QMatrix::~QMatrix() // деструктор
{
for ( int i = 0; i < N; ++i)
delete[] matrix[i];
delete[] matrix;
}

void QMatrix::Enter() // ввод матриц
{
int i, j;
for ( i = 0; i < N; ++i)
for ( j = 0; j < M; ++j)
matrix[i][j] = 0.01 * (rand() % 1001);

}

void Matrix::Show() // вывод матрицы
{
int i, j;

for ( i = 0; i < N; ++i)
for ( j = 0; j < M; ++j)
{
if( j % M == 0)
std::cout << std::endl;
std::cout << std::setw(10) << matrix[i][j];
}
std::cout << std::endl;
}

QMatrix QMatrix :: operator + ( const Matrix& ob) // сумма матриц
{
QMatrix temp; // реализовано с помощью временного объекта
temp.N = this->N;
temp.M = this->M;
int i, j;
temp.matrix = new double*[temp.N];
for ( i = 0; i < temp.N; ++i)
temp.matrix[i] = new double[temp.M];

for ( i = 0; i < temp.N; ++i)
for ( j = 0; j < temp.M; ++j)
temp.matrix[i][j] = this->matrix[i][j] + ob.matrix[i][j];
return temp;

}

QMatrix QMatrix::operator - (const Matrix& ob) // разность матриц
{
int i, j;
for ( i = 0; i < this->N; ++i)
for ( j = 0; j < this->M; ++j)
this->matrix[i][j] = this->matrix[i][j] - ob.matrix[i][j];
return *this;
}

QMatrix QMatrix::operator * (const Matrix& ob) // умножение матриц
{


QMatrix temp;
temp.N = this->N;
temp.M = this->M;
int i, j, k;
temp.matrix = new double*[temp.N];
for ( i = 0; i < temp.N; ++i)
temp.matrix[i] = new double[temp.M];

for ( i = 0; i < temp.N; ++i)
for ( j = 0; j < temp.M; ++j)
{
temp.matrix[i][j] = 0;
for ( k = 0; k < temp.M; ++k)
temp.matrix[i][j] = temp.matrix[i][j] + (this->matrix[i][k] * ob.matrix[k][j]);
}
return temp;
}


int main()
{
srand((unsigned) time(0));
QMatrix m1(3, 3);
m1.Enter();
m1.Show();
QMatrix m2(3, 3);
m2.Enter();
m2.Show();
QMatrix m3(3,3);
m3 = m1 * m2;
m3.Show();

}
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38069951
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVDНо исправить я не могу(((
Чужие программы совесть править мешает?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070001
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторУ меня есть часть программы с ошибками. Но исправить я не могу(((Остальные, логично предположить, тоже не смогут - потому что не знают, какие ошибки.
Код: plaintext
1.
2.
3.
4.
5.
6.
{
N = 0; M = 0;
matrix = new double*[N];
for ( int i = 0; i < N; ++i)
matrix = new double[M];
}

Это лихо. И вообще, кто такие у Вас N и M для [i]квадратной
матрицы?
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070004
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, что вы))) мне дали программу как ссылку, я пыталась переделать код под свою задачу, но опыта не хватает до конца все понять и переделать. Поэтому обращаюсь к участникам форума(((
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070024
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Abstraction, я понимаю, что эту часть программы надо убрать. А чем-то ее заменять или сразу переходить к 13-ой строчке? Просто

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
QMatrix:: QMatrix(int n1) // реализация конструктора с параметрами
{
    N = n1;
    M = n1; 
    a=new double* [M];
    for (int i=0;i<M;i++)
        a[i] = new double [N];
    for (int i=0;i<M;i++)
        for (int j=0;j<N;j++)
            a[i][j]=0.0;    
                    
} 


эту часть я брала из книги. И там N и M так же фигурируют.
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070047
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVDопыта не хватает до конца все понять и переделать
Ну так пойдите и наработайте нужный опыт. Потом вернётесь к этой задаче.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070059
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, если есть возможность, просто помогите(((
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070063
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторэту часть я брала из книги. И там N и M так же фигурируют. Видимо, в книге рассматривался пример произвольной матрицы - у неё может быть разное число строк и столбцов, поэтому нужно две переменных. У квадратной же матрицы размер один - что вдоль, что поперёк.

Можете написать комментарии к каждой строке кода - что, по-Вашему, эта строка делает; какой смысл несёт?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
QMatrix:: QMatrix(int n1)
{
N = n1;
M = n1;
a=new double* [M];
for (int i=0;i<M;i++)
a[i] = new double [N];
for (int i=0;i<M;i++)
for (int j=0;j<N;j++)
a[i][j]=0.0;

} 
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070073
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVDесли есть возможность, просто помогите(((
Помочь с чем? До сих пор Вы не задали ни одного конкретного вопроса. А начитывать Вам
заново весь курс программирования - возможности нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070102
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Abstraction,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
QMatrix:: QMatrix(int n1) - задаем конструктор базового класса с параметром
{
N = n1; - приравниваем параметр к числу строк
M = n1; - приравниваем параметр к числу столбцов
a=new double* [M]; - создаем массив столбцов
for (int i=0;i<M;i++) 
a[i] = new double [N]; - массив строк
for (int i=0;i<M;i++)
for (int j=0;j<N;j++)
a[i][j]=0.0;

} 


А те, которые не указала, наверное, задают условия выполнения для квадратной матрицы.
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070105
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, я понимаю(
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070131
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVDА те, которые не указала, наверное, задают условия выполнения для квадратной матрицы.Что такое "условия выполнения"? Нет, к каждой - значит к каждой. Грубо говоря, попробуйте написать такие комментарии, чтобы можно было удалить весь код, а потом по комментариям его снова написать (разумеется, комментарии должны быть на русском, а не на C++).
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070173
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Abstraction,ого, с педагогический точки зрения вы просто гений, без шуток!

А можно вопросы сначала позадаю? Вы только не ругайтесь, если они будут совсем глупыми((((
Мне надо выкинуть N и M, т.к. это квадратная матрица. Т.е. получается:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 
class QMatrix: public Matrix:  
{
public:   // конструктор создания квадратной матрицы по ее размеру
    QMatrix(); // конструктор для преобразования к квадратной матрице
    QMatrix(int ) // конструктор по умолчанию
    QMatrix(const Matrix& ob) // конструктор копии
    ~QMatrix() // деструктор 
    void Enter() -ввод
    void Show() -вывод
    QMatrix operator + (const Matrix&) 
    QMatrix operator = (const Matrix&) 
    QMatrix operator - (const Matrix& ) 
    QMatrix operator * (const Matrix& )  


Пока все так?
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070211
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVD,

Не очень понятно, к каким строка какие комментарии относятся. "Конструктор для преобразования к квадратной матрице" - это когда у нас может быть нечто, не являющееся квадратной матрицей, и мы на его основе хотим уметь собирать квадратную матрицу. В задаче такого нет и близко.

То, что названо "конструктором по умолчанию" точнее называть "конструктором без параметров". Это, натурально, конструктор, который не принимает параметров.
"Конструктор для создания по размеру" - конструктор, который принимает размер и по нему строит матрицу (такого размера). В комментарии хорошо бы оговорить, какую матрицу мы строим - нулевую, единичную, какую-то ещё...
"Конструктор копирования", он же "конструктор копии" - конструктор, который принимает единственный аргумент, ссылку на экземпляр класса, и делает на её основе ещё один объект класса, копию "образца". Если название типа - QMatrix, то тип аргумента пишется const QMatrix&. const здесь означает, что мы "обещаем" компилятору, что в процессе копирования не "испортим" переданный образец.

Вывод - он и в Африке вывод. Заявлено, что метод Show() выводит матрицу, и он, в нынешней реализации, это делает.
А вот Enter() странен. По названию можно было бы подумать, что он заполняет матрицу вводимыми пользователем данными - но нынешняя его реализация присваивает элементам матрицы случайные значения. Лично я бы переименовал метод в Randomize, чтобы адекватнее отразить его сущность.
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070213
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVDПока все так?
Нет. Во-первых, комментарии не соответствуют коду.
Во-вторых, делать ввод и вывод методами самой матрицы - плохой дизайн. Накрайняк можно
перегрузить операторы << и >>, но не более того.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070266
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Abstraction,
простите за комментарии, действительно не соответствуют.
Я все равно не понимаю, что оставить, а что выкинуть. Если я оставляю конструктор создания квадратной матрицы по ее размеру, то выкинуть конструктор по умолчанию? Не могу понять, нужен ли конструктор копии(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 
class QMatrix: public Matrix:  
{
public:  
    QMatrix(); // конструктор по умолчанию
    QMatrix(int ) // конструктор создания квадратной матрицы по ее размеру
    QMatrix(const QMatrix& ob) // конструктор копии
    ~QMatrix() // деструктор 
    void Enter() -ввод
    void Show() -вывод
    QMatrix operator + (const Matrix&) 
    QMatrix operator = (const Matrix&) 
    QMatrix operator - (const Matrix& ) 
    QMatrix operator * (const Matrix& ) 
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070299
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVDЯ все равно не понимаю, что оставить, а что выкинуть. Если я оставляю
конструктор создания квадратной матрицы по ее размеру, то выкинуть конструктор по
умолчанию? Не могу понять, нужен ли конструктор копии(
Ответы на эти вопросы определяются тем, как данный класс будет использоваться. Без
использования можно выкинуть вообще всё.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070311
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, ну смотрите, если забыть про все ошибки в программе и посмотреть только на структуру, то в дальнейшим автором используется конструктор копии при сложении, вычитании и умножении матриц. Значит это мы оставляем. Правильно?
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070339
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVDв дальнейшим автором используется конструктор копии при сложении, вычитании
и умножении матриц
В упор не вижу чтобы он там использовался. Ткните пальцем в строчку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070348
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
QMatrix QMatrix :: operator + ( const Matrix& ob) // сумма матриц 
{  
    QMatrix temp;                        // реализовано с помощью временного объекта
    temp.N = this->N; 
    temp.M = this->M; 
    int i, j;
    temp.matrix = new double*[temp.N]; 
    for ( i = 0; i < temp.N; ++i) 
        temp.matrix[i] = new double[temp.M]; 
 
    for ( i = 0; i < temp.N; ++i) 
        for ( j = 0; j < temp.M; ++j) 
            temp.matrix[i][j] = this->matrix[i][j] + ob.matrix[i][j]; 
    return temp;
 
} 


Первая строчка
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070397
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVDПервая строчка
В ней нет вызова copy-конструктора, это простое объявление функции, получающей константный
объект по ссылке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070500
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, ну направте меня, пожалуйста, в нужное русло. Я мучаюсь с этой задачей большое кол-во времени, а у меня еще их 6, сдать надо в понедельник. Я просто в отчаяние((((
Понимаю, что трудно Вам мне это все объяснять, так как я полный дилетант. Для меня ваши предложения некоторые просто как на китайском, потому что я не программист, а физик. И мне очень сложно дается логика программ. Приблизительно понимаю, что не правильно, но заменить не могу.
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070507
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OksanaVDЯ мучаюсь с этой задачей большое кол-во времени, а у меня еще их 6, сдать
надо в понедельник. Я просто в отчаяние((((
Не надо отчаиваться, в этой жизни есть более неприятные вещи чем академический отпуск.
Который я Вам рекомендую взять, чтобы заново пройти материал первых курсов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Реализация класса для работы с матрицами целых чисел
    #38070512
OksanaVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, спасибо. Именно так "нужное русло" я и представляла.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Реализация класса для работы с матрицами целых чисел
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]