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

Решение СЛАУ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Указатели и ссылки http://www.cyberforum.ru/cpp-beginners/thread660448.html
Допустим, что есть функция, в которую мы кидаем массив по указателю и кол-ву элементов. void printArray(int *arr, int elements) Вызываем функцию, соответственно printArray(&arr, 10)
C++ Вспомогательный макрос для вывода строки и значения Привет всем #include <iostream> using namespace std; #define PRINT(STR,VAR)\ cout << STR " = " VAR << endl int main() { int j; http://www.cyberforum.ru/cpp-beginners/thread660447.html
C++ Задача со списком
Всем привет, задали задачу со списком, но работаю с ними впервые и дается довольно не просто, возникло пара проблем: Условие:Введите список, содержащий сведения об экспортируемых товарах. Список имеет следующую структуру: наименование товара - страна, импортирующая товар - объем поставляемой партии в штуках. Программа должна заполнить список, вывести его на экран в виде таблицы, а затем при...
Соединить код и заставить работать программу C++
Добрый вечер! Изучаю C++ пару дней и столкнулся с проблемой, что никак не могу заставить работать программу. На бумаге решить получилось, а на С++ нет. На форуме нашёл код для решения СЛАУ методом Гаусса. И не могу заставить работать. Программа в которой пытаюсь сделать это всё - Microsoft Visual C++ 2008 Express Edition. Вот этот пример который надо решить с 4-мя знаками после запятой и...
C++ Программа с лексемами через указатели http://www.cyberforum.ru/cpp-beginners/thread660420.html
Вопросы в комментариях к коду. Не понятка в 2-х местах кода #include <iostream> #include <cstring> using namespace std; int main() { char str; char token; char *p, *q;
C++ Изменить программу Даны натуральные числа n, a(1), a(2),...,a(n). Определить сумму членов последовательности a(i), которые при делении на 7 дают остаток 1, 2, или 5 Есть исходник, как из него сделать задачу, как в задании?Спасибо! int main() { setlocale(LC_ALL,""); int n,a1,a2; // начальное присвоение yesVozr=1 int yesVozr=1; // признак стр.возр.посл. подробнее

Показать сообщение отдельно
dota
3 / 3 / 0
Регистрация: 20.09.2010
Сообщений: 100
30.09.2012, 00:03     Решение СЛАУ
Доброго времени суток . Пишу программу , которая должна решать системы линейных уравнений методом Гаусса(методом ведущего элемента в столбце) . Код написан , но почему-то возникают проблемы "на ровном месте" , например , неправильно находит ведущий элемент , хотя алгоритм вроде бы правильный . Буду благодарен за любую помощь .
C++ (Qt)
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
#include<iostream.h>
#include<math.h>
 
void swap_rows(double **, int, int, int);
void swap(double *, int, int);
void div_row(double **, int, int, double);
void Gauss_method(double **, double *, double *, int); 
 
int main(){
    int i, j, n;
    cout<<"System : Ax=b (A - n x n, b - n x 1)\n";
    cout<<"Enter n : "; 
    cin>>n;
    double ** A = new double * [n];
    for(i = 0; i < n; ++i) {
        A[i] = new double [n];
    }
    double * b = new double[n];
    cout<<"Enter the matrix A : \n";
    for(i = 0; i < n; ++i) {
        for(j = 0; j < n; ++j) {
            cin>>A[i][j];
        }
    }
    cout<<"Enter the vector b : \n";
    for(i = 0; i < n; ++i) {
        cin>>b[i];
    }
    // Решение системы
    double * x = new double [n];
    Gauss_method(A, b, x, n);
    cout<<"The solution : \n";
    for(i = 0; i < n; ++i) {
        cout<<"x_"<<i+1<<" = "<<x[i]<<"\n";
    }
    cout<<endl;
    // Очистка памяти  
    for(i = 0; i < n; ++i) {
        delete  A[i];
    }
    delete [] A;
    delete [] b;
    delete [] x;
 
    return 0;
}
 
void swap_rows(double ** A, int n, int i, int j) {
    double tmp = 0;
    for(int k = 0; k < n; ++k) {
        tmp = A[i][k];
        A[i][k] = A[j][k];
        A[j][k] = tmp;
    }
}
 
void swap(double * b, int i, int j) {
    double tmp = b[i];
    b[i] = b[j];
    b[j] = tmp;
}
 
void div_row(double ** A, int n, int i, double d) {
    for(int k = 0; k < n; ++k){
        A[i][k] /= d;
    }
}
 
void Gauss_method(double ** A, double * b, double * x, int n) {
    int i, j, k;
    int row;
    double d = 0, tmp = 0;
    for(k = 0; k < n; ++k) {
        for(i = k; i < n; ++i) {
            if(fabs(A[i][k]) > d){
                d = fabs(A[i][k]);
                row = i;
            }
        }
        if(row != k) {
            swap(b, row, k);
            swap_rows(A, n, row, k);
        }
        b[k] /= A[k][k];
        div_row(A, n, k, A[k][k]);
        for(i = k + 1; i < n; ++i){
            tmp = A[i][k];
            b[i] -= tmp * b[k];
            for(j = k; j < n; ++j) {
                A[i][j] -= tmp * A[k][j];
            }
        }
    }
    for(i = n - 1; i >= 0; --i) {
        x[i] = b[i];
        for(j = i+1; j < n; ++j){
            x[i] -= x[j] * A[i][j];
        }
    }
}
Добавлено через 1 час 27 минут
сам нашел ошибку. нужно было перед каждой итерацией внешнего цикла в функции обнулять переменную d .
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru