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

Двумерные массивы (СЛАУ). Привести систему к треугольному виду - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ иллюстрация полиморфизма http://www.cyberforum.ru/cpp-beginners/thread749906.html
Доброго времени суток!написал примитив для иллюстрации полиморфизма,ориентировался по видеокурсам с ТыТрубы #include<iostream.h> #include<conio.h> class Shape { public : virtual float calc_area()=0; }; class Rectangle : public Shape
C++ Функция для записи в буфер из потока существует в с++ такая функция для загрузки потока данных в строку fgets(buf,10000, f); но недостаток этой функции в том, что при наличии в потоке символа конца строки, он прекращает запись из потока посему подскажите пожалуйста, существует ли функция которая будет записывать в строку из потока до тех пор пока не наступит конец файла, а не до попадания на символ конца строки. http://www.cyberforum.ru/cpp-beginners/thread749889.html
Представление кода в виде функции C++
Столкнулся с проблемой, сделал код в виде функций, все запускается и вроде бы работает, но как введу значения жму Enter и программа просто виснет. В чем может быть проблема? Компилятор все норм компилит. Исходный: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <tchar.h> #include <iostream.h> #include <math.h>
Длинная арифметика (найти остаток при делении на 7) C++
Уважаемые программисты! Задача на длинную арифметику (никогда такую не решал, потому хочу разобраться. Математически понимаю, а как написать код не знаю). Сама задача такова: нужно найти остаток при делении очень длинного числа (до 50 знаков) на 7. Приведите, пожалуйста, код.
C++ Двумерные массивы. Использование динамически распределяемой памяти http://www.cyberforum.ru/cpp-beginners/thread749828.html
В с++ Создать квадратную матрицу целых чисел и выполнить ее обработку согласно заданию, указанному ниже. Выполнить задание с такими дополнительными условиями: - размер матрицы вводится с клавиатуры; - память под двумерный массив выделяется динамически, на этапе выполнения программы; - ввод, вывод и обработку матрицы реализовать в виде функций, которым матрица передается в качестве...
C++ Сложение двух чисел в Двоично-десятичной системе счисления Доброго времени суток, может есть ли у кого уже готовый код? или же можете носом ткнуть на ссылку, bcd - двоично десятичная система, весь инет перерыл подобных сорсов не нашел Суть программы: Сложение двух чисел в двоично-десятичной системе счислений подробнее

Показать сообщение отдельно
silverserfer
-123 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 12
31.12.2012, 15:35  [ТС]     Двумерные массивы (СЛАУ). Привести систему к треугольному виду
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Для всех дочитавших эту тему,(но не для автора данной темы!) привожу код на С++ для метода Гаусса из поста5, котрый после отработки функции PryamoiHod(n, a, b); привод систему к треугольному виду (как видим изменений от кода поста 5 почти нет, прото было переписано с Си на С++, хотя кому то не под силу их даже это было осознать)
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
#include <cmath>
#include <iostream>
using namespace std;
 
void ShowVector(int n, double * vec);
void PryamoiHod(int n, double **a, double *b);
void ObratniHod(int n, double **a, double *b, double *x);
 
int main()
{
    int i,j,n;
    double **a, *b, *x;
    char chInp = 0;
    do
    {
        cout<<"Enter NUM of equations: ";cin>>n;
        //Выделяем память под матрицу А и векторы В и Х
        a = new double *[n];
        b = new double [n];
        x = new double [n];
        for(i = 0; i < n; i++)
        {
            a[i] = new double[n];
            //Ввод a
            for(j = 0; j < n; j++)
            {
                cout<<"a["<<i + 1<<"]["<<j + 1<<"] = ";
                cin>>a[i][j];cin.get();
            }
        }
        //Ввод b
        for(i = 0; i < n; i++)
        {
            cout<<"b["<<i + 1<<"] = ";
            cin>>b[i];cin.get();
        }
        
        cout<<"\tSee input\r\n";
        cout<<"Matrix A:\r\n";
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        cout<<"Vector B:\r\n";
        ShowVector(n, b);
        
        cout<<"\tSolving on Gauss method\r\n";
        PryamoiHod(n, a, b);
        cout<<"Forvard Gauss course\r\n";//Прямой ход
        cout<<"Matrix A:\r\n";
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        cout<<"Vector B:\r\n";
        ShowVector(n, b);
 
        ObratniHod(n, a, b, x);
        cout<<"Back Gauss course\r\n";//Обратный ход
        cout<<"Matrix A:\r\n";
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        cout<<"Vector B:\r\n";
        ShowVector(n, b);
 
        cout<<"Results :\r\n";
        ShowVector(n, x);
 
        cout<<"Enter Y for new input\r\n";
        cin>>chInp;cin.get();
        //Чистим память
        for(i = 0; i < n; i++)
            delete [] a[i];
        delete [] a;
        delete [] b;
        delete [] x;
        
    }
    while(toupper(chInp) == 'Y');
    return 0;
}
 
void ShowVector(int n, double * vec)
{
    for(int i = 0; i < n; i++)
        cout<<vec[i]<<"\t";
    printf("\r\n");
}
 
void PryamoiHod(int n, double **a, double *b)
{
        double v;
        for(int k = 0,i,j,im; k < n - 1; k++)
        {
                im = k;
                for(i = k + 1; i < n; i++)
                {
                        if(fabs(a[im][k]) < fabs(a[i][k]))
                        {
                                im = i;
                        }
                }
                if(im != k)
                {
                        for(j = 0; j < n; j++)
                        {
                                v                = a[im][j];
                                a[im][j] = a[k][j];
                                a[k][j]  = v;
                        }
                        v     = b[im];
                        b[im] = b[k];
                        b[k]  = v;
                }
                for(i = k + 1; i < n; i++)
                {
                        v               = 1.0*a[i][k]/a[k][k];
                        a[i][k] = 0;
                        b[i]    = b[i] - v*b[k];
                        if(v != 0)
                        for(j = k + 1; j < n; j++)
                        {
                                a[i][j] = a[i][j] - v*a[k][j];
                        }
                }
        }
}
 
void ObratniHod(int n, double **a, double *b, double *x)
{
        double s = 0;
        x[n - 1] = 1.0*b[n - 1]/a[n - 1][n - 1];
        for(int i = n - 2, j; 0 <= i; i--)
        {
                s = 0;
                for(j = i + 1; j < n; j++)
                {
                        s = s+a[i][j]*x[j];
                }
                x[i] = 1.0*(b[i] - s)/a[i][i];
        }
}
Спасибо что вы его перекодили на с++, я вам вот за это могу сказать большое спасибо. Но все же у меня есть некоторые вопросы , да я не знаю алгоритм как написать этот , но желание научиться все же у меня есть. Вы не могли бы мне сами действия алгоритма где он приводит матрицу к треугольному виду откомментить, я чуть не могу просто понять что для чего там служит im например и мне кажется там еще другие действия есть которые для моей задачи не нужны видимо , это когда с матрицой b какие то действия идут. Если вот вы мне это объясните я вам вот честное слово , буду благодарен.
 
Текущее время: 11:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru