Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 120

Метод Гаусса

07.01.2025, 14:21. Показов 982. Ответов 8

Студворк — интернет-сервис помощи студентам
Добрый день! Нужно пожалуйста разобраться с кодом решения систем линейных алгебраических уравнений метод Гаусса. Выдает ошибку. Заранее спасибо!

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
Program gauss;
Uses Crt;
Const
r=10;
Var a,a1:array [1..r, 1..r] of real
b,b1,x:array [1..r] of real
i,j,n,i1,j1:integer 
d,d1,s:real;
Begin 
ClrScr;
Repeat
write(' Введите размерность системы n='); 
readln(n);
if n>r then writeln('   Задаваемая размерность должна быть не более 10');
until(n<=r);
writeln('   Введите коэффициенты матрицы А и В'); 
For i:=1 To n Do begin
For j:=1 To n Do begin 
write ('    a[',i,',',j,']=');
read (a[i,j]);al[i,j]:=a[i,j]; 
end;
write ('b[',i,']=');
readln (b[i]);bl[i]:=b[i]; 
end;
For i:=1 To n Do begin 
d:=a[i,i];
For j:=i To n Do a[i,j]:=a[i,j]/d; 
b[i]:=b[i]/d;
For i1:=(i+1)To n Do begin 
d:=a[i1,i];
For j1:=i To n Do a[i1,j1]:=a[i1,j1]-d*a[i,j1]; 
b[i1]:=b[i1]-b[i]*d;
end; 
end; 
Writeln;
Writeln('   Результат прямого хода метода Гаусса'); 
for i:=1 to n do begin
for j:=1 to n do write('    ',a[i,j]:8:4);
writeln ('',b[i]:8:4); 
end;
writeln;
x[n]:=b[n]/a[n,n];
For i:=(n-1)DownTo 1 Do begin 
s:=0;
For j:=(i+1) To n Do s:=s+a[i,j]*x[j]; 
x[i]:=b[i]-s;
end; 
writeln;
writeln('   Корни уравнения:'); 
writeln;
For i:=1 To n Do writeln('  x[',i,']=',x[i]:0:4); 
writeln;
writeln('   Результаты проверки решения системы'); 
writeln;
for i:=1 to n do begin 
s:=0;
for j:=1 to n do s:=s+a1[i,j]*x[j];
writeln('   Погрешность',i,'-го уравнения=',(s-b1[i]):0:6 
end;
readln;
End.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.01.2025, 14:21
Ответы с готовыми решениями:

Метод гаусса с выбором главного элемента
Помогите пожалуйста, люди добрые, разобраться с кодом. Выдает не верный результат. program test1; type matr=array of real; ...

Метод итераций Якоби и метод Гаусса-Зейделя
Подскажите что-нибудь,вот у мну лабораторная: РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ И НЕЛИНЕЙНЫХ УРАВНЕНИЙ 1. Цель работы Ознакомление с...

Метод Гаусса
Решить эту систему на компьютере методом последовательных исключений неизвестных Гаусса: Пример кода с решением системы уравнений...

8
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,455
07.01.2025, 18:16
Grigorji,

Открою Вам небольшой секрет: Вы не знаете, что учите. На самом деле, Вас учат Turbo Pascal, а в качестве бесплатного компилятора порекомендовали Pascal ABC.NET. Вы просто это дело пропустили мимо ушей. Pascal ABC.NET Вы совсем не знаете. Если не хотите получать в качестве ответов программы из неведомых Вам операторов, не пишите сюда больше. Пишите в Turbo Pascal, Pascal ABC (который без .NET) или в общий раздел паскаля.

Теперь по поводу вопроса темы.

Во-первых, какого чёрта Вы влезли в Pascal ABC.NET, если "Ваша" программа для Turbo Pascal?

Во-вторых, Вы хотя бы палец о палец ударить не пробовали? Программа содержит опечатки и ненужные элементы интерфейса. Либо опечатки были в том месте, откуда Вы скопипастили "Вашу" программу, либо Вы сами наваляли ошибок при перепечатывании. После устранения опечаток и выкидывания ненужных операторов "Ваша" программа прекрасно работает в любом диалекте паскаля, в том числе, и в Pascal ABC.NET.

Исправленная программа:
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
68
Const
  r=10;
Var 
  a, a1: array [1..r, 1..r] of real;
  b, b1, x: array [1..r] of real;
  i, j, n, i1, j1: integer; 
  d, d1, s: real;
Begin 
  Repeat
    write(' Введите размерность системы n='); 
    readln(n);
    if n>r then writeln('   Задаваемая размерность должна быть не более 10');
  until(n<=r);
  writeln('   Введите коэффициенты матрицы А и В'); 
  For i:=1 To n Do 
    begin
      For j:=1 To n Do 
        begin 
          write ('    a[',i,',',j,']=');
          read (a[i,j]);
          a1[i,j]:=a[i,j];
        end;
      write ('b[',i,']=');
      readln (b[i]);
      b1[i]:=b[i];
    end;
  For i:=1 To n Do 
    begin 
      d:=a[i,i];
      For j:=i To n Do a[i,j]:=a[i,j]/d; 
      b[i]:=b[i]/d;
      For i1:=(i+1)To n Do 
        begin 
          d:=a[i1,i];
          For j1:=i To n Do a[i1,j1]:=a[i1,j1]-d*a[i,j1]; 
          b[i1]:=b[i1]-b[i]*d;
        end; 
    end; 
  Writeln;
  Writeln('   Результат прямого хода метода Гаусса'); 
  for i:=1 to n do 
    begin
      for j:=1 to n do write('    ',a[i,j]:8:4);
      writeln ('',b[i]:8:4); 
    end;
  writeln;
  x[n]:=b[n]/a[n,n];
  For i:=(n-1)DownTo 1 Do 
    begin 
      s:=0;
      For j:=(i+1) To n Do s:=s+a[i,j]*x[j]; 
      x[i]:=b[i]-s;
    end; 
  writeln;
  writeln('   Корни уравнения:'); 
  writeln;
  For i:=1 To n Do writeln('  x[',i,']=',x[i]:0:4); 
  writeln;
  writeln('   Результаты проверки решения системы'); 
  writeln;
  for i:=1 to n do 
    begin 
      s:=0;
      for j:=1 to n do s:=s+a1[i,j]*x[j];
      writeln('   Погрешность',i,'-го уравнения=',(s-b1[i]):0:6); 
    end;
  readln;
End.
Код отформатировал по-человечески. То, что Вы выложили, глаза режет.
1
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 120
07.01.2025, 18:44  [ТС]
Спасибо! Только код программы не компилируется, проблема с циклом for.
0
 Аватар для agvego5
48 / 39 / 10
Регистрация: 18.09.2023
Сообщений: 256
07.01.2025, 19:09
Цитата Сообщение от Grigorji Посмотреть сообщение
код программы не компилируется
скачайте программу с сайта PascalABC.NET:
https://pascalabc.net/ssyilki-dlya-skachivaniya
0
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 120
07.01.2025, 19:36  [ТС]
Оттуда и скачивал. Вот что пишет у меня.
Миниатюры
Метод Гаусса  
0
 Аватар для XzzzX
405 / 280 / 120
Регистрация: 09.07.2021
Сообщений: 1,016
Записей в блоге: 1
07.01.2025, 19:48
так это предупреждения компиляции, а не ошибки компиляции

Добавлено через 1 минуту
почитайте это чтобы минимално разобраться как писать на PascalABC.NET без атавизмов Turbo Pascal

https://habr.com/ru/articles/783740/
0
 Аватар для agvego5
48 / 39 / 10
Регистрация: 18.09.2023
Сообщений: 256
07.01.2025, 19:57
Цитата Сообщение от Grigorji Посмотреть сообщение
пишет у меня
внизу прочитайте:
Компиляция прошла успешно.

и 14 предупреждений = будет работать с предупреждениями, и даже правильно,...но возможны ошибки
просто перейдите внизу на вкладку "Окно вывода"

чтобы убрать предупреждения нужно в конструкции:
for i := 1 to n do
после слова for добавить var
вот так:
for var i := 1 to n do

а вверху где вы описывали переменные, убрать буквы i и j

вам же volvo поисправлял в "Метод Зейделя"
0
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,455
07.01.2025, 20:15
Grigorji, если Вы ещё не поняли: Pascal ABC.NET - это не паскаль, это .NET-язык на основе паскаля. То, что Вас так по-уродски учат, не наша вина.

Просто не обращайте внимания на предупреждения компилятора, они относятся к неведомым Вам особенностям Pascal ABC.NET. Фиг с ними, с жёлтыми восклицательными знаками, им Вас не учили. Пусть программа выполняется, как может.
0
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,455
12.01.2025, 01:48
На всякий случай, решение СЛАУ методом Гаусса с выбором главного элемента, с проверкой на возможность решения и с печатью невязок, для Pascal ABC.NET:
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
##
  var n := ReadlnInteger('Введите количество уравнений СЛАУ:');
  'Введите расширенную матрицу СЛАУ построчно:'.Println;
  var t := ReadMatrReal(n, n+1); //исходная расширенная матрица СЛАУ
  'Расширенная матрица СЛАУ:'.Println;
  t.Println;
  var a := Copy(t); //рабочая расширенная матрица СЛАУ
  //***** прямой проход метода Гаусса *****
  var eps := 1E-100; //максимальное значение модулей коэффициентов, принимаемых за 0
  for var k := 0 to n - 1 do
    begin
      //выбор главного элемента
      var m := a.Col(k).Select(x -> abs(x)).ToArray.IndexMax(k);
      if m > k then a.SwapRows(m, k);
      //проверка СЛАУ на возможность решения
      if abs(a[k,k]) < eps then
        begin
          'СЛАУ имеет бесконечное множество решений или несовместима'.Println;
          Halt
        end;
      //обнуление столбцов
      for var i := k + 1 to n - 1 do
        begin
          var d := a[i,k] / a[k,k];
          a[i,k] := 0;
          for var j := k + 1 to n do a[i,j] -= a[k,j] * d
        end
    end;
  //печать треугольной матрицы
  'Расширенная матрица СЛАУ, приведённая к треугольному виду:'.Println;
  a.Println;
  //***** обратный проход метода Гаусса *****
  var x := a.Col(n); //массив для корней СЛАУ, пока равен столбцу свободных членов
  for var i := n - 1 downto 0 do //цикл поиска корней СЛАУ
    begin
      for var j := i + 1 to n - 1 do x[i] -= x[j] * a[i,j];
      x[i] /= a[i,i]
    end;
  //печать корней СЛАУ
  'Корни СЛАУ:'.Println;
  for var i := 0 to n - 1 do $'x[{i+1}] = {x[i]}'.Println;
  //вычисление и печать невязок
  'Невязки по строкам СЛАУ:'.Println;
  for var i := 0 to n - 1 do
    begin
      var error := t[i,n];
      for var j := 0 to n - 1 do error -= t[i,j] * x[j];
      error.Println
    end
Можно, в принципе, не использовать массив t, но тогда невязки будут некорректными: модули их значений будут занижены, поскольку при вычислениях не будут учтены ошибки округления, внесённые в коэффициенты при прямом проходе метода Гаусса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2025, 01:48
Помогаю со студенческими работами здесь

Метод Гаусса
Надо написать программу по методу гаусса. матрицу надо вводить в вручную!!!!

Метод Гаусса
1. Нужно сделать вывод промежуточных матриц до вывода корней. uses crt; var a:arrayof real; b:array of real; x:array of real; ...

Метод Гаусса
ПОМОГИТЕЕ пожалуйста разобраться с программой! Я новичок в этом деле. Нужно защитить программу в преподавателя, а я не понимаю, что...

Метод Гаусса
Помогите плз, не знаю как решать задачи такого типа: Решить систему линейных алгебраических уравнений методом Гаусса ...

Метод Гаусса
Нужно запрограммировать метод Гаусса,я как только начинаю понимать-пытаюсь решить и тут же сразу запутываюсь


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru