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

Код после занесения в функцию перестаёт работать - C++

Восстановить пароль Регистрация
 
Октавиан_Август
2 / 2 / 0
Регистрация: 14.08.2010
Сообщений: 41
23.03.2014, 16:49     Код после занесения в функцию перестаёт работать #1
Есть функция (для LU-разложения), взял с этого же форума, только там не было векторов:
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
void myLU(vector<vector <double>> a, int n, vector<vector <double>>L, vector<vector <double>>U) {
    //int i, j, k;
    //инициализация матриц l и u
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <n ; j++)
        {
            if (i == j) L[i][j] = 1.0;
            else L[i][j] = 0.0;
            U[i][j] = 0.0;
        }
    }
    //непосредственно разложение
    for (int k = 0; k<n; k++)
    {
        U[k][k] = a[k][k];
        for (int i = k + 1; i<n; i++)
        {
            L[i][k] = a[i][k] / U[k][k];
            U[k][i] = a[k][i];
        }
        for (int i = k + 1; i<n; i++)
        {
            for (int j = k + 1; j<n; j++) a[i][j] = a[i][j] - L[i][k] * U[k][j];
        }
    }
    
}
Также есть код
C++
1
2
3
vector<vector <double>> l;
vector<vector <double>> u;
vector<vector <double>> A;
для объявления переменных , который висит вне всего этого.
Суть проблемы: если в main написать просто текст функции (обращаясь к нужным массивам), то всё работает нормально. Если же написать код LU(A,n,l,u), то после его выполнения содержимое векторов l и u не изменяется (остаются нолики, как при инициализации). Ошибок компиляции нет, дебаг выявил, что с переменными L и U в функции всё также хорошо (их элементы принимают нужные значения), но соответствующие им l и u при этом не изменяются. Вопрос: что надо делать? Надо обязательно использовать что-то из контейнеров STL, так что вариант "как в С" не прокатит.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2014, 16:49     Код после занесения в функцию перестаёт работать
Посмотрите здесь:

C++ Код, работающий в VS2003, перестаёт работать в VS2008
не хочет работать код(((( C++
C++ Немного изменил код программы и она перестала работать. Не пойму почему.
C++ Почему программа продолжает работать после удаления конструктора?
C++ Как заставить код работать на x32 и x64?
Почему не хочет работать код? C++
CRC32 C++. Не могу заставить работать готовый код C++
C++ После вызова рекурсивной функции программа перестаёт работать

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
16 / 16 / 1
Регистрация: 09.03.2013
Сообщений: 65
23.03.2014, 16:51     Код после занесения в функцию перестаёт работать #2
C++
1
void myLU(vector<vector <double>> a, int n, vector<vector <double>>L, vector<vector <double>>U)
Если значения меняются, то они должны передаваться по ссылке или указателю.
C++
1
void myLU(vector<vector <double>> a, int n, vector<vector <double>>&L, vector<vector <double>>&U)
Yandex
Объявления
23.03.2014, 16:51     Код после занесения в функцию перестаёт работать
Ответ Создать тему
Опции темы

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