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

Решения СЛАУ методом Гаусса по шагу - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ почему не работает функция? http://www.cyberforum.ru/cpp-beginners/thread1088685.html
#include <iostream> #include <conio.h> void function (int k)// { for(int i=0;i<k;i++) std::cout<<"*"; } int main()
C++ DirectSound. Как правильно, и какую библиотеку следует добавить? Ребята, нужна ваша помощь. MVS 2010 выдаёт следующее 1>DXUTsound.obj : error LNK2019: unresolved external symbol __imp__mmioClose@8 referenced in function "public: long __thiscall CWaveFile::Open(char *,struct tWAVEFORMATEX *,unsigned long)" (?Open@CWaveFile@@QAEJPADPAUtWAVEFORMATEX@@K@Z) 1>DXUTsound.obj : error LNK2019: unresolved external symbol __imp__mmioOpenA@12 referenced in function... http://www.cyberforum.ru/cpp-beginners/thread1088683.html
C++ Составить программу для вычисления расстояния между точками пересечения окружностей
Две окружности на плоскости заданы координатами своих центров и радиусами. Составить программу для вычисления расстояния между точками пересечения окружностей. Если окружности соприкасаются в одной точке или не пересекаются, то выдать сообщения об этом.
В следующем слове после точки, первую строчную букву заменить на прописную C++
В строке, содержащей последовательность слов, найти конец предложения, обозначенный символом "точка". В следующем слове первую строчную букву заменить на прописную
C++ Растолкуйте код http://www.cyberforum.ru/cpp-beginners/thread1088660.html
Помогите с кодом cout << (i == 0 || j == 0 || i == N + 1 || j == M + 1 ? '#' : a) << (j <= M ? "" : "\n"); что делает cout << ( ? : ); я впервые с таким столкнулся.
C++ Содержимое массива Уважаемые подскажите пожалуйста, можно ли как-то посмотреть содержимое массива в MVS 2012, в режиме отладки, содержимое переменных можно посмотреть а массива никак не могу найти как ? подробнее

Показать сообщение отдельно
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
03.02.2014, 22:59     Решения СЛАУ методом Гаусса по шагу
Добрый день! Очередной раз прошу советов!

Имеется СЛАУ, которое требуется решить методом Гаусса на с++.

Соответственно, на тетрадке решить не проблема.
В с++ с тем что я только осваиваю азы, не совсем понимаю как реализовать:
Допустим есть такой код (взятый с этого же форума):

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
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
 
void main ()
{
    setlocale(0,"");
    const int kol_str = 5;
    const int kol_tab = 6;
 
    double mat[kol_str][kol_tab] = {4,1.2,0,2.3,-1,7,
                                    1.6,6,3,2.4,4,12,
                                    //0,0,0,0,0,
                                    3,3.6,1,1.6,1,3,
                                    4.5,2,4,4.2,1.75,9,
                                    3,1,2.3,0.5,8,-8};
    double rezult[kol_str]; 
    for (int i=0; i<kol_str; i++)
        rezult[i] = 0;
    double koef[10];
    double max_el;
 
    cout<<setw(42)<<"ИСХОДНАЯ МАТРИЦА"<<endl<<endl;
    //выывод на экран треугольной матрицы
    for (int i=0; i<kol_str; i++)
    {
        for (int j=0; j<kol_tab; j++)
            cout<<setw(10)<<mat[i][j];
        cout<<endl<<endl;
    }
 
    for (int i=1; i<kol_str+1; i++)
    {   
        int str = i-1;
        max_el = mat[i-1][i-1];
        //поиск максимального элемента в столбце
        for (int ch=i-1; ch<kol_str; ch++)
        {
            double buf = mat[ch][i-1];
            if (max_el<0) max_el*=(-1);
            if (buf<0) buf*=(-1);
            if (max_el<buf)
            {
                max_el = buf;
                //запомнить строку с максимальным элементом
                str = ch;
            }
        }
 
        //в случае, если максимальный элемент нулевой - выход
        if (max_el == 0)
        {
            cout<<"СЛУ не имеет решения";
            getch();
            return;
        }
    
        //замена строк местами
        //если максимальный элемент не находится в текущей строке
        if (str != (i-1))
        {
            for (int ch=0; ch<kol_tab; ch++)
            {
                double t = mat[i-1][ch];
                mat[i-1][ch] = mat[str][ch];
                mat[str][ch] = t;
            }
        }
 
        //деление строки на наибольший элемент
        for (int ch = 0; ch<kol_tab; ch++)
            mat[i-1][ch]/=max_el;
 
        //устранение нулей с главной диагонали
        if (mat[i-1][i-1]<0)
            for (int ch=0; ch<kol_tab; ch++)
            {
                if (mat[i-1][ch]!=0)
                    mat[i-1][ch]*=(-1);
            }
    
        //вычисление коэффициентов
        for (int z=0; z<kol_str-i; z++)
        {
            koef[z] = mat[i+z][i-1]/mat[i-1][i-1];
            //cout<<koef[z]<<endl;
        }
 
        //вычитание строк, умноженных на коэффициенты
        for (int k=i; k<kol_str; k++)
                for (int j=i-1; j<kol_tab; j++)
                    mat[k][j] -= koef[k-i]*mat[i-1][j];
        //cout<<endl;
    }
    
    cout<<endl<<setw(45)<<"РЕЗУЛЬТАТИРУЮЩАЯ МАТРИЦА"<<endl<<endl;
    //выывод на экран треугольной матрицы
    for (int i=0; i<kol_str; i++)
    {
        for (int j=0; j<kol_tab; j++)
            cout<<setw(10)<<mat[i][j];
        cout<<endl<<endl;
    }
 
    //вычисление корней СЛУ обратным проходом
    for (int i=kol_str-1; i>=0; i--)
    {
        
        if (kol_str-i-1 == 0 )
                rezult[0] = (mat[kol_str-1][kol_tab-1])/mat[kol_str-1][kol_tab-2];
        else 
        {
        for (int j=kol_tab-1; j>i; j-- )
            mat[i][kol_tab-1] = mat[i][kol_tab-1] - (mat[i][j-1]*rezult[kol_tab-j-1]);
                
        rezult[kol_str-i-1] = mat[i][kol_tab-1]/mat[i][i];
        }
            
    }
 
    //вывод на экран корней СЛУ
    cout<<endl<<setw(5)<<"КОРНИ СЛУ:"<<endl<<endl;
    for (int i=0; i<kol_str; i++)
        cout<<"x"<<kol_str-i<<" = "<<rezult[i]<<endl;
    getch();
}
Вроде бы все понятно, но в тоже время не совсем.

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

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