Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 1
Регистрация: 10.03.2017
Сообщений: 28
1

Алгоритм решения СЛАУ методом Гаусса

18.09.2017, 13:28. Показов 1700. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
давно не работала с Паскалем... забыла синтаксис. помогите,пожалуйста,разобраться
Pascal
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
 PROCEDURE SIMQ(Nn:Integer;Var Aa:TMatr;Var Bb:TVector;Var Ks:Integer);
Label M1;
Const Eps=1e-21;
Var Max,U,V : Real; I,J,K1,L : Integer;
Begin
For I:=1 To Nn Do Aa[i,Nn+1]:=Bb[i];
For I:=1 To Nn Do
 Begin
 Max:=Abs(Aa[i,i]); K1:=I;
 For L:=I+1 To Nn Do If (Abs(Aa[l,i])>Max) Then
 Begin
 Max:=Abs(Aa[l,i]); K1:=L;End;
 If(Max<Eps) Then Begin Ks:=1; Goto M1;
 End Else Ks:=0; 
 If K1<>I Then
 For J:=I To Nn+1 Do
 Begin U:=Aa[i,j]; Aa[i,j]:=Aa[k1,j]; Aa[k1,j]:=U; End;
 V:=Aa[i,i];
 For J:=I To Nn+1 Do Aa[i,j]:=Aa[i,j]/V;
 For L:=i+1 To Nn Do Begin
 V:=Aa[l,i]; For J:=I+1 To Nn+1 Do Aa[l,j]:=Aa[l,j]-Aa[i,j]*V;
 End; End;
 Bb[nn]:=Aa[Nn,Nn+1];
 For I:=Nn-1 Downto 1 Do Begin Bb[i]:=Aa[i,nn+1];
 For J:=I+1 To Nn Do Bb[i]:=Bb[i]-Aa[i,j]*Bb[j];
 End;
 M1:End;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2017, 13:28
Ответы с готовыми решениями:

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

СЛАУ методом Гаусса
Доброго времени суток. В инете нашел код и вбил туда свои данные. Подскажите, плиз, подходит ли эта...

Решение СЛАУ методом Гаусса
Решить задание методом Гауса и сложить, и наладить програму на языке Pascal которая реализует...

Решить СЛАУ методом Жордана-Гаусса
Привет! Такое вот задание дали: решить СЛАУ методом Жордана-Гаусса. Система следующая 4x1 - x2 +...

17
8 / 9 / 3
Регистрация: 17.09.2017
Сообщений: 18
18.09.2017, 13:44 2
AdaAndreevna, Вначале определите тип вектора и матрицы, например
Pascal
1
2
3
4
5
6
const
  sz = 10;
 
type
  TVector = array [1 .. sz] of real;
  TMatr = array [1..sz] of TVector;
0
0 / 0 / 1
Регистрация: 10.03.2017
Сообщений: 28
18.09.2017, 13:47  [ТС] 3
все равно не работает...
0
8 / 9 / 3
Регистрация: 17.09.2017
Сообщений: 18
18.09.2017, 13:54 4
AdaAndreevna, объясните что процедура должна делать, что не так происходит, как вы её вызываете, и, кстати, каким именно, паскалем пользуетесь?
(Я проверил в Delphi - компиляцию проходит)
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
18.09.2017, 14:02 5
AdaAndreevna, Напишите задание. У Вас есть процедура, но нет основной программы, которая ее использует, так ничего не выйдет.
0
0 / 0 / 1
Регистрация: 10.03.2017
Сообщений: 28
18.09.2017, 14:03  [ТС] 6
Pascal ABC.Net
По сути это должен быт алгоритм решения СЛАУ методом Гаусса. как правильно вызвать ее в данной ситуации- не соображу....
0
0 / 0 / 1
Регистрация: 10.03.2017
Сообщений: 28
18.09.2017, 14:10  [ТС] 7
вот задание
Миниатюры
Алгоритм решения СЛАУ методом Гаусса  
0
0 / 0 / 1
Регистрация: 10.03.2017
Сообщений: 28
18.09.2017, 14:49  [ТС] 8
помогите,пожалуйста, написать код...
0
8 / 9 / 3
Регистрация: 17.09.2017
Сообщений: 18
18.09.2017, 15:22 9
К сожалению, у меня нет под рукой Pascal ABC.Net.
Я использовал Delphi взяв за исходный образец Решение слау методом гаусса.

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
PROCEDURE SIMQ(Nn:Integer;Var Aa:TMatr;Var Bb:TVector;Var Ks:Integer);
  Const Eps=1e-21;
  Var
    I,J,k : Integer;
    x: TVector;
    h: real;
begin
  Ks:=1;
  if abs(Aa[Nn,Nn])<Eps then
      exit;
  //Прямой ход - исключение переменных
  for i:=1 to Nn-1 do
    for j:=i+1 to Nn do
    begin
      if abs(Aa[i,i])<Eps then
        exit;
      Aa[j,i]:=-Aa[j,i]/Aa[i,i];
      for k:=i+1 to Nn do
        Aa[j,k]:=Aa[j,k]+Aa[j,i]*Aa[i,k];
        Bb[j]:=Bb[j]+Aa[j,i]*Bb[i]
      end;
      x[Nn]:=Bb[Nn]/Aa[Nn,Nn];
  //Обратный ход - нахождение корней
  for i:=Nn-1 downto 1 do
  begin
    h:=Bb[i];
    for j:=i+1 to Nn do
      h:=h-x[j]*Aa[i,j];
    x[i]:=h/Aa[i,i]
  end;
  Bb:=x;
  Ks:=0;
end;
Могут быть отличия.
0
0 / 0 / 1
Регистрация: 10.03.2017
Сообщений: 28
18.09.2017, 15:24  [ТС] 10
постоянно преследует эта ошибка:
Program1.pas(34) : Встречен конец файла, а ожидалось begin
0
8 / 9 / 3
Регистрация: 17.09.2017
Сообщений: 18
18.09.2017, 15:26 11
Если TVector,TMatr динамические массивы (размер задаётся при выполнении, то х понадобится создавать как то так
VB.NET
1
var x:= real[Nn]
и он получится с индексом от 0, а не от 1. Нужно учесть.
0
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
18.09.2017, 15:27 12
Цитата Сообщение от AdaAndreevna Посмотреть сообщение
давно не работала с Паскалем... забыла синтаксис. помогите,пожалуйста,разобраться

Не по теме:

И не только его... Еще codestyle тоже..

0
8 / 9 / 3
Регистрация: 17.09.2017
Сообщений: 18
18.09.2017, 15:28 13
Цитата Сообщение от AdaAndreevna Посмотреть сообщение
Встречен конец файла, а ожидалось begin
В конце файла должен быть end. Приведите текст всего файла.
0
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
18.09.2017, 15:29 14
Цитата Сообщение от AdaAndreevna Посмотреть сообщение
Встречен конец файла, а ожидалось begin
Ну так, KolodeznyDiver_, привел код процедуры, а не всей программы. Естественно будет ругаться IDE. Дописывайте.

Добавлено через 32 секунды
KolodeznyDiver_, не берите пример с AdaAndreevna, - пишите код красиво.
0
8 / 9 / 3
Регистрация: 17.09.2017
Сообщений: 18
18.09.2017, 15:37 15
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
KolodeznyDiver_, не берите пример с AdaAndreevna, - пишите код красиво.
Виноват, торопился. Вот, тоже с правильными отступами (хотя я привык не делать перенос перед begin )
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
PROCEDURE SIMQ(Nn:Integer;Var Aa:TMatr;Var Bb:TVector;Var Ks:Integer);
  Const Eps=1e-21;
  Var
    I,J,k : Integer;
    x: TVector;
    h: real;
begin
  Ks:=1;
  if abs(Aa[Nn,Nn])<Eps then
      exit;
  //Прямой ход - исключение переменных
  for i:=1 to Nn-1 do
    for j:=i+1 to Nn do
    begin
      if abs(Aa[i,i])<Eps then
        exit;
      Aa[j,i]:=-Aa[j,i]/Aa[i,i];
      for k:=i+1 to Nn do
        Aa[j,k]:=Aa[j,k]+Aa[j,i]*Aa[i,k];
      Bb[j]:=Bb[j]+Aa[j,i]*Bb[i]
    end;
  x[Nn]:=Bb[Nn]/Aa[Nn,Nn];
  //Обратный ход - нахождение корней
  for i:=Nn-1 downto 1 do
  begin
    h:=Bb[i];
    for j:=i+1 to Nn do
      h:=h-x[j]*Aa[i,j];
    x[i]:=h/Aa[i,i]
  end;
  Bb:=x;
  Ks:=0;
end;
0
0 / 0 / 1
Регистрация: 10.03.2017
Сообщений: 28
18.09.2017, 15:38  [ТС] 16
понимаю, что встреваю в вашу беседу... но может кто-то хочет помочь бедной студентке с кодом программы?....
0
8 / 9 / 3
Регистрация: 17.09.2017
Сообщений: 18
18.09.2017, 15:56 17
Pascal
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
const
  sz = 3;
 
type
  TVector = array [1 .. sz] of real;
  TMatr = array [1..sz] of TVector;
 
PROCEDURE SIMQ(Nn:Integer;Var Aa:TMatr;Var Bb:TVector;Var Ks:Integer);
  Const Eps=1e-21;
  Var
    I,J,k : Integer;
    x: TVector;
    h: real;
begin
  Ks:=1;
  if abs(Aa[Nn,Nn])<Eps then
      exit;
  //Прямой ход - исключение переменных
  for i:=1 to Nn-1 do
    for j:=i+1 to Nn do
    begin
      if abs(Aa[i,i])<Eps then
        exit;
      Aa[j,i]:=-Aa[j,i]/Aa[i,i];
      for k:=i+1 to Nn do
        Aa[j,k]:=Aa[j,k]+Aa[j,i]*Aa[i,k];
      Bb[j]:=Bb[j]+Aa[j,i]*Bb[i]
    end;
  x[Nn]:=Bb[Nn]/Aa[Nn,Nn];
  //Обратный ход - нахождение корней
  for i:=Nn-1 downto 1 do
  begin
    h:=Bb[i];
    for j:=i+1 to Nn do
      h:=h-x[j]*Aa[i,j];
    x[i]:=h/Aa[i,i]
  end;
  Bb:=x;
  Ks:=0;
end;
 
PROCEDURE test;
const
  ac : TMatr = ( (1,1,1),(1,0,-1),(1,2,1));
  bc : TVector = (6,-2,8);
var
  a : TMatr;
  b : TVector;
  ks: integer;
begin
  a:=ac; b:=bc;
  SIMQ(sz,a,b,ks);
  if ks<>0 then
    writeln('error')
  else begin 
    for var I := 1 to sz  do
    begin
      write(b[i]);
      write('   ');
    end;
    writeln;  
  end;  
end;
 
begin
  test;
end.
0
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
18.09.2017, 15:58 18
1. Просто нажми "Отформатировать код".
2. Пиши так, чтобы можно было понять по названию переменной какая она - глобальная или локальная.
3. var и const - с маленькой буквы.
4. Не PROCEDURE, а procedure.
5. Названия базовых типов, мне кажется, лучше с маленькой буквы писать.
Я, например, пишу в следующем стиле:
Pascal
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
uses GraphABC; 
const
  Angle = -Pi / 4;
 
procedure RLine(x, y, x1, y1: real):=Line(Round(x), Round(y), Round(x1), Round(y1)); 
 
procedure Draw(x, y, l: real; iterations: integer);
begin
  var lx := x + l * Cos(Angle);
  var ly := y + l * Sin(Angle);
  
  var angle1 := -Pi / 2 + Angle;
  var rx := x + l * Cos(angle1);
  var ry := y + l * Sin(angle1);
  
  RLine(x, y, lx, ly); 
  RLine(x, y, rx, ry);
  
  if iterations > 0 then 
  begin
    Dec(iterations);
    l := l / 2; 
    Draw(lx, ly, l, iterations); 
    Draw(rx, ry, l, iterations); 
  end; 
end;
 
begin
  Lockdrawing();
  Draw(300, 300, 200, 7);
  Redraw();
end.
1
18.09.2017, 15:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2017, 15:58
Помогаю со студенческими работами здесь

Решение СЛАУ Методом Гаусса из файла.
Доброго времени суток! Нужно написать программу решения СЛАУ Методом Гаусса, но только чтобы...

Составить программу решения СЛАУ методом Зейделя
пмогите,пожалуйста,написать программку на паскале для системы уравнений методом ЗЕЙДЕЛЯ......

Решения СЛАУ методом Гаусса?
Помогите понять у меня есть система 4х4. Мне нужно решить ее методом Гауса с порядковой...

Решения СЛАУ методом Гаусса
Подскажите пожалуйста как объединить две программы для метода Гаусса и для нахождения обратной...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru