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

Нужен рабочий пример решения СЛАУ методом Гаусса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перевести из паскаля нахождение строк с наибольшим количеством нулей http://www.cyberforum.ru/cpp-beginners/thread1182999.html
Var i,j,n,m,max,imax:integer; A:array of integer; Function Kol(i:integer):byte; Var j,k:integer; Begin k:=0; For j:=1 to m do if A=0 then inc(k); Kol:=k; End;
C++ Перевести из паскаля в с (подсчет отрицательных элементов) Const n=6;m=5; Var A:array of real; B:array of byte;//для подсчёта кол-ва отрицательных i,j,imax:byte; Begin For i:=1 to n do Begin For j:=1 to m do Begin A:=random*10-5; http://www.cyberforum.ru/cpp-beginners/thread1182998.html
Структура данных, запись в файл, её считывание C++
помогите срочно, данные не записываются в файл, ну и темболее не считываются #include <vcl.h> #pragma hdrstop #include <iostream.h> #include <fstream.h> #include <stdlib.h> #include <stdio.h> #include "Unit1.h" #include <string.h>
Угадать число методом половинного деления C++
Загадывается число от 1 до 1000 и компьютер его угадывает согласно подсказкам больше или меньше. Используем метод половинного деления.
C++ Переделать в классе-календаре функцию нормализации дней в месяце. http://www.cyberforum.ru/cpp-beginners/thread1182956.html
В общем, нужно было написать календарь. Сделал я это, мягко говоря, не самым лучшим образом. А именно: #include <iostream> #include <conio.h> #include <time.h> #include <math.h> using namespace std; class Date { //Класс "Дата" int year; //Год int month; //Месяц
C++ Поиск числа в файле, открытым в бинарном режиме Здравствуйте уважаемые дамы и господа, возник вопрос по поводу поиска числа в бинарном файле. Допустим имеется код: #include <iostream> #include <conio.h> using namespace std; void main(){ int t = 247; t = t - 246; cout << t << endl; подробнее

Показать сообщение отдельно
andreyananas
 Аватар для andreyananas
18 / 18 / 6
Регистрация: 15.10.2013
Сообщений: 823
Завершенные тесты: 1
21.05.2014, 07:15  [ТС]     Нужен рабочий пример решения СЛАУ методом Гаусса
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <stdlib.h>//malloc, system("pause")
#include <stdio.h>  //i/o
#include <conio.h>  //getch
#include <math.h>
 
void ShowVector(int n, double * vec)
{
        for(int i = 0; i < n; i++)
                printf("%.3f ",vec[i]);
        printf("\r\n");
}
 
void PryamoiHod(int n, double **a, double *b)
{
        double v;
        for(int k = 0,i,j,im; k < n - 1; k++)
        {
                im = k;
                for(i = k + 1; i < n; i++)
                {
                        if(fabs(a[im][k]) < fabs(a[i][k]))
                        {
                                im = i;
                        }
                }
                if(im != k)
                {
                        for(j = 0; j < n; j++)
                        {
                                v                = a[im][j];
                                a[im][j] = a[k][j];
                                a[k][j]  = v;
                        }
                        v     = b[im];
                        b[im] = b[k];
                        b[k]  = v;
                }
                for(i = k + 1; i < n; i++)
                {
                        v               = 1.0*a[i][k]/a[k][k];
                        a[i][k] = 0;
                        b[i]    = b[i] - v*b[k];
                                                if(v != 0)
                        for(j = k + 1; j < n; j++)
                        {
                                a[i][j] = a[i][j] - v*a[k][j];
                        }
                }
        }
}
 
void ObratniHod(int n, double **a, double *b, double *x)
{
        double s = 0;
        x[n - 1] = 1.0*b[n - 1]/a[n - 1][n - 1];
        for(int i = n - 2, j; 0 <= i; i--)
        {
                s = 0;
                for(j = i + 1; j < n; j++)
                {
                        s = s+a[i][j]*x[j];
                }
                x[i] = 1.0*(b[i] - s)/a[i][i];
        }
}
 
int main()
{
        int i,j,n;
        double **a, *b, *x;
        do
        {
                printf("Enter NUM of equations: ");
                scanf("%d",&n);
                //Выделяем память под матрицу А и векторы В и Х
                a = (double **)malloc(n*sizeof(double));
                b = (double *)malloc(n*sizeof(double));
                x = (double *)malloc(n*sizeof(double));
                for(i = 0; i < n; i++)
                {
                        a[i] = (double *)malloc(n*sizeof(double));
                        //Ввод a
                        for(j = 0; j < n; j++)
                        {
                                printf("a[%d][%d] = ",i + 1,j + 1);
                                scanf("%lf",&a[i][j]);
                        }
                }
                //Ввод b
                for(i = 0; i < n; i++)
                {
                        printf("b[%d] = ",i + 1);
                        scanf("%lf",&b[i]);
                }
                
                printf("\tSee input\r\n");
                printf("Matrix A:\r\n");
                for(i = 0; i < n; i++)
                        ShowVector(n, a[i]);
                printf("Vector B:\r\n");
                ShowVector(n, b);
                
                printf("\tSolving on Gauss method\r\n");
                PryamoiHod(n, a, b);
                printf("Forvard Gauss course\r\n");//Прямой ход
                printf("Matrix A:\r\n");
                for(i = 0; i < n; i++)
                        ShowVector(n, a[i]);
                printf("Vector B:\r\n");
                ShowVector(n, b);
 
                ObratniHod(n, a, b, x);
                printf("Back Gauss course\r\n");//Обратный ход
                printf("Matrix A:\r\n");
                for(i = 0; i < n; i++)
                        ShowVector(n, a[i]);
                printf("Vector B:\r\n");
                ShowVector(n, b);
 
                printf("Results :\r\n");
                ShowVector(n, x);
 
                printf("Press Y for new input\r\n");
                //Чистим память
                free((void *)a);
                free((void *)b);
                free((void *)x);
        }
        while(toupper(getch()) == 'Y'); // ????????????????
        return 0;
}
Вот нашел, вроде норм работает.
Может кто то закомментировать?

Добавлено через 45 минут
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
void PryamoiHod(int n, double **a, double *b)
{
        double v;
        for(int k = 0,i,j,im; k < n - 1; k++)
        {
                im = k;
                for(i = k + 1; i < n; i++)
                {
                        if(fabs(a[im][k]) < fabs(a[i][k]))
                        {
                                im = i;
                        }
                }
                if(im != k)
                {
                        for(j = 0; j < n; j++)
                        {
                                v                = a[im][j];
                                a[im][j] = a[k][j];
                                a[k][j]  = v;
                        }
                        v     = b[im];
                        b[im] = b[k];
                        b[k]  = v;
                }
                for(i = k + 1; i < n; i++)
                {
                        v               = 1.0*a[i][k]/a[k][k];
                        a[i][k] = 0;
                        b[i]    = b[i] - v*b[k];
                                                if(v != 0)
                        for(j = k + 1; j < n; j++)
                        {
                                a[i][j] = a[i][j] - v*a[k][j];
                        }
                }
        }
}
Про комментируйте что тут происходит (с математической точки зрения), плс

Добавлено через 32 секунды
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void ObratniHod(int n, double **a, double *b, double *x)
{
        double s = 0;
        x[n - 1] = 1.0*b[n - 1]/a[n - 1][n - 1];
        for(int i = n - 2, j; 0 <= i; i--)
        {
                s = 0;
                for(j = i + 1; j < n; j++)
                {
                        s = s+a[i][j]*x[j];
                }
                x[i] = 1.0*(b[i] - s)/a[i][i];
        }
}
и тут...

Добавлено через 2 минуты
Как прописать эти же процедуры с помощью new и delete
C++
1
2
3
                a = (double **)malloc(n*sizeof(double));
                b = (double *)malloc(n*sizeof(double));
                x = (double *)malloc(n*sizeof(double));
C++
1
2
3
4
                //Чистим память
                free((void *)a);
                free((void *)b);
                free((void *)x);
Добавлено через 21 секунду
help me, please =)
 
Текущее время: 00:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru