Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/92: Рейтинг темы: голосов - 92, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 3

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

08.12.2009, 09:39. Показов 17617. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решить задание методом Гауса и сложить, и наладить програму на языке Pascal которая реализует введение выходных данных, вычисление заданной системы уравнений методом Гаусса.

P.S. идет три примера просто слились все в одну строчку.
Изображения
   
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.12.2009, 09:39
Ответы с готовыми решениями:

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

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

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

21
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
04.04.2013, 18:10
У меня другой вопрос. Предлагаю код проги вычисления СЛАУ методом Гаусса, но необходимо после ПРЯМОГО ХОДА и ДО ОБРАТНОГО вывести результат после полученных преобразований, т.е. матрицу, полученную в результате ПРЯМОГО ХОДА. Вот код:
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
program gauss;
{Решение СЛАУ по методу Гаусса}
 
uses crt;
const num=5;
var a: array [1..num,1..num] of real;
    b, x: array [1..num] of real;
    n, i, j, k: integer;
       delenie: real;
begin
 clrscr;
 writeln('Введите колич-во неизвестных величин:');
 readln(n);
 writeln;
 
 writeln('Вводите коэфф-ты матpицы A по стpокам нажимая ENTER:');
  for i:=1 to n do
   begin
    for j:=1 to n do
        read(a[i,j]);
   end;
   writeln;
   writeln('Введите вектоp В свободных членов:');
    for i:=1 to n do
     read (b[i]);
 
  writeln;
  writeln('Расширеная матрица:');
  for i:=1 to n do
   begin
    for j:=1 to n do
        write (a[i, j]:5:3,' ':2);
        write (b[i]:5:3,' ':2);  
        writeln;
   end;
    writeln;
 
    writeln('---------ПРЯМОЙ ХОД---------');
    for i:=1 to n-1 do
      begin
       for k:=i+1 to n do
        begin
         delenie:= a[k,i] / a[i,i];
          for j:=i+1 to n do
              a[k,j]:= a[k,j] - a[i,j] * delenie;
              b[k]:= b[k] - b[i] * delenie;
        end;
     end;
    writeln('Вычисляю...');
    writeln;
 
    writeln('---------ОБРАТНЫЙ ХОД---------');
    for i:=n downto 1 do
     begin
      for j:= i+1 to n do
          b[i]:= b[i] - a[i,j] * x[j];
          x[i]:= b[i] / a[i,i];
     end;
    writeln('Вычисляю...');
    writeln;
 
    writeln('ОТВЕТ:');
    for i:=1 to n do
     writeln('X[',i:1,']=', x[i]:1:2);
 
   readkey;
 
end.
ПОМОГИТЕ ПОЖАЛУЙСТА!
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
04.04.2013, 19:36
Да вывести нет проблем, только вывод показывает неверное вычисление, которое вам вряд ли исправить, раз матрицу не можете вывести
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
69
70
71
72
73
74
75
76
program gauss;
{Решение СЛАУ по методу Гаусса}
 
uses crt;
const num=5;
var a: array [1..num,1..num] of real;
    b, x: array [1..num] of real;
    n, i, j, k: integer;
       delenie: real;
begin
 clrscr;
 writeln('Введите колич-во неизвестных величин:');
 readln(n);
 writeln;
 
 writeln('Вводите коэфф-ты матpицы A по стpокам нажимая ENTER:');
  for i:=1 to n do
   begin
    for j:=1 to n do
        read(a[i,j]);
   end;
   writeln;
   writeln('Введите вектоp В свободных членов:');
    for i:=1 to n do
     read (b[i]);
 
  writeln;
  writeln('Расширеная матрица:');
  for i:=1 to n do
   begin
    for j:=1 to n do
        write (a[i, j]:5:3,' ':2);
        write (b[i]:5:3,' ':2);
        writeln;
   end;
    writeln;
 
    writeln('---------ПРЯМОЙ ХОД---------');
    for i:=1 to n-1 do
      begin
       for k:=i+1 to n do
        begin
         delenie:= a[k,i] / a[i,i];
          for j:=i+1 to n do
              a[k,j]:= a[k,j] - a[i,j] * delenie;
              b[k]:= b[k] - b[i] * delenie;
        end;
     end;
    writeln('Вычисляю...');
    writeln;
    writeln('Результат прямого хода:');
  for i:=1 to n do
   begin
    for j:=1 to n do
        write (a[i, j]:5:3,' ':2);
        write (b[i]:5:3,' ':2);
        writeln;
   end;
    writeln;
    writeln('---------ОБРАТНЫЙ ХОД---------');
    for i:=n downto 1 do
     begin
      for j:= i+1 to n do
          b[i]:= b[i] - a[i,j] * x[j];
          x[i]:= b[i] / a[i,i];
     end;
    writeln('Вычисляю...');
    writeln;
 
    writeln('ОТВЕТ:');
    for i:=1 to n do
     writeln('X[',i:1,']=', x[i]:1:2);
 
   readkey;
 
end.
1
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
05.04.2013, 15:18
Цитата Сообщение от Puporev Посмотреть сообщение
Да вывести нет проблем, только вывод показывает неверное вычисление
Уже нашел ошибку! Вот так получаетсяя ступенчатый результат :
Pascal
1
2
3
4
5
6
7
8
9
10
11
 writeln('---------ПРЯМОЙ ХОД---------');
    for i:=1 to n-1 do {Строки}
     begin
      for k:=i+1 to n do {Стобцы}
       begin
        delenie:= -1*(a[k,i] / a[i,i]); 
         for j:=1 to n do
             a[k,j]:= a[k,j] + a[i,j] * delenie; 
             b[k]:= b[k] + b[i] * delenie; 
       end;
    end;
0
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
15.04.2013, 10:21
Как элегантно обойти ошибку деления на 0, если ведущий элемент матрицы = 0? Самое банальное, что я придумал - это присвоить ведущему элементу значение константы, которая равна что-то типа этого: 0.0000001.
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
program Gauss1;
{Решение СЛАУ по методу Гаусса. 1-ый способ}
{Есть ошибка "Деление на 0" при вводе матрицы
0  2  6
2  4  3
0  3  4 }
 
uses crt;
const num=5;
      c=0.00000001; {Константа для обхода деления на 0}
var a: array [1..num,1..num] of real;
    b, x: array [1..num] of real;
    n, i, j, k: integer;
           delenie: real;
begin
 clrscr;
 
 writeln('Решение СЛАУ по методу Гаусса.');
 writeln;
 writeln('Введите колич-во неизвестных величин и нажмите ENTER:');
 readln(n);
 writeln;
 
 writeln('Вводите коэфф-ты матpицы A по стpокам нажимая ENTER:');
   for k:=1 to n do
    for j:=1 to n do
     begin
      write ('a[',k,',',j,']=');
      read(a[k,j]);
     end;
  writeln;
   writeln('Введите вектоp В свободных членов нажимая ENTER:');
    for k:=1 to n do
     begin
      write ('b[',k,']=');
      read (b[k]);
     end;
 
  writeln;
  writeln('Расширеная матрица:');
  for i:=1 to n do
   begin
    for j:=1 to n do
        write (a[i, j]:5:3,' ':2); {Вывод матрицы с отступами}
        write (b[i]:5:3,' ':2); {Вывод вектора с отступами}
        writeln;
   end;
  writeln;
 
    writeln('---------ПРЯМОЙ ХОД---------');
    for i:=1 to n-1 do {Строки}
     begin
      for k:=i+1 to n do {Стобцы}
       begin
[B]        if a[i,i]=0 then a[i,i]:=c; {Обход деления на 0}[/B]
        delenie:= -1*(a[k,i] / a[i,i]); {Элемент след. урав-я делим на элемент ведущего урав-я и умнож. на -1}
         for j:=1 to n do {Еще счетчик}
             a[k,j]:= a[k,j] + a[i,j] * delenie; {К след. уравнению прибавляем ведущее...}
             b[k]:= b[k] + b[i] * delenie; {и умножаем на рез-тат деления}
       end;
    end;
    writeln('Вычисляю...');
    writeln;
    writeln('Результат прямого хода:');
    for i:=1 to n do
      begin
       for j:=1 to n do
        write (a[i, j]:5:3,' ':2); {Выводим на экран...}
        write (b[i]:5:3,' ':2); {результат прямого хода}
        writeln;
      end;
    writeln;
 
    writeln('---------ОБРАТНЫЙ ХОД---------');
    for i:=n downto 1 do
     begin
      for j:= i+1 to n do
          b[i]:= b[i] - a[i,j] * x[j]; {Раскурчиваем уравнение...}
          x[i]:= b[i] / a[i,i]; {в обратном порядке}
     end;
    writeln('Вычисляю...');
    writeln;
 
    writeln('ОТВЕТ:');
    for i:=1 to n do
     writeln('X[',i:1,']=', x[i]:1:2, '.');
 
   readkey;
end.
Есть еще способ к строке матрицы, где ведущий элемент = 0 прибавить другую строку, умноженную на любое число кроме 0. Но как это реализовать? Помогите пжста.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.04.2013, 10:27
Цитата Сообщение от Shman Посмотреть сообщение
Как элегантно обойти ошибку деления на 0, если ведущий элемент матрицы = 0?
В этом случае делается обмен данной строки со строкой ниже, имеющей максимальный элемент в данном столбце.
Если обмен не возможен, система не определена

Добавлено через 2 минуты
Если интересно, посмотрите это
https://www.cyberforum.ru/post585123.html
0
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
15.04.2013, 10:34
Цитата Сообщение от Puporev Посмотреть сообщение
В этом случае делается обмен данной строки со строкой ниже, имеющей максимальный элемент в данном столбце.
А если все первые элементы в каждой строке равны 0 и поэтому переставлять не имеет смысла?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.04.2013, 11:00
Естественно нет, просто первый корень вообще не определен

Добавлено через 1 минуту
Решайте
0x+2y=6
0x-3y=5

Добавлено через 48 секунд
Или
0x+2y=6
0x+2y=6
0
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
15.04.2013, 11:12
Цитата Сообщение от Puporev Посмотреть сообщение
Естественно нет, просто первый корень вообще не определен

Добавлено через 1 минуту
Решайте
0x+2y=6
0x-3y=5
y=3;
y=-5/3.

Цитата Сообщение от Puporev Посмотреть сообщение
Добавлено через 48 секунд
Или
0x+2y=6
0x+2y=6
y=3;
y=3.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.04.2013, 11:17
А чему равен х? Это же система из 2х уравнений.

Добавлено через 58 секунд
А у должен иметь 1 корень, уравнения же линейные.
0
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
15.04.2013, 11:37
Цитата Сообщение от Puporev Посмотреть сообщение
А чему равен х? Это же система из 2х уравнений.

Добавлено через 58 секунд
А у должен иметь 1 корень, уравнения же линейные.

Тогда X не определен?
Кстати, твой архив "Гаусс с перестановкой и процедурой.rar" не открывается . Поврежден .

Пытался придумать свой вариант переустановки строк, но программа виснет во время обратного хода. Как тут правильно над расписать, а то запарился уже :
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
...
var tmp, tmp2: real;
...
    writeln('---------ПРЯМОЙ ХОД---------');
    for i:=1 to n-1 do {Строки}
     begin
      for k:=i+1 to n do {Стобцы}
       begin
        if a[i,i]=0 then
        begin
         for i:=1 to n do
         for j:=1 to n do
          tmp:=A[i,i];
          A[i,i]:=A[i,j];
          A[i,j]:=tmp;
         begin
          for i:=1 to n do
           tmp2:=B[i];
           B[i]:=B[i+1];
           B[i+1]:=tmp2;
         end;
        end;
        delenie:= -1*(a[k,i] / a[i,i]); {Элемент след. урав-я делим на элемент ведущего урав-я и умнож. на -1}
         for j:=1 to n do {Еще счетчик}
             a[k,j]:= a[k,j] + a[i,j] * delenie; {К след. уравнению прибавляем ведущее...}
             b[k]:= b[k] + b[i] * delenie; {и умножаем на рез-тат деления}
       end;
    end;
    writeln('Вычисляю...');
    writeln;
    writeln('Результат прямого хода:');
    for i:=1 to n do
      begin
       for j:=1 to n do
        write (a[i, j]:5:3,' ':2); {Выводим на экран...}
        write (b[i]:5:3,' ':2); {результат прямого хода}
        writeln;
      end;
    writeln;
...
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.04.2013, 11:55
Цитата Сообщение от Shman Посмотреть сообщение
Кстати, твой архив "Гаусс с перестановкой и процедурой.rar" не открывается . Поврежден .
Нормальный архив, у меня скачался и открылся.
0
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
15.04.2013, 13:09
Цитата Сообщение от Puporev Посмотреть сообщение
Нормальный архив, у меня скачался и открылся.
Скачивал несколько раз.

Значит помощи с переустановкой строк не будет?
Миниатюры
Решение СЛАУ методом Гаусса  
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.04.2013, 13:13
Ну сделал новый архив...
Вложения
Тип файла: zip Гаусс с перестановкой и процедурой.zip (6.6 Кб, 75 просмотров)
0
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
15.04.2013, 13:22
Цитата Сообщение от Puporev Посмотреть сообщение
Ну сделал новый архив...
Не открывается! Ты, блин, чем пакуешь? Если 7zipом и нестандартным алгоритмом, то winrar это не понимает.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.04.2013, 13:32
Цитата Сообщение от Shman Посмотреть сообщение
Ты, блин, чем пакуешь?
Это ты блин безрукий и чтобы я тебя больше не слышал.
0
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
15.04.2013, 13:42
Цитата Сообщение от Puporev Посмотреть сообщение
Это ты блин безрукий и чтобы я тебя больше не слышал.
Да ты сам попробуй свой архив Оперой v12.14 скачать и WinRARом v4.20 распаковать прежде чем посылать! Увидишь что я прав! Послать всегда можно, а разобраться? Лень?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.04.2013, 13:46
Я за пять лет первый архив выложил, а ты первый кто попробовал его скачать.
0
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
15.04.2013, 13:56
Снова перекачал в Опере архив, пытался открыть 7zipом, не открывается.
Миниатюры
Решение СЛАУ методом Гаусса   Решение СЛАУ методом Гаусса  
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.04.2013, 14:00
Попробуй сейчас
Вложения
Тип файла: rar Гаусс с перестановкой и процедурой.rar (6.6 Кб, 113 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.04.2013, 14:00
Помогаю со студенческими работами здесь

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

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

Решение СЛАУ система решений алгебраических уравненийметодм гаусса
Program Gauss; uses crt; const e=0.000001; const f=4; type yy=array of real; tt=array of real; var n,i,j,k:integer;...

Решение СЛАУ методом Зейделя
const n=4; eps=0.0001; type matrix=array of real; mas=array of real; var a:matrix; b,x,f:mas; i,j:integer; ...

Решение СЛАУ методом Холецкого
В Паскале совсем новичок, не могу разобраться с типом данных, если в начале задать переменные типа real, то пишет ошибку: Неверная...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru