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

Решение систем алгебраических уравнений - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Преобразование Int в char http://www.cyberforum.ru/cpp-beginners/thread1219710.html
от скуки баловался с кодом.решил проверить,можно ли сделать так? #include <iostream> int main(){ char b = 't'; int a =b; std::cout <<b; system("pause"); }
C++ Найти все трехзначные числа, состоящие из разных цифр, сумма которых равна А Найти все трехзначные числа, которые состоят из разных цифр, а их сумма ровна А (число А вводится с клавиатуры). http://www.cyberforum.ru/cpp-beginners/thread1219709.html
C++ Объяснить работу двух кодов
char a={"kakogo hrena?"}; cout<<a<<endl; // kakogo hrena? и int a={11,22,33}; cout<<a<<endl; // 001cfb50 Собсно почему в первом случае выводит весь символьный масив? Должен ЖЕ выводить тоже что и во втором случае - адрес а. Почему так? И почему сразу весь масив... попробывал через отдельный указатель. Кстати с этого примера все и началось увидел в книге и мозг повис. Что это? Что...
Необходимо найти самое длинное слово и удалить все его вхождения C++
самое длинное слово я нахожу, но вот как его удалить? #include "stdafx.h" #include <iostream> #include <cstring> using namespace std; int main(); int _tmain(int argc, _TCHAR* argv)
C++ Найти сумму между двумя введенными числами, включая эти числа http://www.cyberforum.ru/cpp-beginners/thread1219662.html
Не работает примитивная программа Здравствуйте. Суть программы заключается в нахождении суммы между 2-мя введенными числами,включая эти числа. При компилировании ,вводя любые числа,ответ показывает один и тот же,а именно -2. Алгоритм вроде верный,но вот ошибку найти не получается #include<iostream> int main(){ std::cout <<" write 2 letters and you'll see the sum of them" << std:: endl;...
C++ Регулировка скорости вывода символа на экран Задача поставлена следующая - вывести на экран линию из символов, параметры которой задаются пользователем. В числе прочих есть параметр скорости вывода. Всё сделал кроме него. Пробовал его реализовать через Sleep(), но программа ждёт всю паузу, а потом сразу символы выводит. Вот последний ее вариант: #include<iostream> #include<windows.h> using namespace std; void main() {... подробнее

Показать сообщение отдельно
Psilon
Master of Orion
Эксперт .NET
5888 / 4785 / 633
Регистрация: 10.07.2011
Сообщений: 14,405
Записей в блоге: 5
Завершенные тесты: 4
30.06.2014, 10:20
gru74ik, бесполезно, количество строк кода в таком случае будет расти квадратично.

Вот пример нахождения на C#, на плюсы, надеюсь, переводить почти не надо:
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
// result - указатель на буффер правой части СЛАУ
// mtx - указатель на первый элемент матрицы
// n - размер системы
static bool _Solve_square_system(double* result, double* mtx, int n)
{
    double* mtx_u_ii, mtx_ii_j;
    double a;
    double* mtx_end = mtx + n * n, result_i, mtx_u_ii_j = null;
    double mx;
    int d = 0;
    // mtx_ii - указатель на 'ведущий' диагональный элемент матрицы
    for (double* mtx_ii = mtx, mtx_ii_end = mtx + n; mtx_ii < mtx_end; result++, mtx_ii += n + 1, mtx_ii_end += n, d++)
    {
        // Смотрим под ведущим элеменом, значение максимальное по модулю
        {
            mx = System.Math.Abs(*(mtx_ii_j = mtx_ii));
            for (mtx_u_ii = mtx_ii + n, result_i = result + 1; mtx_u_ii < mtx_end; mtx_u_ii += n, result_i++)
            {
                if (mx < System.Math.Abs(*mtx_u_ii))
                {
                    mx = System.Math.Abs(*(mtx_ii_j = mtx_u_ii));
                    mtx_u_ii_j = result_i;
                }
            }
            // если максимальный по модулю элемент равен 0 - система вырождена и не имеет решения
            if (mx == 0) return false;
            // если максимальный элемент не является ведущим, делаем перестановку строк, чтобы он стал ведущим
            else if (mtx_ii_j != mtx_ii)
            {
                a = *result;
                *result = *mtx_u_ii_j;
                *mtx_u_ii_j = a;
                for (mtx_u_ii = mtx_ii; mtx_u_ii < mtx_ii_end; mtx_ii_j++, mtx_u_ii++)
                {
                    a = *mtx_u_ii; *mtx_u_ii = *mtx_ii_j; *mtx_ii_j = a;
                }
            }
        }
        //'обнуляем' элементы над ведущим
        for (mtx_u_ii = mtx_ii - n, result_i = result - 1; mtx_u_ii > mtx; mtx_u_ii -= n)
        {
            a = *(mtx_u_ii) / *mtx_ii;
            for (mtx_ii_j = mtx_ii + 1, mtx_u_ii_j = mtx_u_ii + 1; mtx_ii_j < mtx_ii_end; *(mtx_u_ii_j++) -= *(mtx_ii_j++) * a) ;
            *(result_i--) -= *(result) * a;
        }
        //'обнуляем' элементы под ведущим
        for (mtx_u_ii = mtx_ii + n, result_i = result + 1; mtx_u_ii < mtx_end; mtx_u_ii += d)
        {
            a = *(mtx_u_ii++) / *mtx_ii;
            for (mtx_ii_j = mtx_ii + 1; mtx_ii_j < mtx_ii_end; *(mtx_u_ii++) -= *(mtx_ii_j++) * a) ;
            *(result_i++) -= *(result) * a;
        }
    }
    //матрица приведена к дигональному виду
    //приводим ее к единичному, получая права решение
    for (; mtx_end > mtx; *(--result) /= *(--mtx_end), mtx_end -= n) ;
    return true;
}
public static bool SolveSquare(double[] outResult, double[,] A, double[] x)
{
    int n = outResult.Length;
    if (n == x.Length && n == A.GetLength(0) && n == A.GetLength(1))
    {
        if (n > 0)
        {
            Array.Copy(x, outResult, n);
            fixed(double* presult = &outResult[0])
            fixed (double* pmtx = &A[0,0])
                return _Solve_square_system(presult, pmtx, n);
        }
        else return true; 
    }
    throw new IndexOutOfRangeException();
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru