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

Неправильно считает определитель - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить А в степени n http://www.cyberforum.ru/cpp-beginners/thread1174717.html
Дан массив размером n×n, элементы которого целые числа.Вычислить А^n, где n – натуральное число
C++ Подсчитать количество слов списка, которые начинаются и заканчиваются одной и той же буквой Как написать программу с функциями, которая подсчитывает количество слов списка Р, которые: а)начинаются и заканчиваются одной и той же буквой; б)начинаются с той же буквы, на которую заканчивается предыдущее слово; в)совпадают с последним словом? http://www.cyberforum.ru/cpp-beginners/thread1174716.html
Аналог С функции fread и fwrite в С++ C++
Здравствуйте, какие есть аналоги функций fread() fwrite в С++?
Выделить отдельные слова в строке и записать их в массив C++
Задано строку из трех слов. Выделить отдельные слова и записать их в массив, рассортировав по количеству букв (по возрастанию). Вывести массив слов на экран.
C++ Транспонирование матрицы для размера NxM http://www.cyberforum.ru/cpp-beginners/thread1174656.html
Есть класс матрица, делаю метод "транспонирование", и вообщем проблема в том, что программа нормально работает для матриц NxN, а вот для NxM нет. Помогите решить проблему. Метод: Matrix Matrix::transpose() { Matrix t(Cols, Rows); // это конструктор, он создает новую матрицу, как в нее вернуть правильную матрицу размером NxM for(int i = 0; i < Rows; i++) for(int j = 0; j < Cols; j++)...
C++ Программа с использованием цикла Даны положительные числа A и B (A> B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A. подробнее

Показать сообщение отдельно
Max161995
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 15
13.05.2014, 17:59     Неправильно считает определитель
Подскажите,пожалуйста,почему моя программа неправильно находит определители после замены jго столбца столбцом свободных членов.Матрицу системы считает правильно.Определитель нахожу обнулением элементов ниже главной диагонали.
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include "stdafx.h"
#include "iostream"
#include "cmath"
using namespace std;
void input(float**A,float*B,float**C,int n);
void preobr(float**A,int n);
float determinant(float**A,int n);
void obmen(float**A,float*B,float**C,float*d,int n);
void korni(float**A,float*d,int n);
 
int main(int argc, char* argv[])
{int n;
 printf("Razmernost: ");
 cin>>n;
 float**A=new float*[n];
 for (int i=0;i<n;i++)
     A[i]=new float[n];
 float *B=new float[n];
 
 float**C=new float*[n];
 for (int i=0;i<n;i++)
     C[i]=new float[n];
 float *d=new float[n];
 
 input(A,B,C,n);
 preobr(A,n);
 cout<<"opr raven "<<determinant(A,n)<<"\n\n";
 obmen(A,B,C,d,n);
 korni(A,d,n);
 system ("pause");
 return 0;
}
void input(float**A,float*B,float**C,int n)
{int i,j;bool w=true;
while(w!=false)
   {
      printf("Vvod matrici A: \n");
      for(i=0;i<n;i++)
        {
          for(j=0;j<n;j++)
            {
              cin>>A[i][j];
            }
        }
      w=false;
      for(i=0;i<n;i++)
        {
          if(A[i][i]==0)
            {
              printf("\n\n->Na diagonali estj 0!;\n->Vvedite matricu zanovo!\n\n");
              w=true;
            }
        }
   }
 
 //ввели матрицу А
 printf("\n Matrica A: \n\n");
 for(i=0;i<n;i++)
   {
     for(j=0;j<n;j++)
     printf("%6.2f\t",A[i][j]);
     printf("\n\n");
   }
 
 for (i=0;i<n;i++)
     for (j=0;j<n;j++)
         C[i][j]=A[i][j];
 
 
 //Ввели вектор-столбец В
 printf("Vvod matrici B: \n");
 for(i=0;i<n;i++)
   {
     cin>>B[i];
   }
 
 printf("\n Matrica B: \n\n");
 for(i=0;i<n;i++)
   {
     printf("%6.2f\t",B[i]);
     printf("\n");
   }
}
void preobr(float**A,int n)
{int i,j,k=0;float kf;
    for(i=0;i<n-1;i++)
     for(k=i+1;k<n;k++)
       {
         kf=A[k][i]/A[i][i];
         A[k][i]=0;
         for(j=i+1;j<n;j++)
           {
             A[k][j]=A[k][j]-kf*A[i][j];
           }    
     }
cout<<"\nMatrica preobraz \n\n";
for (i=0;i<n;i++)
{for (j=0;j<n;j++)
cout<<"\t"<<A[i][j];
cout<<"\n\n";}
 
}
float determinant(float**A,int n)
{int i,j;
float det=1;
if (n==2)
det=A[0][0]*A[1][1]-A[1][0]*A[0][1];
else
{
    for (i=0;i<n;i++)
      for (j=0;j<n;j++)
          if (i==j)
              det=det*A[i][j];}
  return det;}
void obmen(float**A,float*B,float**C,float*d,int n)
{int i,j;
for (int i=0;i<n;i++)
     for (int j=0;j<n;j++)
         A[i][j]=C[i][j];
    for (j=0;j<n;j++)
 {
     cout<<"\nZamena v A "<<j+1<<" stolbca na B \n\n";
     for (i=0;i<n;i++)
         A[i][j]=B[i];
for (int i=0;i<n;i++)
{for (int j=0;j<n;j++)
cout<<"\t"<<A[i][j];
cout<<"\n\n";}
preobr(A,n);
cout<<"opr raven "<<determinant(A,n)<<"\n\n";
d[j]=determinant(A,n);
for (int i=0;i<n;i++)
     for (int j=0;j<n;j++)
         A[i][j]=C[i][j];}
}
void korni(float**A,float*d,int n)
{for (int i=0;i<n;i++)
cout<<"x"<<i+1<<" = "<<d[i]/determinant(A,n);}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru