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

Нахождения детерминанта - C++

Восстановить пароль Регистрация
 
King Of Kings
7 / 7 / 3
Регистрация: 08.02.2013
Сообщений: 42
18.02.2013, 18:33     Нахождения детерминанта #1
Это функция для нахождения детерминанта 3 степени -
C++
1
2
3
4
5
6
7
double thre(double a,double  x,double  c,double a1,double x1,double c1,double a2,double x2,double c2)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    double delt = (a * x1 * c2) + (a1 * x2 * c) + (x * c1 * a2) - (c * x1 * a2) - (x * a1 * c2) - (c1 * x2 * a);
    return delt;
}
Это функция для нахождения детерминанта 3 степени -
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
    #include <iostream>
    #include <cstdlib>
    #include <windows.h>
    #include "Header3.h"
    using namespace std;
    void forxfor()
    {
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        double a, x, c, b, f;
        double a1,x1,c1,b1,f1;
        double a2,x2,c2,b2,f2;
        double a3,x3,c3,b3,f3;
        cout << "Введіть коефіцієнт x y z b і це, що після знака дорівнює : " <<endl;
        cin >> a >> x >> c >> b >> f; 
        cout << "Введіть коефіцієнт x1 y1 z1 b1 і це, що після знака дорівнює : " <<endl;
        cin >> a1 >> x1 >> c1 >> b1 >> f1;
        cout << "Введіть коефіцієнт x2 y2 z2 b2 і це, що після знака дорівнює : " <<endl;
        cin >> a2 >> x2 >> c2 >> b2 >> f2;
        cout << "Введіть коефіцієнт x3 y3 z3 b3 і це, що після знака дорівнює : " <<endl;
        cin >> a3 >> x3 >> c3 >> b3 >> f3;
        double delta = a * thre(x1,c1,b1,x2,c2,b2,x3,c3,b3) - a1 * thre(x, c, b,x2,c2,b2,x3,c3,b3) + a2 * thre(x, c, b,x1,c1,b1,x3,c3,b3) - a3 * thre(x, c, b,x1,c1,b1,x2,c2,b2);
        double delta1 = f * thre(x1,c1,b1,x2,c2,b2,x3,c3,b3) - f1 * thre(x, c, b,x2,c2,b2,x3,c3,b3) + f2 * thre(x, c, b,x1,c1,b1,x3,c3,b3) - f3 * thre(x, c, b,x1,c1,b1,x2,c2,b2);
        double rozv_x = delta1 / delta;
        double delta2 = a * thre(f1,c1,b1,f2,c2,b2,f3,c3,b3) - a1 * thre(f, c, b,f2,c2,b2,f3,c3,b3) + a2 * thre(f, c, b,f1,c1,b1,f3,c3,b3) - a3 * thre(f, c, b,f1,c1,b1,f2,c2,b2);
        double rozv_y = delta2 / delta;
        double delta3 = a * thre(x1,f1,b1,x2,f2,b2,x3,f3,b3) - a1 * thre(x, f, b,x2,f2,b2,x3,f3,b3) + a2 * thre(x, f, b,x1,f1,b1,x3,f3,b3) - a3 * thre(x, f, b,x1,f1,b1,x2,f2,b2);
        double rozv_z = delta3 / delta;
        double delta4 = a * thre(x1,c1,f1,x2,c2,f2,x3,c3,f3) - a1 * thre(x, c, f,x2,c2,f2,x3,c3,f3) + a2 * thre(x, c, f,x1,c1,f1,x3,c3,f3) - a3 * thre(x, c, f,x1,c1,f1,x2,c2,f2);
        double rozv_b = delta4 / delta;
        if ( delta == 0 )
        {
            cout << "Визначник = 0, помилка при коефіцієнтах"<<endl;
        }
        else
        {
        cout<< "x = " << delta1 << " / " << delta <<" = "<< rozv_x <<endl;
        cout << "y = " << delta2 << " / " << delta  <<" = "<<rozv_y <<endl;
        cout << "z = " << delta3 << " / " << delta  <<" = "<<rozv_z <<endl;
        cout << "b = " << delta4 << " / " << delta  <<" = "<<rozv_b <<endl;
        }
    }
Помогите максимально уменьшить этот код.
и на всякий случай сам код программ -
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
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <windows.h>
#include "det2.h"
#include "header1.h"
#include "header2.h"
#pragma once;
#include <string>
using namespace std;
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int otvet;
    cout << "Введіть порядок матриці 2 | 3 | 4 : ";
    cin >> otvet;
    if (otvet == 2)
    {
        twoxtwo();
    }
    if (otvet == 3)
    {
        threxthre();
    }
    if (otvet == 4)
    {
        forxfor();
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2013, 18:33     Нахождения детерминанта
Посмотрите здесь:

Нахождение детерминанта (определителя) матрицы C++
C++ А* Алгоритм нахождения пути
C++ нахождения производной
паралелльное определение детерминанта C++
C++ Нахождение детерминанта матрицы. Матрица читается из файла.
C++ Есть ли нерекурсивный алгоритм вычисления детерминанта квадратной матрицы nxn?
Функция нахождения интеграла C++
C++ Алгоритм нахождения корней

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Поночка
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 22
18.02.2013, 19:41     Нахождения детерминанта #2
ух) для начала целесобразней матрицу хранить в виде массива
а детерминант для матрицы произвольного размера можно высчитать используя рекурсию методом разложения по строке и столбцу.
и там кода будет немного и твоя функция будет универсальна
Yandex
Объявления
18.02.2013, 19:41     Нахождения детерминанта
Ответ Создать тему
Опции темы

Текущее время: 09:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru