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

Помогите пожалуйста.
...
Рейтинг: 0 / 0
07.12.2012, 15:24
    #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
07.12.2012, 15:33
    #38069951
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
OksanaVDНо исправить я не могу(((
Чужие программы совесть править мешает?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.12.2012, 15:54
    #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
07.12.2012, 15:56
    #38070004
OksanaVD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
Dimitry Sibiryakov, что вы))) мне дали программу как ссылку, я пыталась переделать код под свою задачу, но опыта не хватает до конца все понять и переделать. Поэтому обращаюсь к участникам форума(((
...
Рейтинг: 0 / 0
07.12.2012, 16:08
    #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
07.12.2012, 16:15
    #38070047
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
OksanaVDопыта не хватает до конца все понять и переделать
Ну так пойдите и наработайте нужный опыт. Потом вернётесь к этой задаче.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.12.2012, 16:19
    #38070059
OksanaVD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
Dimitry Sibiryakov, если есть возможность, просто помогите(((
...
Рейтинг: 0 / 0
07.12.2012, 16:21
    #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
07.12.2012, 16:23
    #38070073
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
OksanaVDесли есть возможность, просто помогите(((
Помочь с чем? До сих пор Вы не задали ни одного конкретного вопроса. А начитывать Вам
заново весь курс программирования - возможности нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.12.2012, 16:31
    #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
07.12.2012, 16:32
    #38070105
OksanaVD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
Dimitry Sibiryakov, я понимаю(
...
Рейтинг: 0 / 0
07.12.2012, 16:41
    #38070131
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
OksanaVDА те, которые не указала, наверное, задают условия выполнения для квадратной матрицы.Что такое "условия выполнения"? Нет, к каждой - значит к каждой. Грубо говоря, попробуйте написать такие комментарии, чтобы можно было удалить весь код, а потом по комментариям его снова написать (разумеется, комментарии должны быть на русском, а не на C++).
...
Рейтинг: 0 / 0
07.12.2012, 17:02
    #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
07.12.2012, 17:21
    #38070211
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
OksanaVD,

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

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

Вывод - он и в Африке вывод. Заявлено, что метод Show() выводит матрицу, и он, в нынешней реализации, это делает.
А вот Enter() странен. По названию можно было бы подумать, что он заполняет матрицу вводимыми пользователем данными - но нынешняя его реализация присваивает элементам матрицы случайные значения. Лично я бы переименовал метод в Randomize, чтобы адекватнее отразить его сущность.
...
Рейтинг: 0 / 0
07.12.2012, 17:22
    #38070213
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
OksanaVDПока все так?
Нет. Во-первых, комментарии не соответствуют коду.
Во-вторых, делать ввод и вывод методами самой матрицы - плохой дизайн. Накрайняк можно
перегрузить операторы << и >>, но не более того.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.12.2012, 17:55
    #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
07.12.2012, 18:15
    #38070299
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
OksanaVDЯ все равно не понимаю, что оставить, а что выкинуть. Если я оставляю
конструктор создания квадратной матрицы по ее размеру, то выкинуть конструктор по
умолчанию? Не могу понять, нужен ли конструктор копии(
Ответы на эти вопросы определяются тем, как данный класс будет использоваться. Без
использования можно выкинуть вообще всё.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.12.2012, 18:24
    #38070311
OksanaVD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
Dimitry Sibiryakov, ну смотрите, если забыть про все ошибки в программе и посмотреть только на структуру, то в дальнейшим автором используется конструктор копии при сложении, вычитании и умножении матриц. Значит это мы оставляем. Правильно?
...
Рейтинг: 0 / 0
07.12.2012, 18:40
    #38070339
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
OksanaVDв дальнейшим автором используется конструктор копии при сложении, вычитании
и умножении матриц
В упор не вижу чтобы он там использовался. Ткните пальцем в строчку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.12.2012, 18:45
    #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
07.12.2012, 19:20
    #38070397
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
OksanaVDПервая строчка
В ней нет вызова copy-конструктора, это простое объявление функции, получающей константный
объект по ссылке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.12.2012, 20:50
    #38070500
OksanaVD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
Dimitry Sibiryakov, ну направте меня, пожалуйста, в нужное русло. Я мучаюсь с этой задачей большое кол-во времени, а у меня еще их 6, сдать надо в понедельник. Я просто в отчаяние((((
Понимаю, что трудно Вам мне это все объяснять, так как я полный дилетант. Для меня ваши предложения некоторые просто как на китайском, потому что я не программист, а физик. И мне очень сложно дается логика программ. Приблизительно понимаю, что не правильно, но заменить не могу.
...
Рейтинг: 0 / 0
07.12.2012, 20:55
    #38070507
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
OksanaVDЯ мучаюсь с этой задачей большое кол-во времени, а у меня еще их 6, сдать
надо в понедельник. Я просто в отчаяние((((
Не надо отчаиваться, в этой жизни есть более неприятные вещи чем академический отпуск.
Который я Вам рекомендую взять, чтобы заново пройти материал первых курсов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.12.2012, 21:00
    #38070512
OksanaVD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация класса для работы с матрицами целых чисел
Dimitry Sibiryakov, спасибо. Именно так "нужное русло" я и представляла.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Реализация класса для работы с матрицами целых чисел / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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