Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 36

Нахождение детерминанта матрицы и её ручной ввод

03.05.2016, 10:14. Показов 2484. Ответов 1

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

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

Вот код (main):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#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:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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;
}
Миниатюры
Нахождение детерминанта матрицы и её ручной ввод  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2016, 10:14
Ответы с готовыми решениями:

Нахождение детерминанта матрицы
Помогите написать прораму нахождения детерминанта матрицы

Функция: нахождение детерминанта матрицы
Возможно ли сделать функцию для нахождения определителя матрицы nxn(высоких n). Есть ли формула для нахождения определителя любого порядка ?

Нахождение детерминанта (определителя) матрицы
У меня вот код есть для нахождения детерминанта (определителя) матрицы 5х5 :) а как сделать, чтобы я мог сам ввести данные матрицы? ...

1
 Аватар для Vort_
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
07.05.2016, 19:15
Могу подсказать насчёт первой ошибки:

В функции manualInput от пользователя ожидается ввод y или n.
Но при этом идёт чтение в переменную bool.

Если исправить эту ошибку, то консоль перестанет глючить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2016, 19:15
Помогаю со студенческими работами здесь

Нахождение определителя (детерминанта) матрицы
Написать программу нахождения определителя(детерминанта) двумерного массива.

Нахождение детерминанта матрицы. Матрица читается из файла.
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;sys/file.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; using...

Нахождение обратной матрицы и детерминанта, методы нахождения, примеры на Python
Искал код нахождение обратной матрицы на Python, так и ни где не нашел, в итоге написал сам, алгоритм подсмотрел в JavaScript, думаю кто...

Не работает ручной ввод матрицы
Кароч выводит матрицу нулями именно при ручном вводе. Прикол в том что при рандомном заполнении и заполнении матрицы через константу все...

Как переделать рандомное заполнение матрицы на ручной ввод?
#include &quot;stdafx.h&quot; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru