Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22

Функции (Расчет определителя матрицы)

25.05.2010, 16:39. Показов 5587. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание: Ввести с клавиатуры матрицу 4*4 и подсчитать ее определитель. Процедуру подсчета определителя оформить в виде функции.
во я написал программу, но она не правельно работает, кто может подскажите в чем ошибка:
C++
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <alloc.h>
 
float mat(float **a, int n)
{ int i,j;
float s,d,f,g;
  i=1;
  j=1;
s=((a[i+2][j+2]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+2])*a[i+1][j+1]-(a[i+2][j+1]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+1])*a[i+1][j+2]+(a[i+2][j+1]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j+1])*a[i+1][j+3]);
d=((a[i+2][j+2]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+2])*a[i+1][j]-(a[i+2][j]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j])*a[i+1][j+2]+(a[i+2][j]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j])*a[i+1][j+3]) ;
f=((a[i+2][j+1]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+1])*a[i+1][j]-(a[i+2][j]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j])*a[i+1][j+1]+(a[i+2][j]*a[i+3][j+1]-a[i+2][j+1]*a[i+3][j])*a[i+1][j+3]);
g=((a[i+2][j+1]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j+1])*a[i+1][j]-(a[i+2][j]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j])*a[i+1][j+1]+(a[i+2][j]*a[i+3][j+1]-a[i+2][j+1]*a[i+3][j])*a[i+1][j+2]);
n=(s*a[i][j])-(d*a[i][j+1])+(f*a[i][j+2])+(g*a[i][j+3]);
 
return(n);
}
 
 
void main ()
{
clrscr();
float **b,z;
int i,j;
b=(float**)malloc(80*(sizeof(float*)));
 
for (i=1;i>4;i++)
{
 for (j=1;j>4;j++)
 {
   scanf("%d",&b[i][j]);
 }
}
z=mat(b,4);
printf("%f",z);
getch();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.05.2010, 16:39
Ответы с готовыми решениями:

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

Нахождение определителя матрицы
Здравствуйте, помогите пожалуйста дописать. Нужно было реализовать в виде модуля, программку, которая выполняет действия над квадратными...

Нахождение определителя матрицы
Здравствуйте! Функция det правильно находит определитель для матрицы temp1, но неправильно для матрицы temp. Подскажите, пожалуйста,...

20
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
25.05.2010, 16:50
Цитата Сообщение от Kyter Посмотреть сообщение
b=(float**)malloc(80*(sizeof(float*)));
=>
C
1
2
3
4
5
6
7
b = (float**)calloc(4, sizeof(float*));
for (i = 0; i < 4; i++)
   b[i] = (float*)calloc(4, sizeof(float));
/*в конце программы*/
for (i = 0; i < 4; i++)
   free(b[i]);
free(b);
0
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22
25.05.2010, 16:59  [ТС]
Эти цыклы на всю программу ставить или отдельно писать?
Всеравно выводит ответ 0,00000000, хоть какую матрицу пиши
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
25.05.2010, 17:01
Первые три строчки вместо b=(float**)malloc(80*(sizeof(float*)));
Последние три перед getch().
1
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22
25.05.2010, 17:07  [ТС]
Так и сделал, но ответ выдает 0,000000, может с ф-цией где-от ошибка?
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
25.05.2010, 17:34
Цитата Сообщение от Kyter Посмотреть сообщение
float mat(float **a, int n)
{ int i,j;
float s,d,f,g;
i=1;
j=1;
s=((a[i+2][j+2]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+2])*a[i+1][j+1]-(a[i+2][j+1]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+1])*a[i+1][j+2]+(a[i+2][j+1]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j+1])*a[i+1][j+3]);
d=((a[i+2][j+2]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+2])*a[i+1][j]-(a[i+2][j]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j])*a[i+1][j+2]+(a[i+2][j]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j])*a[i+1][j+3]) ;
f=((a[i+2][j+1]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+1])*a[i+1][j]-(a[i+2][j]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j])*a[i+1][j+1]+(a[i+2][j]*a[i+3][j+1]-a[i+2][j+1]*a[i+3][j])*a[i+1][j+3]);
g=((a[i+2][j+1]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j+1])*a[i+1][j]-(a[i+2][j]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j])*a[i+1][j+1]+(a[i+2][j]*a[i+3][j+1]-a[i+2][j+1]*a[i+3][j])*a[i+1][j+2]);
n=(s*a[i][j])-(d*a[i][j+1])+(f*a[i][j+2])+(g*a[i][j+3]);
return(n);
}
C
1
2
3
4
5
6
7
8
9
10
11
12
float mat(float **a)
{ int i,j;
float s,d,f,g,det;
 i=0;
 j=0;
s=((a[i+2][j+2]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+2])*a[i+1][j+1]-(a[i+2][j+1]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+1])*a[i+1][j+2]+(a[i+2][j+1]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j+1])*a[i+1][j+3]);
d=((a[i+2][j+2]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+2])*a[i+1][j]-(a[i+2][j]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j])*a[i+1][j+2]+(a[i+2][j]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j])*a[i+1][j+3]) ;
f=((a[i+2][j+1]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+1])*a[i+1][j]-(a[i+2][j]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j])*a[i+1][j+1]+(a[i+2][j]*a[i+3][j+1]-a[i+2][j+1]*a[i+3][j])*a[i+1][j+3]);
g=((a[i+2][j+1]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j+1])*a[i+1][j]-(a[i+2][j]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j])*a[i+1][j+1]+(a[i+2][j]*a[i+3][j+1]-a[i+2][j+1]*a[i+3][j])*a[i+1][j+2]);
det=(s*a[i][j])-(d*a[i][j+1])+(f*a[i][j+2])+(g*a[i][j+3]);
return det;
}
Цитата Сообщение от Kyter Посмотреть сообщение
for (i=1;i>4;i++)
{
for (j=1;j>4;j++)
{
scanf("%d",&b[i][j]);
}
}
C
1
2
3
4
5
6
7
for (i=1;i<4;i++)
{
 for (j=1;j<4;j++)
 {
   scanf("%f",&b[i][j]);
 }
}
Цитата Сообщение от Kyter Посмотреть сообщение
z=mat(b,4);
z=mat(b);
0
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 06:52  [ТС]
Сделал, как Вы сказали, но теперь, программа вообще не запускается, хотя ошибок не найдено
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
26.05.2010, 11:37
C
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <alloc.h>
 
float mat(float **a)
{
   int i, j;
   float s, d, f, g, det;
   i=0;
   j=0;
   s=((a[i+2][j+2]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+2])*a[i+1][j+1]-(a[i+2][j+1]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+1])*a[i+1][j+2]+(a[i+2][j+1]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j+1])*a[i+1][j+3]);
   d=((a[i+2][j+2]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+2])*a[i+1][j]-(a[i+2][j]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j])*a[i+1][j+2]+(a[i+2][j]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j])*a[i+1][j+3]) ;
   f=((a[i+2][j+1]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j+1])*a[i+1][j]-(a[i+2][j]*a[i+3][j+3]-a[i+2][j+3]*a[i+3][j])*a[i+1][j+1]+(a[i+2][j]*a[i+3][j+1]-a[i+2][j+1]*a[i+3][j])*a[i+1][j+3]);
   g=((a[i+2][j+1]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j+1])*a[i+1][j]-(a[i+2][j]*a[i+3][j+2]-a[i+2][j+2]*a[i+3][j])*a[i+1][j+1]+(a[i+2][j]*a[i+3][j+1]-a[i+2][j+1]*a[i+3][j])*a[i+1][j+2]);
   det=(s*a[i][j])-(d*a[i][j+1])+(f*a[i][j+2])+(g*a[i][j+3]);
 
   return det;
}
 
void main ()
{
   clrscr();
   float **b,z;
   int i,j;
 
   b = (float**)calloc(4, sizeof(float*));
   for (i = 0; i < 4; i++)
      b[i] = (float*)calloc(4, sizeof(float));
 
   for (i = 0; i < 4; i++)
   {
      for (j = 0; j < 4; j++)
      {
         scanf("%f",&b[i][j]);
      }
   }
   z=mat(b);
   printf("%.2f",z);
   for (i = 0; i < 4; i++)
      free(b[i]);
   free(b);
   getch();
}
0
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 11:55  [ТС]
Это у меня лаг или чтот о с программой, она так и не запускается?
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
26.05.2010, 11:58
Что за компилятор? У меня работает.
0
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 12:14  [ТС]
А где посмотреть, какой компелятор?
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
26.05.2010, 12:19
Как программа называется, где ты запускаешь код?
0
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 13:38  [ТС]
А, на c++
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
26.05.2010, 13:41
Это язык программирования, вас же просят сказать название среды, в которой вы работаете.
К примеру, Visual Studio, CodeBlocks и т.д.
0
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 13:54  [ТС]
Хм, я понимаю, кем вы сейчас меня считаете, но незнаю как называется, выглядит также, как турбо паскаль (консолька)
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
26.05.2010, 13:55
Я уже догадался, Borland C 3.0 наверное)
0
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 14:01  [ТС]
Может быть)
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
26.05.2010, 14:23
Однако делаО_о
15.6 У меня проблемы с компилятором Turbo C. Программа аварийно
завершается, выдавая нечто вроде "floating point formats not linked."

О: Некоторые компиляторы для мини-эвм, включая Turbo C (а также
компилятор Денниса Ритчи для PDP-11), не включают поддержку операций
с плавающей точкой, когда им кажется, что это не понадобится.
В особенности это касается версий printf и scanf, когда для экономии
места не включается поддержка %e, %f, и %g. Бывает так, что
эвристической процедуры Turbo C, которая определяет - использует
программа операции с плавающей точкой или нет, оказывается
недостаточно, и программист должен лишний раз вызвать функцию,
использующую операции с плавающей точкой, чтобы заставить компилятор
включить поддержку таких операций.
Добавь где-небудь после объявления переменных строку z = cos(1.57); к примеру. Потом скажешь, что получилось
1
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 15:34  [ТС]
Заработало, но считает не правельно (не тот ответ выдат)
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
26.05.2010, 17:21
C
1
2
3
4
5
6
7
8
9
10
11
12
float mat(float **a)
{
   float s, d, f, g, det;
 
   s=(a[1][1]*a[2][2]*a[3][3]+a[2][1]*a[3][2]*a[1][3]+a[3][1]*a[1][2]*a[2][3]-a[3][1]*a[2][2]*a[1][3]-a[1][1]*a[3][2]*a[2][3]-a[2][1]*a[1][2]*a[3][3]);
   d=(a[0][1]*a[2][2]*a[3][3]+a[2][1]*a[3][2]*a[0][3]+a[3][1]*a[0][2]*a[2][3]-a[3][1]*a[2][2]*a[0][3]-a[0][1]*a[3][2]*a[2][3]-a[2][1]*a[0][2]*a[3][3]) ;
   f=(a[0][1]*a[1][2]*a[3][3]+a[1][1]*a[3][2]*a[0][3]+a[3][1]*a[0][2]*a[1][3]-a[3][1]*a[1][2]*a[0][3]-a[0][1]*a[3][2]*a[1][3]-a[1][1]*a[0][2]*a[3][3]);
   g=(a[0][1]*a[1][2]*a[2][3]+a[1][1]*a[2][2]*a[0][3]+a[2][1]*a[0][2]*a[1][3]-a[2][1]*a[1][2]*a[0][3]-a[0][1]*a[2][2]*a[1][3]-a[1][1]*a[0][2]*a[2][3]);
   det=(s*a[0][0])-(d*a[1][0])+(f*a[2][0])-(g*a[3][0]);
 
   return det;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.05.2010, 17:21
Помогаю со студенческими работами здесь

Вычисление определителя матрицы N*N
Дорогие форумчане, никто не подскажет как вычислить определитель квадратной матрицы, сам код не нужен, только алгоритм. Насколько я слышал...

Вычисление следа матрицы и определителя
воббщем надо реализовать вычисление следа матрицы и определителя алгоритм для следа : #include &lt;stdio.h&gt; typedef int *pInt; ...

Считывание и запись определителя матрицы
в файле записан массив , его надо считать и найти его определитель, и записать его в другой файл. программа не хочет считывать данные. ...

Нахождение детерминанта (определителя) матрицы
У меня вот код есть для нахождения детерминанта (определителя) матрицы 5х5 :) а как сделать, чтобы я мог сам ввести данные матрицы? ...

Код вычисления определителя матрицы до 10-го порядка
Мне очень нужен код программы для вычисления определителя матрицы до 10-го порядка.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru