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

Определитель матрицы

30.10.2008, 20:51. Показов 22065. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ помогите,не пойму почему прога не работает:

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
program fav;
const n=3;
var i,j,k:integer;
A:array [1..n,1..n] of real;
detA:real;
pr:real;
begin
writeln('Westi a[i,j]');
for i:=1 to n do
begin
for j:=1 to n do
readln(a[i,j]);
end;
detA:=1;
for k:=1 to n-1 do
begin
if a[k,k]=0 then
begin
i:=k+1;
if a[i,k]=0 then
begin
i:=i+1;
if i>n then
begin
detA:=0;
writeln('Opredelitel raven nylyu');exit;
end;
end;
end
else
for j:=k to n do
begin
pr:=a[i,j];
a[i,j]:=a[k,j];
a[k,j]:=pr;
detA:=-detA;
end;
detA:=a[k,k]*detA;
for j:=k+1 to n do
a[k,j]:=a[k,j]/a[k,k];
a[k,k]:=1;
for i:=k+1 to n do
begin
for j:=k+1 to n do
a[i,j]:=a[i,j]-a[i,k]*a[k,j];
a[i,k]:=0;
end;
if a[n,n]=0 then
detA:=0
else
detA:=a[n,n]*detA;
end;
writeln('detA=',detA:8:6);
end.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2008, 20:51
Ответы с готовыми решениями:

Определитель матрицы
Привет ребят, решите задачу плиз каму не сложно. Задача. Вычислить определитель матрицы ( рекурсия ).очень нужна.Спасибо.

Определитель матрицы
Написать программу вычисления определителя матрицы к-го порядка. k

Найти определитель матрицы
Напишыте плиз прогу (или кусок) которая находить детерминант матрицы NxN, где N вводят с клавиатуры.......... Главное саму формулу...

14
 Аватар для XakER_93
4 / 4 / 0
Регистрация: 16.09.2008
Сообщений: 45
30.10.2008, 23:16
Что ета програма должна делать ????Для чего она????
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
30.10.2008, 23:48
Что ета програма должна делать ????Для чего она????
Человек пытается найти определитель матрицы. Содрал окуда-то кривой код или криво списал, а что делать, понятия не имеет.
0
(Yellow_Duck)
 Аватар для MadMag
1261 / 130 / 15
Регистрация: 16.10.2008
Сообщений: 733
31.10.2008, 02:23
Трансер, ты код оформи нормально, тогда скажу

Добавлено через 31 секунду
надо чтобы не все в одну линию было
0
 Аватар для Joker
18 / 18 / 0
Регистрация: 29.10.2008
Сообщений: 100
31.10.2008, 10:13
что тебе нужно сделать в задаче?
0
1 / 1 / 0
Регистрация: 30.10.2008
Сообщений: 3
01.11.2008, 03:42  [ТС]
Да,действительно я пытаюсь найти опредилитель матрицы,но код я нигде не сдирал и криво не списывал,просто по данному мне алгоритму(данному преподом) написал прогу,и он,увидев ее,сказал что она должна работать,а она увы не хочет и я не могу разобраться в чем дело(наверно ввиду слабоватых знаний в области програмирования)поэтому и прошу помощи....

Добавлено через 1 час 51 минуту 41 секунду
Цитата Сообщение от YeLLoW DucK Посмотреть сообщение
Трансер, ты код оформи нормально, тогда скажу

Добавлено через 31 секунду
надо чтобы не все в одну линию было

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
program fav;
const n=3;
var i,j,k:integer;
A:array [1..n,1..n] of real;
detA:real;
pr:real;
begin
 writeln('Westi a[i,j]');
 for i:=1 to n do
  begin
  for j:=1 to n do
  readln(a[i,j]);
  end;
  detA:=1;
  for k:=1 to n-1 do
   begin
   if a[k,k]=0 then
    begin
    i:=k+1;
    if a[i,k]=0 then
     begin
     i:=i+1;
     if i>n then
      begin
      detA:=0;
      writeln('Opredelitel raven nylyu');exit;
      end;
     end;
    end
    else
    for j:=k to n do
     begin
     pr:=a[i,j];
     a[i,j]:=a[k,j];
     a[k,j]:=pr;
     detA:=-detA;
     end;
     detA:=a[k,k]*detA;
     for j:=k+1 to n do
     a[k,j]:=a[k,j]/a[k,k];
     a[k,k]:=1;
     for i:=k+1 to n do
      begin
      for j:=k+1 to n do
      a[i,j]:=a[i,j]-a[i,k]*a[k,j];
      a[i,k]:=0;
      end;
      if a[n,n]=0 then
      detA:=0
      else
      detA:=a[n,n]*detA;
   end;
   writeln('detA=',detA:8:6);
end.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
01.11.2008, 07:18
Лучший ответ Сообщение было отмечено как решение

Решение

Вы меня конечно извините, но в следующий раз оформляйте код так, чтобы его можно было читать и приводите полное условие Вашей задачи, а то почему код не работает? Ответ: а фиг его знает. Потому что читать такой код никто не будет.
Вообще нахождение определителя лучше оформлять в виде отдельных процедур, тогда четко представляешь как работает программа, в Вашем коде я запутался. Поэтому не буду пытаться исправлять, а предложу свой вариант. Если хотите без процедур, попробуйте разобраться и переделать.
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
program opred;
uses crt;
const n=3;
type
   Tmatr=array [1..n,1..n] of real;
var a:Tmatr;
    det:real;//определитель
//процедура перестановки строк, чтобы главный элемент не оказался 
//нолем или близким к нулю значением
procedure Per(k,n:integer;var a:Tmatr; var p:integer);
var i,j:integer;z:real;
begin
   z:=a[k,k];i:=k;p:=0; //после каждого преобразования
   for j:=k+1 to n do   //ищем по оставшимся строкам
     begin
       if abs(a[j,k])>z then //максимальный по модулю элемент
          begin
            z:=abs(a[j,k]);i:=j; //запоминаем номер строки
            p:=p+1;//считаем количество перестановок, т.к. при каждой 
                    //перестановке меняется знак определителя
          end;
     end;
   if i>k then  //если эта строка ниже данной
   for j:=k to n do
     begin
       z:=a[i,j];a[i,j]:=a[k,j];a[k,j]:=z;//перестановка
     end;
end;
function znak(p:integer):integer;//ф-я определения знака определителя
begin
if p mod 2=0 then //если четное количество перестановок, "+" , если нет "-"
znak:=1 else znak:=-1;
end;
procedure opr(n:integer;var a:Tmatr;var det:real);//собственно определитель
var k,i,j,p:integer;
    r:real;
begin
det:=1;
for k:=1 to n do  //считаем по алгоритму, который во всех учебниках 
   begin
     if a[k,k]=0 then per(k,n,a,p);//если главный элемент=0, делаем перестановку
     det:=znak(p)*det*a[k,k]; //меняем знак определителя
     for j:=k+1 to n do  //делаем преобразования
       begin
         r:=a[j,k]/a[k,k];
         for i:=k to n do
           begin
             a[j,i]:=a[j,i]-r*a[k,i];
           end;
       end;
   end;
end;
begin  //основная программа
clrscr;
//здесь напишете ввод как Вам больше нравится
opr(n,a,det);
write('opr=',det:4:0);
readln
end.
6
1 / 1 / 0
Регистрация: 30.10.2008
Сообщений: 3
01.11.2008, 10:01  [ТС]
спс огромное =)))
1
 Аватар для sk3jtoN
2 / 2 / 0
Регистрация: 18.12.2009
Сообщений: 11
23.05.2010, 08:23
Error 200: Division by zero
Выходит вот такая ошибка. Убрал uses crt и clrscr, все равно выходит.
Код полностью копировал отсюда.
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.05.2010, 08:28
Возможно вводите коэффициенты полностью вырожденной матрицы, в программе такая проверка вроде не предусмотрена. Попробуйте ввести коэффициенты системы, заведомо имеющей решение.

Добавлено через 1 минуту
А может быть(извиняюсь конечно) вообще здесь
begin //основная программа
clrscr;
//здесь напишете ввод как Вам больше нравится
Вот это условие не выполнили и вообще не ввели матрицу?
1
 Аватар для sk3jtoN
2 / 2 / 0
Регистрация: 18.12.2009
Сообщений: 11
23.05.2010, 08:44
Puporev, покажите пожалуйста правильный ввод.
//здесь напишете ввод как Вам больше нравится
Возможно здесь неправильно ввожу.

Добавлено через 4 минуты
Цитата Сообщение от Puporev Посмотреть сообщение
Возможно вводите коэффициенты полностью вырожденной матрицы, в программе такая проверка вроде не предусмотрена. Попробуйте ввести коэффициенты системы, заведомо имеющей решение.

Добавлено через 1 минуту
А может быть(извиняюсь конечно) вообще здесь

Вот это условие не выполнили и вообще не ввели матрицу?
Например вот такую матрицу как ввести:
1 -3 1
-3 1 -1
1 -1 5
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.05.2010, 08:52
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
for i:=1 to 3 do
for j:=1 to 3 do
 begin
 write('a[',i,',',j,']=');
 readln(a[i,j]);
 end;
writeln('Matrica:');
for i:=1 to 3 do
 begin
 for j:=1 to 3 do
 write(a[i,j]:6:2);
 writeln;
 end;
И введите числа, какие хотите.

Добавлено через 1 минуту
Можно и так
Pascal
1
2
3
4
for i:=1 to 3 do
for j:=1 to 3 do
read(a[i,j]);
readln;
здесь вводите по 3 числа в строку, жмете Enter

Добавлено через 3 минуты
Можно матрицу задать константой.
Pascal
1
const a:array[1..3,1..3] of real=((1, -3, 1),(-3, 1, -1),(1, -1, 5));
Можно вообще рандомно
Pascal
1
2
3
4
5
begin
randomize;
for i:=1 to 3 do
for j:=1 to 3 do
a[i,j]:=10*random;
А вообще, не умея ввести матрицу, кто Вам поверит, что Вы написали алгоритм нахождения определителя.
1
 Аватар для sk3jtoN
2 / 2 / 0
Регистрация: 18.12.2009
Сообщений: 11
23.05.2010, 08:55
Puporev большое спасибо.
А я и не говорил, что кто-то должен поверить
0
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 87
16.04.2013, 08:55
Puporev, Введите тест для 2 порядка:
0,2
4,0
должно выдавать -8. а выдает 8.
Могли бы подсказать где ошибка? так как я разобраться не могу
0
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 7
06.12.2015, 09:35
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure opr(n:integer;var a:Tmatr;var det:real);//собственно определитель
var k,i,j,p:integer;
    r:real;
begin
det:=1;
for k:=1 to n do  //считаем по алгоритму, который во всех учебниках 
   begin
     if a[k,k]=0 then per(k,n,a,p);//если главный элемент=0, делаем перестановку
     det:=det*a[k,k]; //меняем знак определителя
     for j:=k+1 to n do  //делаем преобразования
       begin
         r:=a[j,k]/a[k,k];
         for i:=k to n do
           begin
             a[j,i]:=a[j,i]-r*a[k,i];
           end;
       end;
   end;
   det:=znak(p)*det;
end;
поправил функцию. Не нужно вызывать функцию знака на каждом ряду, лучше один раз, в конце, после того, как будет известен определитель. Ибо после двух перестановок, у вас получиться только одно изменение знака, а это уже бага.

а за код спасибо, сэкономил немного времени)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.12.2015, 09:35
Помогаю со студенческими работами здесь

Вычислить определитель матрицы
Как вычислить определитель для матрицы a, где i изменяется от 0 до n-1, j от 0 до N-1?

Определитель матрицы Вандермонда
Задача состоит в следущем: Вводим размер массива,создаем матрицу вандермонда, и вищитиваем определитель.Ребят помогите кто может,очень...

Найти определитель квадратной матрицы
Вот программка,которая находит определитель квадратной матрицы,только не понимаю где ошибка,что он каждый раз делит определитель на 10. ...

Определитель матрицы. Метод Гаусса.
Помогите пожалуйста. Админ привет. это vanHalen с вашего бывшего форума. :-) Задание: Найдите определитеь матрицы n-ого порядка методом...

Нужно найти определитель матрицы
ПОМОГИТЕ ПОЖАЛУЙСТА ДОПОЛНИТЬ ПРОГРАММУ, НУЖНО НАЙТИ ОПРЕДЕЛИТЕЛЬ МАТРИЦЫ, ВЕКТОР НЕВЯЗКИ, ОБРАТНУЮ МАТРИЦУ И Сделать проверку, умножить...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru