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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.88
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
#1

решение матрицы методом крамера - C++

26.10.2012, 06:17. Просмотров 3973. Ответов 6
Метки нет (Все метки)

доброго времени суток. Задали написать программу для решения матрицы методом крамера. Нашел уже готовый код тут на форуме но у него нету комментов, не могу понять саму программу что и когда где выполняется так частично только представляю ход ее выполнения. В программу уже подставил свои значения матрицы ответы совпали с тем что у меня получились когда в ручную ее решал. ну там небольшие расхождения, и еще проблема мне надо чтоб корни найденные были с точностью 10в -4 степени подскажите как исправить код чтоб так было? ну и комменты можите поставить кто под поймет где что и как выполняется в коде.
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
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
const int N = 3;
 
double det(int A[N][N])
{
    return A[0][0] * A[1][1] * A[2][2] +
           A[0][1] * A[1][2] * A[2][0] +
           A[1][0] * A[2][1] * A[0][2] -
           A[2][0] * A[1][1] * A[0][2] -
           A[1][0] * A[0][1] * A[2][2] -
           A[2][1] * A[1][2] * A[0][0];
}
 
int main()
{
    int A[N][N] =
    {
        160, 12, 60,
        40, 25, -330,
        30, 50, -110
    };
 
    int B[N] =
    {
        81,
        60,
        90
    };
 
    double X[N];
    int T[N][N];
 
    double detA;
    int n;
    int i, j;
 
    detA = det(A);
 
    for (n = 0; n < N; n++)
    {
        for (i = 0; i < N; i++)   //первая матрица
            for (j = 0; j < N; j++)
                T[i][j] = A[i][j];
 
        for (j = 0; j < N; j++)
            T[j][n] = B[j];
 
        X[n] = det(T) / detA;
    }
 
    for (i = 0; i < N; i++)
        cout << "X[" << i << "] = " << X[i] << "\t";
 
    cout << endl;
    system("pause");
    return 0;
}
Добавлено через 23 часа 26 минут
хелп ми плиз...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2012, 06:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос решение матрицы методом крамера (C++):

Утечка памяти (решение СЛАУ методом Крамера, матрицы, malloc) - C++
Раньше программировал на C#/Java (а как следствие и расхлябанность по отношению к памяти), сейчас пытаюсь осилить C++. Более-менее понял...

Решение СЛАУ методом Крамера - C++
Доброго времени суток! Пишу курсовую по методу Крамера. Вроде ничего сложного, но программированием я занимаюсь не часто, скачал с нета...

Написать решение систем линейных уравнений методом Крамера - C++
Требуеться написать решение систем линейных уравнений методом крамера. Входные данные беруться с файла или с клавиатуры(выбирает...

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

Решение СЛАУ методом обратной матрицы - C++
Может кто-нибудь кинуть код програмы &quot;Решение СЛАУ методом обратной матрицы&quot;? Алгоритм должен быть, примерно таковой:...

СЛАУ методом Крамера - C++
Здравствуйте! Пишу программу для решения СЛАУ методом Крамера (максимум 4 системы за раз). #include&lt;iostream&gt; #include&lt;conio.h&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
27.10.2012, 06:33  [ТС] #2
комментарии не нужно, посдкажите как сделать чтоб корни выдавал с точностью 10 в -4 степени, тоесть 4 цифры после целого числа
remarkes
302 / 225 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
27.10.2012, 10:41 #3
lexflax, тебе надо:
1. в функции
C++
1
double det(int A[N][N])
и в других местах сделать массивы с матрицами в тип double
2. в конце вместо
C++
1
cout << "X[" << i << "] = " << X[i] << "\t";
C++
1
printf("X[%d] = %.4f\t", i, X[i]);
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
27.10.2012, 14:22  [ТС] #4
все проще уже разобрался просто последнюю строчку надо было
C++
1
cout << "X[" << i+1 << "] = " <<fixed<<setprecision(4)<< X[i] << "\t";
remarkes
302 / 225 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
28.10.2012, 10:05 #5
lexflax, когда у тебя элементы матрицы типа int у тебя точность страдает при приведении в double, да и с точки зрения кода - это некрасиво (неправильно): на входе целочисленные параметры (int), а на выходе double.
Т.е. в таком виде код у тебя выдает неправильные значения.
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
28.10.2012, 10:34  [ТС] #6
ну почему же? на входе да целые числа у меня, поэтому и стоит тип int, зачем я буду ставить дробный тип если они целые, а на выходе врезультате математических операций получаются дробные числа, поэтому и double
remarkes
302 / 225 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
28.10.2012, 20:54 #7
lexflax, да... ты прав, в функции det у тебя дроби нет... тогда по идее и нет ей смысла возвращать значение типа double.
вообщем, я имел ввиду, что криво с точки зрения архитектуры: у тебя в функции целые числа вычисляются, результат тоже целый, а возвращает функция почему-то double. Логика как бы ясна - для приведения типов. Но так не делается.
"Как бы все сходится", но это неправильно с точки зрения ясности кода.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 20:54
Привет! Вот еще темы с ответами:

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

Решить систему уравнений методом Крамера - C++
Ненавижу математику!!! Нужно написать программу на чистом C для решения системы уравнений методом Крамера. Помню там нужно подставлять...

Вычисление корней системы уравнений методом Крамера - C++
Составить программу вычисления корней системы уравнений с двумя неизвестными методом Крамера. \left\{\begin{matrix} &amp; &amp; a1x+b1y=c1...

задача методом крамера (как проверить вход данные с++) - C++
Помогите пожалуста уже пробывал сделать ну чтото ничего не получаеться Т_Т #include &quot;stdafx.h&quot; #include &lt;iostream&gt; // подключения...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.10.2012, 20:54
Ответ Создать тему
Опции темы

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