Здравствуйте!
Который вот уже день бьюсь! Не могу найти ошибку!
Нужно поставить ручной ввод и найти детерминант. Матрица сначала заполнялась рандомно, а потом я решил заполнить ее вручную и....всё!
консоль не ожидает ввода пользователя (скрин ошибки прислал).
Детерминант начал искать, но там не справился.. Сложение, умножение и вычитание сделал, а его не смог. что-то в шаблонах запутался. Посмотрите пожалуйста!
Вот код (main):
Код:
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <string>
#include <ctime>
#include "Matrix.h"
using namespace std;
void showMenu(){
cout << "Menu:" << endl;
cout << "1. Sum matrix A and B \n";
cout << "2. Difference matrix A and B \n";
cout << "3. Multiplication matrix A and B \n";
cout << "4. Multiplication matrix A by the number \n";
cout << "5. Determinant matrix A \n";
cout << "6. Enter matrix again \n";
cout << "7. Clear Screen \n";
}
int userAnswer(){
int ans;
cout << "Your choice: ";
cin >> ans;
return ans;
}
int inRow(){
int r;
cout << "Enter rows: ";
cin >> r;
cout << endl;
return r;
}
int inCol(){
int c;
cout << "Enter columns: ";
cin >> c;
cout << endl;
return c;
}
int manualInput(){
bool an;
cout << "Do you want to enter manually? y/n";
cin >> an;
return an;
}
int main()
{
bool manual = false;
char answer='y';
string message1("Invalid input!");
string message2("Matrix of different size!");
int choise, row, col, x;
srand(time(NULL));
cout << "Matrix A" << endl;
row = inRow();
col = inCol();
manual = manualInput();
Matrix<int> a(row, col);
a.manual();
cout << "Matrix B" << endl;
row = inRow();
col = inCol();
manual = manualInput();
Matrix<int> b(row, col);
b.manual();
cout << "View matrix A:" << endl;
a.out();
cout << "View matrix B:" << endl;
b.out();
while (answer == 'y'){
showMenu();
try{
choise = userAnswer();
if (!(choise >= 1 && choise <= 9))
throw message1;
}
catch (string message){
cout << message << endl;
system("pause");
exit(1);
}
try{
switch (choise)
{
case 1:
if (a.Matrix_get_n() != b.Matrix_get_n() || a.Matrix_get_m() != b.Matrix_get_m())
throw message2;
cout << "Sum matrix A and B:" << endl;
(a + b).out();
break;
case 2:
if (a.Matrix_get_n() != b.Matrix_get_n() || a.Matrix_get_m() != b.Matrix_get_m())
throw message2;
cout << "Difference matrix A and B:" << endl;
(a - b).out();
break;
case 3:
cout << "Multiplication matrix A and B:" << endl;
(a * b).out();
break;
case 4:
cout << "Введите число на которое умножаем матрицу A: ";
cin >> x;
cout << "Multiplication matrix A by the number " << x << endl;
(a * x).out();
break;
case 5:
cout << "Determinant matrix A: ";
break;
case 6:
break;
case 7:
system("cls");
break;
default:
cout << "Invalid option!" << endl;
break;
}
}
catch (string message){
cout << message << endl;
system("pause");
exit(1);
}
cout << "Do you want to continue? y/n" << endl;
cin >> answer;
}
system("cls");
cout << "Exit!" << endl;
system("pause");
return 0;
}
и шаблон Matrix.h:
Код:
template<class T>
class Matrix {
private:
T **mas;
int n, m;
public:
Matrix() {}
int Matrix_get_n() {
return n;
}
int Matrix_get_m() {
return m;
}
T** get() {
return mas;
}
void set(T** mas1) {
mas = mas1;
}
Matrix(int n1, int m1);
void manual();
void out();
Matrix(const Matrix<T> &a);
~Matrix();
Matrix<T> operator +(Matrix<T> &b);
Matrix<T> operator -(Matrix<T> &b);
Matrix<T> operator *(Matrix<T> &b);
Matrix<T> operator *(int &x);
};
template<class T>
Matrix<T>::Matrix(int n1, int m1) {
n = n1;
m = m1;
mas = new T*[n];
for (int i = 0; i < n; i++) {
mas[i] = new T[m];
}
}
template<class T>
void Matrix<T>::manual() {
for (int k = 0; k < n; k++) {
for (int i = 0; i < m; i++) {
cout << "Vvedite [" << k << "][" << i << "] element: ";
cin >> mas[k][i];
}
cout << endl;
}
}
template<class T>
void Matrix<T>::out()
{
for (int k = 0; k < n; k++) {
for (int i = 0; i < m; i++) {
cout << setw(4) << mas[k][i];
}
cout << endl;
}
cout << endl;
}
template<class T>
Matrix<T>::Matrix(const Matrix<T> &a) // конструктор копирования
{
n = a.n;
m = a.m;
mas = new T*[n];
for (int i = 0; i < n; i++) {
mas[i] = new T[m];
}
for (int k = 0; k < n; k++) {
for (int i = 0; i < m; i++) {
mas[k][i] = a.mas[k][i];
}
}
}
template<class T>
Matrix<T>::~Matrix() {
for (int i = 0; i < n; i++) delete[] mas[i];
delete[]mas;
}
template<class T>
Matrix<T> Matrix<T>::operator +(Matrix<T> &b) {
Matrix<T> c(n, m);
for (int k = 0; k < n; k++) {
for (int i = 0; i < m; i++) {
c.mas[k][i] = b.mas[k][i] + mas[k][i];
}
}
return c;
}
template<class T>
Matrix<T> Matrix<T>::operator - (Matrix<T> &b) {
Matrix<T> c(n, m);
for (int k = 0; k < n; k++) {
for (int i = 0; i < m; i++) {
c.mas[k][i] = mas[k][i] - b.mas[k][i];
}
}
return c;
}
template<class T>
Matrix<T> Matrix<T>::operator *(Matrix<T> &b) {
Matrix<T> c(n, m);
for (int k = 0; k < n; k++) {
for (int i = 0; i < m; i++)
{
c.mas[k][i] = 0;
for (int j = 0; j < b.n; j++) {
c.mas[k][i] += (mas[k][j] * b.mas[j][i]);
}
}
}
return c;
}
template<class T>
Matrix<T> Matrix<T>::operator *(int &x) {
Matrix<T> c(n, m);
for (int k = 0; k < n; k++) {
for (int i = 0; i < m; i++) {
c.mas[k][i] = mas[k][i] * x;
}
}
return c;
}