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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти среднее арифметическое значений функций http://www.cyberforum.ru/cpp-beginners/thread256348.html
Найти среднее арифметическое значений функций f(x) в точках a,b, (a+b)/2,,используя обращение к функции:E^2x+sin^2x-tgx; а=0,8; b=1.8
C++ Для каждой строки найти сумму элементов нечетных столбцов Очень нужны программы на TurboC 3.0 Составить программу обработки двухмерного массива А (M, N) значения М, N выбрать самостоятельно. 1. Данная матрица Aij (i = 1,..., M; j = 1,..., N) и вектор B (1,..., 30). Заменить отрицательное элементы в нечетных строках максимальным элементом вектора B Составить программу обработки двухмерного массива. 2. Дан массив A (M, N) M = 3, N = 3. Найти... http://www.cyberforum.ru/cpp-beginners/thread256344.html
C++ Проверить число на четность
Определить, я вляется ли значение цилочисленный пременный x чётными, если является то вывести на печать значение x , в противном случае напечатать нет.
C++ СТАНДАРТНЫЕ Ф-И ДЛЯ РАБОТЫ СО СТОКАМИ
Доброго времени суток! Сижу на форуме уже пол дня. Пытаюсь решить 3 задачи. Помогите пожалуйста. Библиотеки которые можно использовать #include <iostream> #include <string.h> #include <Windows.h> #include <cmath>
C++ Работа с двоичными файлами http://www.cyberforum.ru/cpp-beginners/thread256334.html
Создать файл, состоящий из n вещественных чисел. Вывести на экран все числа данного файла с четными порядковыми номерами, меньшие заданного числа.
C++ Найти сумму отрицательных элементов массива Привет, очень нужна ваша помощь. Нужно программу на TurboC 3.0 Дан массив чисел а1,..., А20 и число b. Если а1b> a20 то найти сумму отрицательных элементов массива Если а1b <= a20 то найти наибольший элемент среди отрицательных две программы объединить в одну подробнее

Показать сообщение отдельно
USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93

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

13.03.2011, 13:13. Просмотров 607. Ответов 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
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru