Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2015, 18:36   #1
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию Жордановы исключения

Здравствуйте, помогите пожалуйста с задачей, которая решает систему линейных алгебраических уравнений. Вводим размер матрицы, элементы матрицы, далее выбираем разрешающий элемент и пересчитываем матрицу по правилам (жордановы исключения). И тут возникло, что при третьем (не обязательно третьем) пересчете выводится неправильный результат. Например,
введем матрицу 3х4:
1 2 1 0
1 1 0 1
1 -1 -2 3
Разрешающий элемент 1 в позиции 2 4
получаем:
1 2 1
1 1 0
-2 -4 -2
Выберем элемент в позиции 1 3:
1 2
1 1
3 3
А должно быть:
1 2
1 1
0 0


И в конце должно вывести ответ (система совместна или несовместна) все x.

Код:
#include <iostream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    //const int N = 4, M = 4;
	int N,M;
	cin>>N>>M;
    //double t[N][M], t1[N][M], aks;
	double **t,**t1;
	t = new double *[N];
	for (int i=0;i<N;i++)
		t[i] = new double [M];
	t1 = new double *[N];
	for (int i=0;i<N;i++)
		t1[i] = new double [M];
	double aks;
    int k, s;
    
    srand(time(NULL));
    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < M; ++j)
        {
            //t[i][j] = static_cast<int>((static_cast<double>(rand()) / RAND_MAX) * 100);
			cin>>t[i][j];
            cout << fixed << setprecision(0) << t[i][j] << "\t\t\t";
        }
        cout << endl;
    }
    cout << endl;
    
    /*cin >> k >> s;
    --k;
    --s;
    
    if (t[k][s] > 0)
    {
        aks = t[k][s];
        
        t1[k][s] = 1. / aks;
        
        for (int i = 0; i < M; ++i)
            if (i != s) t1[k][i] = t[k][i] / aks;
            
        for (int i = 0; i < N; ++i)
            if (i != k) t1[i][s] = -t[i][s] / aks;
        
        for (int i = 0; i < N; ++i)
            for (int j = 0; j < M; ++j)
                if (i != k && j != s)
                    t1[i][j] = (t[i][j] * aks - t[i][s] * -t[k][j]) / aks;
        
        for (int i = 0; i < N; ++i)
        {
            for (int j = 0; j < M; ++j)
                cout << fixed << setprecision(3) << t1[i][j] << "\t\t\t";
            cout << endl;
        }
        cout << endl;
    }*/
	int choice;
do
{
    cin >> k >> s;
    --k;
    --s;
    
    if (t[k][s] > 0)
    {
        aks = t[k][s];
        
        t1[k][s] = 1. / aks;
        
        for (int i = 0; i < M; ++i)
            if (i != s) t1[k][i] = t[k][i] / aks;
            
        for (int i = 0; i < N; ++i)
            if (i != k) t1[i][s] = -t[i][s] / aks;
        
        for (int i = 0; i < N; ++i)
            for (int j = 0; j < M; ++j)
                if (i != k && j != s)
                    t1[i][j] = (t[i][j] * aks -(t[i][s] * t[k][j])) / aks;
        
        for (int i = 0; i < N; ++i)
        {
            for (int j = 0; j < M; ++j)
                cout << fixed << setprecision(3) << t1[i][j] << "\t\t\t";
            cout << endl;
        }
        cout << endl;
    }
 
    cout << "Повторить? (1- да, 0 - нет): ";
	cin >> choice;}
	while (choice != 0);
    system("pause");
    return 0;
}
Изображения
Тип файла: jpg SAM_6178.jpg (57.7 Кб, 123 просмотров)
fkty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исключения c# CROWN C# (си шарп) 3 21.12.2014 18:29
Исключения в Qt iukash Qt и кроссплатформенное программирование С/С++ 6 16.04.2011 18:54
Исключения C++ Impuls1989 Помощь студентам 2 04.03.2011 00:51
Исключения yurik1982 Фриланс 9 16.02.2010 00:34
Исключения Rifler Общие вопросы Delphi 5 12.11.2008 00:29