С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/48: Рейтинг темы: голосов - 48, средняя оценка - 5.00
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198

Решение СЛАУ методом Гаусса-Жордана

14.11.2009, 21:24. Показов 9096. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу вас помочь мне с портированием программы решения СЛАУ методом исключений Гаусса-Жордана с С++ в код Delphi:
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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
 
#define NUNKNOWN 4
 
void main()
{
    int colPos, rowPos;
    int i, j, k;
    double max;
    double temp;
    int m_nCols;
    int m_nRows;
    double** array;
    double*  parray;
    unsigned int* ListVar;
    double* x;
 
    m_nRows=4;
    m_nCols=m_nRows+1;
    parray=new double[m_nRows*m_nCols];
    array=new double*[m_nRows];
    for (i=0; i<m_nRows; i++)
    {
        *(array+i)=parray+i*m_nCols;
    }
 
    ListVar=new unsigned int[m_nCols-1];
    for (j=0; j<m_nCols-1; j++)
        ListVar[j]=j+1;
 
    x=new double[NUNKNOWN];
 
    for (i=0; i<m_nRows-1; i++)
        x[i]=i+1;
 
    for (i=0; i<4; i++)
        for (j=0;j<5; j++)
            cin>>array[i][j];
    for (k=0; k<m_nRows-1; k++)
    {
        colPos=rowPos=k;
        max=array[k][k];
        for (i=k; i<m_nRows; i++)
            for (j=k+1; j<m_nCols-1; j++)
                if (abs(array[i][j])>max)
                {
                    max=array[i][j];
                    rowPos=i;
                    colPos=j;
                }
 
        for (i=0; i<m_nRows; i++)
        {
            temp=array[i][k];
            array[i][k]=array[i][colPos];
            array[i][colPos]=temp;
        }
 
        for (j=0; j<m_nCols; j++)
        {
            temp=array[k][j];
            array[k][j]=array[rowPos][j];
            array[rowPos][j]=temp;
        }
 
        temp=ListVar[k];
        ListVar[k]=ListVar[colPos];
        ListVar[colPos]=temp;
 
 
        for (j=m_nCols-1; j>=0; j--)
        {
            array[k][j]/=array[k][k];
 
        }
        for (j=0; j<m_nCols; j++)
            array[k][j];
        for (i=k+1; i<m_nRows; i++)
            for (j=m_nCols-1; j>=0; j--)
                array[i][j]-=array[k][j]*array[i][k];
 
        for (i=0; i<m_nRows; i++)
        {
            for (j=0; j<m_nCols; j++)
                cout<<array[i][j]<<" ";
            cout<<endl;
        }
        cout<<endl;
    }
 
    double s=0;
    x[m_nRows-1]=array[m_nRows-1][m_nCols-1]/
                     array[m_nRows-1][m_nCols-2];
    for (i=m_nRows-2; i>=0; i--)
    {
        s=0;
        for (k=i+1; k<m_nRows; k++)
            s+=array[i][k]*x[k];
            x[i]=array[i][m_nCols-1]-s;
    }
    for (i=0; i<m_nRows; i++)
        cout<<"X"<<ListVar[i]<<"="<<x[i]<<endl;
 
    for (i=0; i<m_nRows; i++)
        delete [] array[i];
    delete [] array;
    delete [] parray;
    getch();
}
Заранее благодарен
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2009, 21:24
Ответы с готовыми решениями:

Решение системы линейных уравнений методом Гаусса и Жордана-Гаусса
Помогите пожалуйста начала работать сначала работать с методом Гаусса, но в Unit2 Delphi ругается на type arys=array of real; не могу...

Delphi Решение СЛУ Методом Жордана-Гаусса
Привет, форум. Нуждаюсь в вашей помощи. Т.к. я - новичок до мозга костей в delphi, одному справиться не в силах. В общем, нашел разбор...

Решение линейных уравнений методом Жордана-Гаусса
я хочу что бы программа обходила двумерный масив jeka и в результате вычислений получить матрицу вида 1***** 01**** 001*** 0001** ...

2
 Аватар для Тамила
753 / 546 / 211
Регистрация: 12.11.2009
Сообщений: 1,100
14.11.2009, 21:45
Лучший ответ Сообщение было отмечено Lil Crazy как решение

Решение

Могу предложить такой вариант... доработай сам...при желании...

Delphi
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
var
  Form1: TForm1;
const n=5;
 
type
  mas=array[1..n,1..n+1] of real;
  matr=array[1..n,1..n] of real;
  stb=set of byte;
  vec=array[1..n] of real;
const
  a1: MAS=((4.5, 0.4, -1.4, 0.6, -0.8, 2.3),
          (2.7, 7.8, 3.3, -0.5, 1.9, -8.9),
          (2.3, -1.9, 8.8, 2.6, 1.4, 5.6),
          (1.1, 5.2, -0.7, 9.3, -3.2, 0.1),
          (2.8, 5.5, 4.4, 0.6, 12.2, -2.8));
 
 D:  matr=((9.41, 2.56, -3.12, 4.08, 0),
            (2.62, -15.71, -0.18, 3.24, 6.31),
            (0, 4.17, 16.23, 0, -8.47),
            (-3.55, 1.73, 4.83, 12.66, 1.48),
            (-0.27, 6.29, -0.13, 4.11, 20));
 
var
  b: matr;
  i, j, k, m, z, t: integer;
  s: stb;
  j0: byte;
  max, ss: real;
  r, x: vec;
  xm, d_c: matr;
 
implementation
 
{$R *.dfm}
 
procedure Gauss(n:integer;a:mas;var x:vec);
var
   l: array[1..21] of integer;
begin
   s:=[];
   for i:=1 to n do
    begin
       max:=a[i,1]; j0:=1;
       for j:=1 to n do
       if abs(a[i,j])>abs(max)then
        begin
           max:=a[i,j];
           j0:=j;
        end;
       l[i]:=j0;
       s:=s+[j0];
       if max=0 then exit;
       for k:=1 to n do if k<>i then
       for m:=1 to n+1 do
       if not (m in s) then
       a[k,m]:=(a[k,m]*a[i,j0]-a[i,m]*a[k,j0])/max;
       for m:=1 to n+1 do
       if not (m in s) then a[i,m]:=a[i,m]/max;
       for k:=1 to n do a[k,j0]:=0;a[i,j0]:=1;
     end;
    for k:=1 to n do
     begin
        i:=l[k];
        x[i]:=a[k,n+1];
     end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   Gauss(n,a1,x);
   for i:=1 to n do
   Memo1.Lines.Add('x['+IntToStr(i)+']='+FloatToStr(round(x[i]*10000)/10000));
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
   Memo1.Clear;
end;
 
end.
там может быть описано что-то лишнее...
1
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
14.11.2009, 22:52  [ТС]
Тамила, а можете написать для чего какие перемнные нужны?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2009, 22:52
Помогаю со студенческими работами здесь

Решение СЛАУ методом Гаусса
Здравствуйте! Я создала класс TMatrix и написала к нему метод - процедуру, решающую матрицу Гауссом. Что важно, матрица не обязательно...

Решение СЛАУ методом Гаусса
Помогите пожалуйста сформулировать систему десяти уравнений с десятью неизвестными {x}_{i} \left(i=\bar{1,10} \right) с помощью метода...

Решение СЛАУ методом Гаусса
Ребят, помогите пожалуйста написать программу. Я просто действительно не догоняю что тут нужно делать. Видимо программирование только для...

Решение слау методом гаусса
Помогите как можно оптимизировать вывод ответа x:=a/a; x:=(a-a*x)/a; x:=(a-a*x-a*x)/a; x:=(a-a*x-a*x-a*x)/a;

Решение СЛАУ модифицированным методом Гаусса
Всем здравствуйте! Помогите, пожалуйста, разобраться, как на Delphi сделать так, чтобы решалось СЛАУ с помощью матрицы методом Гаусса...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru