Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.68
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
25.05.2010, 16:39     Функции (Расчет определителя матрицы) #1
Задание: Ввести с клавиатуры матрицу 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();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.05.2010, 16:50     Функции (Расчет определителя матрицы) #2
Цитата Сообщение от 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);
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
25.05.2010, 16:59  [ТС]     Функции (Расчет определителя матрицы) #3
Эти цыклы на всю программу ставить или отдельно писать?
Всеравно выводит ответ 0,00000000, хоть какую матрицу пиши
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.05.2010, 17:01     Функции (Расчет определителя матрицы) #4
Первые три строчки вместо b=(float**)malloc(80*(sizeof(float*)));
Последние три перед getch().
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
25.05.2010, 17:07  [ТС]     Функции (Расчет определителя матрицы) #5
Так и сделал, но ответ выдает 0,000000, может с ф-цией где-от ошибка?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.05.2010, 17:34     Функции (Расчет определителя матрицы) #6
Цитата Сообщение от 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);
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 06:52  [ТС]     Функции (Расчет определителя матрицы) #7
Сделал, как Вы сказали, но теперь, программа вообще не запускается, хотя ошибок не найдено
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 11:37     Функции (Расчет определителя матрицы) #8
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();
}
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 11:55  [ТС]     Функции (Расчет определителя матрицы) #9
Это у меня лаг или чтот о с программой, она так и не запускается?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 11:58     Функции (Расчет определителя матрицы) #10
Что за компилятор? У меня работает.
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 12:14  [ТС]     Функции (Расчет определителя матрицы) #11
А где посмотреть, какой компелятор?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 12:19     Функции (Расчет определителя матрицы) #12
Как программа называется, где ты запускаешь код?
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 13:38  [ТС]     Функции (Расчет определителя матрицы) #13
А, на c++
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
26.05.2010, 13:41     Функции (Расчет определителя матрицы) #14
Это язык программирования, вас же просят сказать название среды, в которой вы работаете.
К примеру, Visual Studio, CodeBlocks и т.д.
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 13:54  [ТС]     Функции (Расчет определителя матрицы) #15
Хм, я понимаю, кем вы сейчас меня считаете, но незнаю как называется, выглядит также, как турбо паскаль (консолька)
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 13:55     Функции (Расчет определителя матрицы) #16
Я уже догадался, Borland C 3.0 наверное)
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 14:01  [ТС]     Функции (Расчет определителя матрицы) #17
Может быть)
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 14:23     Функции (Расчет определителя матрицы) #18
Однако делаО_о
15.6 У меня проблемы с компилятором Turbo C. Программа аварийно
завершается, выдавая нечто вроде "floating point formats not linked."

О: Некоторые компиляторы для мини-эвм, включая Turbo C (а также
компилятор Денниса Ритчи для PDP-11), не включают поддержку операций
с плавающей точкой, когда им кажется, что это не понадобится.
В особенности это касается версий printf и scanf, когда для экономии
места не включается поддержка %e, %f, и %g. Бывает так, что
эвристической процедуры Turbo C, которая определяет - использует
программа операции с плавающей точкой или нет, оказывается
недостаточно, и программист должен лишний раз вызвать функцию,
использующую операции с плавающей точкой, чтобы заставить компилятор
включить поддержку таких операций.
Добавь где-небудь после объявления переменных строку z = cos(1.57); к примеру. Потом скажешь, что получилось
Kyter
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 22
26.05.2010, 15:34  [ТС]     Функции (Расчет определителя матрицы) #19
Заработало, но считает не правельно (не тот ответ выдат)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2010, 17:21     Функции (Расчет определителя матрицы)
Еще ссылки по теме:

C++ Исправить код c++ ,нахождение определителя матрицы
C++ считывание и запись определителя матрицы
Код вычисления определителя матрицы до 10-го порядка C++

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

Или воспользуйтесь поиском по форуму:
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 17:21     Функции (Расчет определителя матрицы) #20
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;
}
Yandex
Объявления
26.05.2010, 17:21     Функции (Расчет определителя матрицы)
Ответ Создать тему
Опции темы

Текущее время: 12:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru