С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
#1

Определитель для больших матриц. - C++

13.03.2011, 13:13. Просмотров 627. Ответов 0

Всем форумчанам добрый день.

Жизненно важный вопрос,связан с курсовой.
Прошу помочь в написании кода для нахождения детерминанта квадратной матрицы больших размеров.
Пытаюсь писать код с помощью рекурсии(если это конечно возможно в этом случае.),но не могу выстроить саму архитектуру по коду.
Проблема также с выделением памяти для хранения матрицы нужного размера.
Прошу прощения за корявый код,т.к. опыта мало в программировании ,да и просто спросить и проконсультироваться не у кого,кроме форума.
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
143
144
145
146
147
148
149
150
//#include
//nachojdenie determinanta matrix
#include <cstdlib>
#include <iostream>
 
 
using namespace std;
int* setMatrix(void);
void GetMatrix(int a[][], int b[][], int m, int i, int j);
int Determinant(int a[][], int n);
void show(int sm[][], int n );
 
//using namespace std;
int main()
{
         int det;
     int** bufMatrix;                          // dlya vozvrata iz funczii setMatrix 
     bufMatrix = setMatrix;
         cout<<endl;
     
         show(bufMatrix, )                         //prosmatrivaem to chto vernula setMatrix; vopros s razmernostu dlya show();
     det = Determinant(bufMatrix, );     //vopros s razmernostu dlya Determinant();
 
         cout<<"Determinant = "<< det <<endl;
         
        
                for(j = 0; j<Nj; j++)              //udalyau videlennuu v 'setMatrix' pamyat 
        {
            delete buffer[j];
        }
                delete [] buffer;
 
    system("PAUSE");
    return(0);
}
/////////////////////////////////////////////
int* setMatrix(void) 
{ 
    int i,j,Ni,Nj;
 
    cout<<"vvedite razmernost matrix: "<<endl;
    
     while(!(cin>>Ni))                            //proverka na pravilnost' vvoda
     {
          cin.clear();                            //ochistka vvoda
          while(cin.get() != '\n')                // proverayem,est' li chto-to eshe v vode
          continue;
     
        cout<<"Vvedite zcislo,a ne bukvu: "<<endl;
     }
    Nj = Ni;
   
      int** buffer = new int* [Ni];
      for(j = 0; j<Nj; j++)
      {
        buffer[j] = new int[Nj];
      }
 
    cout<<"vvedite znachenia v matrizcu\n";
    for(i = 0;i<Ni;i++)
    {
        for(j = 0;j<Nj;j++)
        {
            
            while(!(cin>>buffer[i][j]))          //proverka na pravilnost' vvoda
            {
                cin.clear();                         //ochistka vvoda
                while(cin.get() != '\n')          // proverayem,est' li chto-to eshe v vode
                 continue;
                
                cout<<"Vvedite zcislo,a ne bukvu: "<<endl;
            }
            
        }
    }
 
    return (buffer);                             //vozvrashaem zapolnenuu matrizcu
 
}//end setMatrix
 
 
void show(int arr_a[][], int Ni )                    //kak mojno ukazat' razmernost' v main  ne ponimau   
{
    Nj = Ni;
    cout<<"Matrizca: "<<endl;
    for(i = 0;i<Ni;i++)
    {
        for(j = 0;j<Nj;j++)
        {
            dec(cout);
            cout.width(11);
            cout.precision(10);
            cout<<arr_a[i][j]<<"|";
            
        }
        
      cout<<endl;
    }
}
 
void GetMatrix(int a[][], int b[][], int m, int i, int j)
{
    //vicherkivanie iz matrizy stroki i stolbza
    int ki,kj,di,dj;
    di = 0;
    for(ki = 1; ki < m-1; ki++)
    {
        if(ki==i)
            di = 1;
            dj = 0;
            for(kj = 1; kj < m-1; kj++)
            {
                if(kj == j)
                    dj = 1;
                
                b[ki][kj] = a[ki+di][ki+dj];
            }
    }
}
 
int Determinant(int a[][], int n)                     //vicheslenie opredelitelya matrizcy
{
    int i,j,d,k;
    int b[][];
    d = 0;
    k = 1;
    
    if(n<1)
    {
        cout<<"Determinant ne naiden. N = "<<n<<endl;
        return;
    }
    else if(n == 1)
    {
        d = a[1][1];
    }
    else if(n == 2)
    {
        d = a[1][1]*a[2][2] - a[2][1]*a[1][2];
    }
    else
    {
        for(i = 1;i<n;i++)
        {
            GetMatrix(a, b, n, i, 1);
            d = d + (k * a[i][1] * Determinant(b,n-1));
            k = -k;
        }
    }//end else
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2011, 13:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определитель для больших матриц. (C++):

Как вычислить определитель для двух разных матриц - C++
У меня написана функция для нахождения определителей матриц.Есть две матрицы разных порядков.Как найти определители каждой из этих...

Сохранение матриц больших размеров в типизированный файл - C++
Проблема: есть большой двумерный массив (double). Пытаюсь сохранить его в типизированный файл (а затем считать в другой массив). В файл...

Не работает для больших чисел - C++
В положительном целом числе N ≤ 1000000 вычеркнуть цифру так, чтобы число, которое осталось, было наибольшим. Проблема в том, что для...

Возведение в степень для больших чисел - C++
Всем привет ,когда возвожу число в большую степень например 9^31 ,то в переменную не помещается . Хочу сделать pow ,через boost cpp_int...

Написать элегантнее класс для сложения больших чисел - C++
Уважаемые тру программисты. Я написал класс для сложения больших чисел. Но вот смотрю на код и понимаю, что написано коряво. Смысл функции...

Какие существуют короткие константы для достаточно больших чисел? - C++
Периодически возникает потребность в использовании циклов с достаточно большим числом итераций, где важен только порядок, а не конкретное...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2011, 13:13
Привет! Вот еще темы с ответами:

Умножение треугольных матриц«Методы обработки разреженных матриц» - C++
Нужно перемножить треугольные матрицы в обычном виде и в свёрнутом. С обычным проблем нет. Доступ к элементам свёрнутой матрицы...

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

для вещественного массива 2х2 сумму элементов, больших максимального отрицательного. - C++
для вещественного массива 2х2 сумму элементов, больших максимального отрицательного. что только не пробовала с суммой, не считает...

Потоки для перемножение матриц - C++
Здравствуйте, помогите пожалуйста пояснить, как описать функцию умножения матриц под потоки. Я пробовал сделать, но ситуация плачевна....


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.