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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
С@talina
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 5
#1

Метод Гаусса - C++

27.09.2012, 19:56. Просмотров 1141. Ответов 3
Метки нет (Все метки)

Здравствуйте, у меня такая проблема. Мне нужно написать программу, которая решает СЛАУ методом Гаусса. Программа у меня работает,но когда программа скомпилировалась, она дает ввести только сколько уранений в системе и саму системы, и она показывает какая матрица будет, и все потом она ничего не делает. Я не знаю, что там надо дописать. Программа должна работать по прямому ходу (приведение расширенной матрицы до треугольного вида) и по обратному ходу (нахождение неизвестных). Помогите, пожалуйста.
Текст программы:
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 50
 
void glavelem(int k, double mas[][N + 1], int n, int otv[]);
 
int main(void)
{
    double mas[N][N + 1];
    double x[N];                //корни системы
    int otv[N];                 //отвечает за порядок корней
    int i, j, k, n;
    //ввод данных
    //clrscr();
    do {
        printf("введите число уравнений сисемы: ");
        scanf("%d", &n);
        if (N < n)
            printf("слишком большое число уравнений, повторите ввод\n");
    }
    while (N < n);
    printf("введите систему:n");
    for (i = 0; i < n; i++)
        for (j = 0; j < n + 1; j++)
            scanf("%lf", &mas[i][j]);
    //вывод введенной системы
    //clrscr();
    printf("система:n");
    for (i = 0; i < n; i++) {
        for (j = 0; j < n + 1; j++)
            printf("%7.2f ", mas[i][j]);
        printf("n");
    }
    //сначало все корни по порядку
    for (i = 0; i < n + 1; i++)
        otv[i] = i;
    //прямой ход метода Гаусса
    for (k = 0; k < n; k++) {
        glavelem(k, mas, n, otv);
        if (fabs(mas[k][k]) < 0.0001) {
            printf("система не имеет единственного решения");
            return (0);
        }
        for (j = n; j >= k; j--)
            mas[k][j] /= mas[k][k];
        for (i = k + 1; i < n; i++)
            for (j = n; j >= k; j--)
                mas[i][j] -= mas[k][j] * mas[i][k];
    }
    //обратных ход
    for (i = 0; i < n; i++)
        x[i] = mas[i][n];
    for (i = n - 2; i >= 0; i--)
        for (j = i + 1; j < n; j++)
            x[i] -= x[j] * mas[i][j];
    //вывод результата
    printf("ГЋГІГўГҐГІ:n");
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            if (i == otv[j]) {        //расставляем корни по порядку
                printf("%fn", x[j]);
                break;
            }
    return (0);
}
 
//----------------------------------------------
// описание функции
//----------------------------------------------
void glavelem(int k, double mas[][N + 1], int n, int otv[])
{
    int i, j, i_max = k, j_max = k;
    double temp;
    //ищем максимальный по модулю элемент
    for (i = k; i < n; i++)
        for (j = k; j < n; j++)
            if (fabs(mas[i_max][j_max]) < fabs(mas[i][j])) {
                i_max = i;
                j_max = j;
            }
    //переставляем строки
    for (j = k; j < n + 1; j++) {
        temp = mas[k][j];
        mas[k][j] = mas[i_max][j];
        mas[i_max][j] = temp;
    }
    //переставляем столбцы
    for (i = 0; i < n; i++) {
        temp = mas[i][k];
        mas[i][k] = mas[i][j_max];
        mas[i][j_max] = temp;
    }
    //учитываем изменение порядка корней
    i = otv[k];
    otv[k] = otv[j_max];
    otv[j_max] = i;
    getch();
}
Когда программа скомпилировалась, он дает ввести только сколько уранений в системе и саму системы, и он показывает какая матрица будет, и все потом он ничего не делает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2012, 19:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод Гаусса (C++):

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя - C++
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Метод Гаусса - C++
Помогите, пожалуйста, написать программу. Вот условие: Написать программу решения системы уравнений методом Гаусса. С ее помощью...

метод Гаусса - C++
Помогите пожалуйста написать программу на С++ Задана система линейного уравнения:MA*X=B. Для решения уравнения использовать метод Гаусса

Метод Гаусса - C++
Суть в том что бы СЛАУ методом Гаусс с последовательным исключениям неизвестных.Вот система: 2.7x+3.3y+1.3z=2.1 3.5x-1.7y+2.8z=1.7 ...

метод гаусса - C++
Помогите,пожалуйста Преподаватель попросил расписать программу по блокам #include &quot;stdio.h&quot; #include &quot;conio.h&quot; #include...

Метод Гаусса - C++
В школе задали написать программу , которая решает систему уравнений методом Гаусса. Матрица квадратная (колличество строк = колличеству...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
XmarvelX
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 3
27.09.2012, 21:31 #2
Насколько я помню из курса линейки, метод Гаусса это сведение матрицы до диагонального вида (поправьте меня, если я не то вспомнил) а следовательно, матрица должна быть квадратной, потому что СЛАУ решится если для Х неизвестных есть Х независимых линейных уравнений... double mas[N][N + 1] - почему у вас она не квадратная, это как первый пункт= ) дальше я что-то забоялся лезть в код
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
27.09.2012, 21:47 #3
double mas[N][N + 1] - почему у вас она не квадратная
очевидно потому, что есть еще и свободные члены выражения
x1+x2 = 42
С@talina
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 5
28.09.2012, 11:35  [ТС] #4
http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases}<br />
 & 15.7x+6.6y-5.7z+11.5w= -2.4  \\ <br />
 & 8.8x-6.7y+5.5z-4.5w=5.6  \\ <br />
 & 6.3x-5.7y-23.4z+6.6w=7.7  \\ <br />
 & 14.3x+8.7y-15.7z-5.8w= 23.4  <br />
\end{cases}
Скажем, нужно решить вот такую стстему
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2012, 11:35
Привет! Вот еще темы с ответами:

метод Гаусса - C++
Знаю что тема поднималась много раз но все же, можете продемонстрировать решение хотя бы 3 уравнений (желательно 4) но без считывания и...

Метод Гаусса - C++
Всем привет. Ребят, что скажите по поводу такой реализации метода Гаусса: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt;...

Метод Гаусса!!! - C++
Всем привет! )) У меня вот такая проблемка! Нужно решить СЛАУ методом Гаусса с выбором главного элемента по столбцу!! Теоретически знаю, а...

Метод Гаусса - C++
Как решить квадратную матрицу методом Гаусса, я ее привел к треугольному виду, не могу понять как дальше быть....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.09.2012, 11:35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru