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

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

25.05.2010, 16:39. Показов 5550. Ответов 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
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,302
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
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,302
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
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,302
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
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,302
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
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,302
26.05.2010, 11:58
Что за компилятор? У меня работает.
0
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 12:14  [ТС]
А где посмотреть, какой компелятор?
0
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,302
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
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,302
26.05.2010, 13:55
Я уже догадался, Borland C 3.0 наверное)
0
0 / 0 / 1
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 14:01  [ТС]
Может быть)
0
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,302
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
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,302
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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru