Форум программистов, компьютерный форум CyberForum.ru

Код обратной матрицы на С++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проблемы работы с графикой (graphics.h) после апгрейда компа.. :( http://www.cyberforum.ru/cpp-beginners/thread14755.html
Короче курсовая на носу. Писал заставку на тему баскетбол, ну типа там нарисовал площадку, мячик, и мячик прыгает с корзины в корзину... Все было прикольтно, пока не сделал абгрейд... Работаю в Turbo C++ ver 1.01. поменял комп короче полностю, постваил новую ось, поставил Си, и блин она работает, а как только касаеться работы с графикой, тупо закрываеться.. ну если в Си запустить через Contrl+F9...
C++ Помогите решить две простые задачи(перевод из десятичной с. с в двоичную и полное решение квадратного уравнения) 5.6Перевод из 10-й системы счисления в 2-ю 5.7Решение квадратного уравнения полное Добавлено через 2 минуты 14 секунд /************************************** Перевод из десятичной системы счисления в двоичную Автор: Muslimov Ildar Fanisovich Программа переводящая из десятичной системы в двоичную http://www.cyberforum.ru/cpp-beginners/thread14754.html
C++ Определить, какое из чисел встречается в массиве чаще всего
8. Элементы массива расположить в обратном порядке, не используя дополнительный массив. Написать программу, в которой исходный массив заполнить случайным образом элементами в пределах от 101 до 200. Вывести на экран элементы исходного и полученного массивов. 9. Написать фрагмент программы для определения, какое из чисел встречается в массиве чаще всего. 10. Написать рекурсивную функцию поиска...
C++ Динамический массив в С++: как поменять длину массива по ходу выполнения программы?
Есть такая проблема: есть файл, в котором построчно записаны числа float (1 число - 1 строка). Количество чисел неизвестно. Как сделать так, т.е. какие операции надо объявить, чтоб программа читала всё следующее число и заносила его в массив, как то: FILE *op;//файл с неизвестным количеством чисел float float d; int i=0; ... while (!feof(op)) {
C++ Проблема: DevC++ отказывается компилировать (виста)! http://www.cyberforum.ru/cpp-beginners/thread14737.html
Помогите, плиз, с такой проблемой: DevC++ 4.9.9.2, скачал, установил, вроде всё работает, НО отказывается компилировать в принципе. Нажимаю кнопку - никакой реакции в принципе. Путь состоит только из латинских букв. Стоит виста (с этой системой раньше не работал). Поиск заюзался - ничего не помогает.
C++ Как передать массив через указатель? Народ, такая проблема: при передаче в функцию массива через указатель, вся информация теряется и замещается бредом каким то, вот выдержка из программы: float sum(float *a, int *i); ... int main(){ ... m = sum (&a, &i); // пробовал также &a ... } подробнее

Показать сообщение отдельно
vitaska
84 / 84 / 2
Регистрация: 04.02.2010
Сообщений: 162
15.03.2011, 11:02     Код обратной матрицы на С++
Если кому пригодится мой вариант
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
#include <iostream>
#include <ctime>
#include <cmath>
 
using namespace std;
 
template <typename T> void FreeMem(T **matr, int n);
template <typename T> void PrintMtx(T **matr, int n);
template <typename T> void SetMtx(T **matr, int n);
template <typename T> void TransponMtx(T **matr, T **tMatr, int n);
void Get_matr(int **matr, int n, int **temp_matr, int indRow, int indCol);
int Det(int **matr, int n);
 
void main()
{
    srand((unsigned)time(NULL));
    setlocale(0, "");
    int n, det;
    cout << "Введите размер матрицы: ";
    cin >> n;
    int **matr = new int * [n];
    double **obr_matr = new double * [n];
    double **tobr_matr = new double * [n];
    for(int i = 0; i < n; i++){
        matr[i] = new int[n];
        obr_matr[i] = new double[n];
        tobr_matr[i] = new double[n];
    }
    SetMtx(matr, n);
    PrintMtx(matr, n);
    det = Det(matr, n);
    cout << "Определитель матрицы = " << det << endl;
    if(det){
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                int m = n - 1;
                int **temp_matr = new int * [m];
                for(int k = 0; k < m; k++)
                    temp_matr[k] = new int[m];
                Get_matr(matr, n, temp_matr, i, j);
                obr_matr[i][j] = pow(-1.0, i + j + 2) * Det(temp_matr, m) / det;
                FreeMem(temp_matr, m);
            }
        }   
    }
    else
        cout << "Т.к. определитель матрицы = 0,\nто матрица вырожденная и обратной не имеет!!!" << endl;
    //Транспонирование матрицы
    TransponMtx(obr_matr, tobr_matr, n);
    //Печать обратной матрицы после транспонирования
    PrintMtx(tobr_matr, n);
    FreeMem(tobr_matr, n);
    FreeMem(matr, n);
    FreeMem(obr_matr, n);
}
//Функция транспонирования матрицы
template <typename T> void TransponMtx(T **matr, T **tMatr, int n){//
    for (int i = 0; i < n; i++) 
        for (int j = 0; j < n; j++)
            tMatr[j][i] = matr[i][j];
}
//Функция освобождения памяти
template <typename T> void FreeMem(T **matr, int n)
{
    for(int i = 0; i < n; i++)
        delete [] matr[i];
    delete [] matr;
}
 
//функция заполнения матрицы
template <typename T> void SetMtx(T **matr, int n)
{
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            matr[i][j] = rand()%9 + 1; 
}
 
//функция печати матрицы
template <typename T> void PrintMtx(T **matr, int n)
{
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++)
            cout << matr[i][j] << " ";
        cout << endl; 
    }
}
//функция вычеркивания строки и столбца
void Get_matr(int **matr, int n, int **temp_matr, int indRow, int indCol)   
{
    int ki = 0; 
    for (int i = 0; i < n; i++){
        if(i != indRow){
            for (int j = 0, kj = 0; j < n; j++){
                if (j != indCol){
                    temp_matr[ki][kj] = matr[i][j];
                    kj++;
                }
            }
            ki++;       
        }
    }
}
 
//==============================================================================================================
//                              вычисление определителя
//==============================================================================================================
//функция вычисления определителя матрицы
int Det(int **matr, int n)  
{
    int temp = 0;   //временная переменная для хранения определителя
    int k = 1;      //степень
    if(n < 1){
        cout<<"Не верный размер матрицы!!!" << endl;
        return 0;
    }
    else if (n == 1)
        temp = matr[0][0];
    else if (n == 2)
        temp = matr[0][0] * matr[1][1] - matr[1][0] * matr[0][1];
    else{
        for(int i = 0; i < n; i++){
            int m = n - 1; 
            int **temp_matr = new int * [m];
            for(int j = 0; j < m; j++)
                temp_matr[j] = new int [m];
            Get_matr(matr, n, temp_matr, 0, i);
            temp = temp + k * matr[0][i] * Det(temp_matr, m);
            k = -k;
            FreeMem(temp_matr, m);
        }
    }
    return temp;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru