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

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

30.10.2008, 20:51. Показов 22069. Ответов 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 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru