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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
miss_you
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 7
09.09.2010, 19:28     Метод Гаусса #1
Добрый вечер, можете написать программу для решения СЛАУ методом гаусса на Си, чтобы был прямой и обратный ход.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2010, 19:28     Метод Гаусса
Посмотрите здесь:

C++ Метод Гаусса
Метод Гаусса C++
C++ метод гаусса
метод Гаусса C++
метод гаусса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sotrudnik
7 / 7 / 2
Регистрация: 13.04.2010
Сообщений: 35
09.09.2010, 20:36     Метод Гаусса #2
Я и за так могу кинуть. Причём, какой-угодно. Хоть с выбором элемента, хоть без выбора. Но только сюда и при условии, что это по правилам форума (а это по правилам, раздел не фриланс, а Си для начинающих). И ещё мне надо знать матрицу (в файле она, или, генерить её надо).
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
09.09.2010, 20:42     Метод Гаусса #3
Гаусс для коллекции

Добавлено через 21 секунду
Источник:
Большая коллекция решенных задач
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 238
07.10.2010, 17:06     Метод Гаусса #4
может кто-нибудь, подсказать, что не так?
прога запускается, вводишь значения, нажимаешь кнопку и выдает ошибку
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
void GaussMod ()
{a= new int *[w];
for(int i=0;i<w;i++)
{a[i]=new int [w];}
b= new int [w];
for(int i=0;i<w;i++)
{for(int j=0;j<w;j++)
{a[i][j]=StrToIntDef(Form1->StringGrid1->Cells[j][i], 0);}}
for(int i=0;i<w;i++)
{b[i]=StrToIntDef(Form1->StringGrid3->Cells[0][i], 0);}
for (int k = 0; k <= w-2; k++) {
for (int i = k+1; i <= w-1; i++) {
t=a[i][k]/a[k][k];
b[i]=b[i]-t*b[k];
for (int j = k+1; j <= w-1; j++) {
a[i][j]=a[i][j]-t*a[j][j];}}}
for (int i = 0; i < w; i++) {Form1->StringGrid5->Cells[0][i]=b[i];
for (int j = 0; j < w; j++) {
Form1->StringGrid4->Cells[j][i]=a[i][j];}}
for (int k=w-1; k > 0; k++) {s=0;
for (int j = k-1; j <= w-1; j++) {
s=s+a[k][j]*x[j];}
x[k]=(b[k]-s)/a[k][k];}\\на это компилятор жалуется.
for (int i=0; i <=w-1; i++) {Form1->StringGrid3->Cells[0][i]=x[i];}
Alex_Sabaka
07.10.2010, 23:03
  #5

Не по теме:

Может для начало код НОРМАЛЬНО оформите.

Vergil
08.10.2010, 11:37
  #6

Не по теме:

для начала скажите, как это ваше нормально? Я так всегда пишу, так всегда выкладывал, и мне ничего не говорили. Поэтому объясните или приведите пример "нормально".

silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.10.2010, 12:10     Метод Гаусса #7
Vergil,
Уважайте других пользователей! То, что вы представили, то же самое, как если бы автор продавал книгу, в которой начисто отсутствуют знаки пунктуации. Сравните ваш вариант и это:

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
void GaussMod()
{
    a = new int*[w];
 
    for (int i = 0; i < w; i++)
        a[i] = new int[w];
 
    b = new int[w];
 
    for (int i = 0; i < w; i++)
        for (int j = 0; j < w; j++)
            a[i][j] = StrToIntDef(Form1->StringGrid1->Cells[j][i], 0);
 
    for (int i = 0; i < w; i++)
        b[i] = StrToIntDef(Form1->StringGrid3->Cells[0][i], 0);
 
    for (int k = 0; k <= w - 2; k++)
    {
        for (int i = k + 1; i <= w - 1; i++)
        {
            t = a[i][k] / a[k][k];
            b[i] = b[i] - t * b[k];
 
            for (int j = k + 1; j <= w - 1; j++)
                a[i][j] = a[i][j] - t * a[j][j];
        }
    }
 
    for (int i = 0; i < w; i++)
    {
        Form1->StringGrid5->Cells[0][i] = b[i];
 
        for (int j = 0; j < w; j++)
            Form1->StringGrid4->Cells[j][i] = a[i][j];
    }
 
    for (int k = w - 1; k > 0; k++)
    {
        s = 0;
 
        for (int j = k - 1; j <= w - 1; j++)
            s = s + a[k][j] * x[j];
 
        x[k] = (b[k] - s) / a[k][k];
    }
    \\ на это компилятор жалуется.
    for (int i = 0; i <= w - 1; i++)
        Form1->StringGrid3->Cells[0][i] = x[i];
}
И не говорите, что ваш вариант лучше и легче для восприятия, потому как это будет жуткое лукавство.
А так же погуглите про стили программирования.

Добавлено через 1 минуту
Если собираетесь в дальнейшем заниматься программированием, прямо сейчас начинайте писать форматированный код, иначе у вас ничего не получится... С вами в команде никто работать не станет.
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 238
09.10.2010, 07:57     Метод Гаусса #8
Если вам такой код больше нравится, то буду пытаться на этом форуме, если задаю вопрос, выкладывать в вашем стиле. Мне удобней мой. Я к нему привык и, когда в отчет нужно вставлять, то не нужно мучатся с удалением всех пробелов.
Эта строка не правильная
C++
1
a[i][j] = a[i][j] - t * a[j][j];
нужно
C
1
a[i][j] = a[i][j] - t * a[k][j];
Кстати, ругается только на эту строчку
C++
1
x[k] = (b[k] - s) / a[k][k];
, но когда в матрице линейная зависимость. А так просто считает не правильно.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.10.2010, 15:08     Метод Гаусса #9
Этот код не нам больше нравится, это один из вариантов хорошего стиля программирования. Подчёркиваю, один из вариантов. Есть и другие. Но в их число ваш вариант не входит. Это ни в коем случае не для того, чтобы обидеть, или, не дай Бог, унизить вас. Просто если в дальнейшем вы собираетесь заниматься программированием и, тем более, работать в какой-либо фирме, вы вряд-ли будете работать в одиночку. Над проектом вы, скорее всего, будете работать в группе с другими программистами. И у каждого будет часть работы, которую ему необходимо выполнить. Взаимодействие и просмотр чужого кода неизбежен. Так вот ваш код другим будет абсолютно не понятен. И пусть вы идеально программируете, только из-за вашего стиля ценить вас не будут. Повторяю, есть разные варианты стиля, но все они более-менее похожи один на другой.
Ну а если программировать дальше вы не собираетесь, то хотя бы на форумах выкладывайте правильно отформатированный код, чтобы, опять же, другим было легче его понять и помочь вам. Это в ваших же интересах.

Добавлено через 4 минуты
По проблеме: почему все считают, что достаточно написать "ругается". Думаете, все варианты, как компилятор может "ругаться", одинаковы? Так вот позвольте открыть секрет - это не так. Сообщения компилятора - очень важная и полезная информация. По ним можно понять не только, что что-то не так, а ещё и то, что именно не так. Так что уж будьте добры, показывайте само сообщение компилятора, а не только факт его наличия.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2010, 08:21     Метод Гаусса
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 238
12.10.2010, 08:21     Метод Гаусса #10
все. Понял что не так. Когда делал, то делал создание массивов и переменной на автомате. Сделал их интовскими, а нужно dauble. Из-за этого считает не правильно. Ругался, потому что при линейной зависимости получаются нули, а на ноль делить нельзя. Вот и вылазила ошибка.
Yandex
Объявления
12.10.2010, 08:21     Метод Гаусса
Ответ Создать тему
Опции темы

Текущее время: 10:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru