Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2016, 10:08   #1
Chester751
Пользователь
 
Регистрация: 08.05.2012
Сообщений: 27
По умолчанию Нахождение детерминанта матрицы и её ручной ввод

Здравствуйте!
Который вот уже день бьюсь! Не могу найти ошибку!
Нужно поставить ручной ввод и найти детерминант. Матрица сначала заполнялась рандомно, а потом я решил заполнить ее вручную и....всё! консоль не ожидает ввода пользователя (скрин ошибки прислал).

Детерминант начал искать, но там не справился.. Сложение, умножение и вычитание сделал, а его не смог. что-то в шаблонах запутался. Посмотрите пожалуйста!

Вот код (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;
}
Изображения
Тип файла: jpg 222.jpg (115.6 Кб, 116 просмотров)
Chester751 вне форума Ответить с цитированием
Старый 03.05.2016, 10:37   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Где-то до ввода матрицы происходит ввод данных, которые cin потом воспринимает как матрицу (сам этот момент не совсем понимаю)
http://stackoverflow.com/questions/1...aiting-for-cin написан развёрнутый ответ... кратко:
1) попробую cin.ignore() перед вводом матрицы
2) может понадобится использовать getline(cin, s, '\n') вместо cin >> s (и потом преобразование в число, наприм)
GreenWizard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить сумму элементов матрицы в заштрихованной области. Ввод и вывод матрицы оформить в виде процедур. KrokaKrola Помощь студентам 1 15.04.2015 15:17
Нахождение детерминанта матрицы на С cerum Помощь студентам 7 12.05.2013 12:02
Ввод 2 чисел, нахождение суммы квадратов от 1 и до 2 числа. Pascal. Roman1295 Помощь студентам 2 06.09.2012 20:31
нахождение обратной матрицы и единичной матрицы размерностью N denisbrain Паскаль, Turbo Pascal, PascalABC.NET 0 17.05.2012 11:53
Как реализовать ручной ввод данных? maxim43k Помощь студентам 5 07.09.2011 22:49