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

Подстроение алгоритма определителя - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа таймер http://www.cyberforum.ru/cpp-beginners/thread642406.html
Всем привет, подскажите плз как написать программу, которая с момента первого запуска включает таймер, а по истечении времени (5 мес), запускает бат файл, который сносит винду.
C++ не работает sqrt декомпозиция Добрый день, пытался разобраться с sqrt-декомпозицией. Суть понял, но вот код не хочет работать. точнее он не хочет работать правильно. вот код: #include<iostream> #include<cmath> #include<cstdlib> #include<cstdio> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread642394.html
C++ Задача "Водолей"
Вот условие: У исполнителя “Водолей” есть два сосуда, первый объемом A литров, второй объемом B литров, а также кран с водой. Водолей может выполнять следующие операции: Наполнить сосуд A (обозначается >A). Наполнить сосуд B (обозначается >B). Вылить воду из сосуда A (обозначается A>). Вылить воду из сосуда B (обозначается B>). Перелить воду из сосуда A в сосуд B (обозначается как...
Двоичные файлы C++
У меня есть код программы работающий с текстовыми файлами, #include <iostream> #include <conio.h> #include <cstdlib> #include <locale.h> #include <string.h> #include <fstream> using namespace std;
C++ Реализация собственного умного укзателя http://www.cyberforum.ru/cpp-beginners/thread642344.html
Доброго времени суток! При самостоятельной реализации умного указателя столкнулся с проблемой при удалении самого указателя. Код программы имеет вид: #pragma once template <class Object> class Smart_ptr {
C++ Описать класс "Конус" Язык С 1. Опишите класс "Конус" Данные класса: координаты центра основания, радиус основания, высота. Конструкторы класса: конструктор по умолчанию, конструктор конуса с центром в начале координат, конструктор произвольного конуса. 2. Определите методы: ввод конуса, вывод на экран, определение площади поверхности, определение объёма конуса. 3.Объявите конус с центром в начале координат и... подробнее

Показать сообщение отдельно
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
25.08.2012, 21:17
Я вам к рабочему коду с определителем добавил рабочий код с гауссом, но используя динамические массивы + матрица будет квадратной (для не квадратной искать определитель не получится, да и гаусс будет давать бесконечное кол-во решений, а для вектора свободных членов введен свой одномерный массив). Вам лишь осталось добавить обработку ситуаций, когда нет корней и т.п.
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
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define EPS 0.000000001
 
int main()
{
    double **A, **Am, *X, *b, mu, t;  // AX = b
    int i, j, n, k, x, y;
 
    printf ("Введите размерность матрицы:\n");
    scanf("%d", &n);
 
    A = (double**)malloc(n * sizeof(double*));
    for (i = 0; i < n; i ++)
        A[i] = (double*)malloc(n * sizeof(double));
    Am = (double**)malloc(n * sizeof(double*));
    for (i = 0; i < n; i ++)
        Am[i] = (double*)malloc(n * sizeof(double));
    X = (double*)malloc(n * sizeof(double));
    b = (double*)malloc(n * sizeof(double));
 
    printf ("Заполните матрицы A i b:\n");
 
    for (i = 0; i < n; i ++) {
        for (j = 0; j < n; j ++) {
            printf ("Введите A[%d][%d]=", i, j);
            scanf ("%lf", &A[i][j]);
            Am[i][j] = A[i][j];
        }
        printf ("Введите b[%d]=", i);
        scanf("%lf", &b[i]);
    }
 
    printf ("Исходная матрица:\n");
    for (i = 0; i < n; i ++) {
        for (j = 0; j < n; j ++)
            printf ("%9.2lf", A[i][j]);
        printf ("\n");
    }
 
    double kk;
 
    for (x = 0; x < (n - 1); x ++) {
        for (y = (x + 1); y < n; y ++) {
            kk =- Am[y][x] / Am[x][x];
            for (j = 0; j < n; j ++) {
                Am[y][j] += kk * Am[x][j];
                if ( fabs(A[y][j] ) < EPS) Am[y][j] = 0;
            }
        }
    }
 
    double det = 1.0;
    for(int i = 0; i < n; i ++)
        det *= Am[i][i];
 
    printf("\nОпределитель = %lf\n", det);
 
    printf ("Метод Гаусса:\n");
    for (k = 0; k < n; k ++)
        for (i = k + 1 ; i < n; i ++) {
            mu = A[i][k] / A[k][k];
            for (j = 0; j < n; j ++)
                A[i][j] -= A[k][j] * mu;
            b[i] -= b[k] * mu;
        }
 
    printf ("Матрица А, приведённая к треугольному виду; матрица b :\n");
    for (i = 0; i < n; i ++) {
        for (j = 0; j < n; j ++)
            printf ("%9.2lf", A[i][j]);
        printf ("%25.2lf", b[i]);
        printf ("\n");
    }
 
    for (i = n - 1; i >= 0; i --) {
        t = b[i];
        for(j = i + 1; j < n; j++)
            t -= A[i][j] * X[j];
        X[i] = t / A[i][i];
    }
 
    printf ("Ответ для метода Гаусса\n");
    for (k = 0; k < n; k ++) printf ("%lf\n", X[k]);
 
    for (i = 0; i < n; i ++) free(A[i]);
    free (A);
 
    for (i = 0; i < n; i ++) free(Am[i]);
    free (Am);
 
    free (X);
    free (b);
    return 0;
}
Код не мудрёный ни разу, только работа с памятью, циклы и арифметические операции.
ЗЫ: возможныая причина появления ошибок у вас - сама матрица изменяется во время нахождения корней и определителя(поэтому нужна резервная матрица), и использование abs вместо fabs для вещественных чисел.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru