Другие языки программирования и технологии

Помогите разработать класс матрицу =))

Вот : Разработать класс матрица . Конструктор по умолчанию, конструктор с указанной размерностью, вывод на экран, транспонирование матрицы !
Что-то получилось, но я неуверен в правильности:
======================
#include <iostream>
#include <ctime>

using namespace std;

class matrix{
public:
int a,b;
int c,d;
int **ar; // первый массив
int **art; // перевёрнутый массив

matrix(int n, int m){ // конструктор
a = n; // получаем параметры и передаём их как размер матрицы.
b = m;
}

void create(){ // создаём основной массив
ar = new int*[a];

for(int i(0); i < a; i++)
ar[i] = new int[b];
}

void createt(){ // создаём перевёрнутый массив
art = new int*[b];

for(int i(0); i < b; i++)
art[i] = new int[a];
}

void rnd(){ // заполняем случайными числами
c = 1;
d = 20;
for(int i(0); i < a; i++)
for(int j(0); j < b; j++)
ar[i][j] = rand() % (d - c + 1) + c;
}

void dis(){ // выводим на экран
for(int i(0); i < a; i++){
for(int j(0); j < b; j++){
cout.width(3);
cout << ar[i][j];
}
cout << endl;
}
}

void trns(){ // транспонируем матрицs
for(int i(0); i < b; i++)
for(int j(0); j < a; j++)
art[i][j] = ar[j][i];// значения одной матрицы присваиваем другой
}

void dist(){ // выводим на экран перевёрнутую матрицу
for(int i(0); i < b; i++){
for(int j(0); j < a; j++){
cout.width(3);
cout << art[i][j];
}
cout << endl;
}
}

void dlt(){ // удаляем динамический массив
for(int i(0); i < a; i++)
delete [] ar[i];
delete [] ar;

for(int i(0); i < b; i++)
delete [] art[i];
delete [] art;
}

~matrix(){
cout << "\nHere distructor works." << endl;
}
};

int main(){
int a,b;

cout << "Enter matrix size:\n";
cout << "Enter strings number: ";
cin >> a;
cout << "Enter column number: ";
cin >> b;

matrix m(a,b); // вызываем конструктор

m.create();
m.createt();
m.rnd();
m.dis();
cout << endl << endl;
m.trns();
m.dist();
m.dlt();

system("pause >> void");
return 0;
}
Stas Stranger
Stas Stranger
5 430
Лучший ответ
Nai Draug Пара замечаний

Освобождение памяти надо делать в деструкторе, т. к. "программист" может не вызвать del.

pause >> void - В Windows создает файл с именем void, (а если он уже есть, то добавляет к содержимому этого файла) и выводит туда, что pause пыталась вывести на экран.
Если надо скрыть вывод, то pause > nul
Вообще использование system не совсем хорошо. Т. к. вызывает внешнюю команду ОС. Н-р в Linux нет команды pause и там system("pause") выдаст ошибку.
Nai Draug a = n;
b = m;

Лучше было создать класс матрицы для хранения собственно одной матрицы, а транспонированную матрицу возвращать из метода. Ну или не возвращать, а ввести функцию транспонирования уже существующей.

Н-р если мы захотим создать просто матрицу, а транспонирование нам не нужно - память под неё всё равно будет выделяться в Вашем случае.
Nai Draug Ну и если вызвать dlt без транспонирования - у Вас программа может вылететь, т. к.
будет пытаться работать с пустым указателем на трансп. матрицу.

Сорь за небольшое занудство =)
Фууу. .
Очередная блондиночка с запросом "сделайте за меня нахаляву"

Помогать можно только тем кто хоть что-то делает.
Где пример твоих стараний? где конкретный вопрс про "делаю ТАК, а не срастается"?
VR
Vitalie Rotaru
27 060