Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/83: Рейтинг темы: голосов - 83, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 23.09.2011
Сообщений: 14

Вычисление определителя матрицы

23.09.2011, 20:36. Показов 17411. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемы форумчане! Помогите, пожалуйста, найти ошибку в программе. Она должна считать определитель матрицы любого порядка (но я её ограничил 5-им, т.к. мне этого достаточно).

Вводимая матрица:
0 8 1 2 -3
-8 -9 9 0 9
-5 -2 3 -1 0
-9 5 -8 7 -6
1 -7 2 2 0

Её определитель должен быть равен 28557. Однако программа выдает совершенно другое значение, и близко не подходящее к данному. С другими матрицами ситуация аналогичная, хотя на некоторых она работает почти правильно (отличается либо знак, либо наличие дробной части (это, скорее всего, из-за деления)). Буду очень благодарен за помощь в решении этой проблемы...

Файлы программы - во вложении.

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
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
matr = array [1..5, 1..5] of real;
rslt = array[1..5] of real;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure matr_init(var matrix: matr);
begin
//Инициализация определителя матрицы
 matrix[1, 1] := 0;
 matrix[1, 2] := 8;
 matrix[1, 3] := 1;
 matrix[1, 4] := 2;
 matrix[1, 5] := -3;
 
 matrix[2, 1] := -8;
 matrix[2, 2] := -9;
 matrix[2, 3] := 9;
 matrix[2, 4] := 0;
 matrix[2, 5] := 9;
 
 matrix[3, 1] := -5;
 matrix[3, 2] := -2;
 matrix[3, 3] := 3;
 matrix[3, 4] := -1;
 matrix[3, 5] := 0;
 
 matrix[4, 1] := -9;
 matrix[4, 2] := 5;
 matrix[4, 3] := -8;
 matrix[4, 4] := 7;
 matrix[4, 5] := -6;
 
 matrix[5, 1] := 1;
 matrix[5, 2] := -7;
 matrix[5, 3] := 2;
 matrix[5, 4] := 2;
 matrix[5, 5] := 0;
end;
 
function DivZero(var A: matr; rozm: integer):matr;
var temp1, temp2: matr;
i, j: byte;
begin
 //Перестановка 1 и 2 строк местами
  for j:=1 to rozm do
   begin
    temp1[1, j] := A[1, j];
    temp2[2, j] := A[2, j];
   end;
 
  for j:=1 to rozm do
   begin
    A[1, j] := temp2[2, j];
    A[2, j] := temp1[1, j];
   end;
 
 Result := A;
end;
 
function DetN(var A: matr; rozm: integer):real; //Функция нахождения определителя
var i, j:integer;
temp: Matr;
del: real;
begin
 
while rozm <> 3 do //Понижение порядка от rozm до 3-го
begin
 
 if A[1, 1] = 0 then a := DivZero(A, rozm); //Если первый элемент равен 0, то переставляем 1 и 2 строки
   del := a[1, 1];
 
for i:=2 to rozm do
 begin
 for j:=2 to rozm do
  begin
   temp[i-1, j-1] := (a[1, 1] * a[i, j] - a[i, 1] * a[1, j]) / del; //Понижение порядка до 3-го
  end;
 end;
 
 a := temp;
 
 rozm := rozm - 1;
 
end; {while}
 
 if rozm = 3 then
 begin
 //Расчёт определителя 3 на 3
 Result := del * (a[1,1]*a[2,2]*a[3,3]+a[1,2]*a[2,3]*a[3,1]
          +a[2,1]*a[3,2]*a[1,3]-a[1,3]*a[2,2]*a[3,1]
          -a[2,1]*a[1,2]*a[3,3]-a[1,1]*a[2,3]*a[3,2]); 
 end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var matrica: matr;
begin
 matr_init(matrica);
 Memo1.Lines.Append(FloatToStr(DetN(matrica, 5)));
end;
 
end.
Вложения
Тип файла: rar 1.rar (167.2 Кб, 266 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.09.2011, 20:36
Ответы с готовыми решениями:

Пошаговое вычисление определителя матрицы в Delphi
Помогите пожалуйста отобразить на форме каждый шаг выполнения(вычисления) определителя матрицы)

Вычисление определителя
У меня есть программа, которая вычисляет определитель матрицы пошагово. Все замечательно, но нет главного, при занулении нужно отобразить...

Вычисление определителя 3-го порядка
Напишите пожалуйста код программы в delphi, для вычисления определителя 3-го порядка по правилу треугольника. Заранее спасибо.

1
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
24.09.2011, 11:35
Посмотри эту программу, когда-то писал, вроде правильно считает.
Вложения
Тип файла: rar Определитель1.rar (191.7 Кб, 1878 просмотров)
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2011, 11:35
Помогаю со студенческими работами здесь

Нахождение определителя матрицы
Здравствуйте, нужна помощь! У меня есть объект StringGrid он есть матрица порядка от 2 до 5 как можно найти для нее определитель? есть...

Нахождение определителя матрицы
Люди, помогите_)please_ Исходные данные:матрица А размера n*n(n-число в диапазоне от 3 до 5). Разработать программу для нахождения...

Нахождение определителя матрицы
Помогите написать код определения определителя матрицы пожалуйста

Нахождение определителя матрицы генератором перестановок
Привет всем. Мне была дана задача найти определитель матрицы генератором перестановок. Я ее сделал. Но на паскале. НА паскале она работает...

Создать компонент для вычисления определителя матрицы
Здравствуйте!Представляю данную задачу для людей скучающим по вечерам:Создать компонент для вычисления определителя матрицы. P.S.При...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru