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

Гаусс для коллекции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ malloc - cannot convert from 'void *' to 'double *' http://www.cyberforum.ru/cpp-beginners/thread104777.html
Здравствуйте. У меня тут текст программы для дискретного преобразования Фурье. Проблему составляют строчки, где есть комменты . Я смотрел в описании функции, вроде всё правильно.Но MS Visual St 2008 c++ упрямо выдает ошибку:cannot convert from 'void *' to 'double *' В чём может быть причина? int DFT(int dir,int m,double *x1,double *y1) { long i,k; double arg; double cosarg,sinarg;...
C++ Перегрузка оператора вывода на консоль для шаблонного класса Следующий код компилируется, но не линкуется: #include <iostream> using namespace std; template <typename T> class A { public: A() : elem (0) {} http://www.cyberforum.ru/cpp-beginners/thread104761.html
C++ Структуры, массивы, сортировка
Люди Help! Уже второй день сижу над задачей и не могу понять в чём проблема. Задача такая: 1) Описать структуру с именем TRAIN, содержащую следующие поля: -название пункта назначения -номер поезда -время отправления 2) Написать программу, выполняющую следующие действия: -ввод с клавиатуры данных в массив, состоящий из 9-ти структур типа TRAIN, записи должны быть упорядочены по номерам...
Создать класс время с полями: час(0-23), минута (0-59), секунда (0-59) C++
Создать класс время с полями: час(0-23), минута (0-59), секунда (0-59). В классе описать конструктор, а также функции-члены установки времени, получения часа, минуты и секунды, а также две функции вывода на экран: вывода по шаблону "16 часов 18 минут 3 секунды" и "4 p.m 18 минут 3 секунды". Функции-члены установки полей класса должны проверять корректность задаваемых параметров. Если Вы...
C++ Нужна программа-код в Borlande C++ по созданию графика ф-ии http://www.cyberforum.ru/cpp-beginners/thread104714.html
Возникла сложность с написание кода и созданием формы такой программы. Кто сможет, подскажите пожалуйста, оч нужно!! Заранее, спасибо! ) Задача: 1. Постройте график функции y(x)= Ysin^2 ωx (символ ^ значит в степени, ωx - не в степени) , при этом коэффициенты Y, и ω задаются в окнах формы. 2. Создайте программу, которая позволяет увидеть вращение круга с вписанным в него квадратом.
C++ Файл. Ввод/вывод. нуждаюсь в вашей помощи. создать входной файл из нескольки строк символов. создать выходной файл в который записать 3 строчку с входного и защитить от дальнейшей записи(тут я полагаю поставить атрибут только для чтения). Исходный файл стереть. подробнее

Показать сообщение отдельно
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
14.04.2014, 14:30
Честно говоря офигел... Искал вчера несколько часов решение СЛАУ общего вида. Все либо зависали либо были для частных случаев. В итоге решил довести до ума то, что валялось здесь. Я выяснил (методом внимательного всматривания), что правильным порядок иксов в ответе нарушается из-за изменения порядка строк в A (кстати, так и не понял, почему при этом в b ничего менять не надо и ответ правильный). Быстро дописал костыль, проверил, всё идеально.
Работает, естественно, не слишком быстро но для размерности меньше 1000 сойдёт... Решает меньше секунды...
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
#include <stack>
void EDM::Gauss(double** A, double *b, double *x, int n)
{
    std::stack<std::pair<size_t,size_t> > swaps;
    int i, j, k, t;
    double kof, s;
    for (i = n - 1; i > 0; --i) {
        for (t=i, j=i-1; j >= 0; --j) {//Поиск максимума в столбце
            if (fabs(A[i][t]) < fabs(A[i][j])) {
                t = j;
            }
        }
        if (A[i][t] == 0.0) {
            return;
        }
        if (t != i) {
            for (k = n - 1; k >= 0; --k) {
                std::swap(A[k][t],A[k][i]);
            }
            swaps.push(std::pair<size_t, size_t>(i,t));
        }
        for (j=i-1; j>=0; --j) {
            kof = A[j][i] / A[i][i];
            A[j][i] = 0.0;
            b[j] -= b[i] * kof;
            for (k = i - 1; k >= 0; --k) {
                A[j][k] -= A[i][k] * kof;
            }
        }
    }
    for (i = 0; i < n; ++i)
    {
        s = 0.0;
        for (j = i - 1; j >= 0; --j) {
            s += A[i][j] * x[j];
        }
        x[i] = (b[i] - s) / A[i][i];
    }
    while (!swaps.empty()) {
        std::swap(x[swaps.top().first], x[swaps.top().second]);
        swaps.pop();
    }
}
Добавлено через 3 минуты
СЛАУ размерностью 5184 решалась 228 секунд... ну да ладно, сойдёт для сельской местности...
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru