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

Проблемы с классами при поиске обратной матрицы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ 'лементарная графика в dev cpp http://www.cyberforum.ru/cpp-beginners/thread835437.html
Подскажите как поменять цвет(заливку, а не контур(линию)) квадрата (вписанного в окружность-вдруг это важно)с использованием graphics.h (среда- dev cpp)?
C++ Изменение части текста Здравствуйте, кто-нибудь знает с помощью какого инструмента в Windows Form Application (Label, TextBox и т.д.) можно обеспечить изменение цвета, или какое либо другое форматирование только части текста (одного символа, или слова). и как это можно сделать.. Заранее спасибо!) http://www.cyberforum.ru/cpp-beginners/thread835423.html
C++ Ошибка после закрытия формы
Как можно избавиться от этой ошибки?
C++ Раннее и позднее связывание
Вот компилятор статическую функцию как бы компилирует ранним связыванием, а динамическую - поздним. Во многих учебниках говорят, что если есть функция раннего связывания, то её адрес в памяти известен на этапе компиляции. Я чё то не могу понять, как может быть известен адрес функции на этапе компиляции. Нет, конечно понятно, что Ahead компиляторы сразу преобразуют исходный код в машинный код...
C++ м. Симпсона. Не выводит на экран значение интеграла http://www.cyberforum.ru/cpp-beginners/thread835391.html
Здравствуйте! подскажите пожалуйста, почему у меня не выводит значение "I1" на экран. ввожу а и б, дальше кол-во разбиений, после точность.. и все встает( __________________ #include <iostream> #include <math.h> using namespace std;
C++ Не видна дробная часть числа Поставил MVS 2012, возникла проблема - Не видна дробная часть числа! Пишу простой код : double a; a = 2/3; std::cout<<a; выводит 0 =-O подробнее

Показать сообщение отдельно
Seemann92
5 / 5 / 0
Регистрация: 12.04.2013
Сообщений: 45
12.04.2013, 01:10     Проблемы с классами при поиске обратной матрицы
Доброго времени суток!
Задача такова. Необходимо создать класс, который создавал бы матрицу заданного размера (квадратную), рассчитывал её определитель и находил обратную матрицу.
Нашёл необходимые функции здесь и вот здесь. После того, как вставил код в описание класса, обратная матрица стала рассчитываться некорректно. Тестировал на матрице размером 3х3. Последний столбец рассчитывается правильно, остальные нет. Если прописать данный код вне класса (причём и создание матрицы тоже), всё работает как надо. Подскажите, пожалуйста, в чём здесь проблема.

Класс СMatrix:
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
#define R 9
 
class CMatrix{
double mas[R][R], E[R][R];
double kst, temp;
int n, p, t;
public:
        CMatrix(int);
        int Opr();
        void Inversion();
};
 
CMatrix::CMatrix(int N){
        n=N;
        randomize();
        cout<<"Ishodnaya matriza: "<<endl;
        for (int i=0; i<n; i++){
                for (int j=0; j<n; j++){
                        mas[i][j]=random(100);
                        cout<<mas[i][j]<<"\t";
                }
                cout<<endl;
        }
        cout<<endl;
}
 
int CMatrix::Opr(){
        p=0;
    for (int i=0; i<n-1; i++){
        t=1;
        while(mas[i][i]==0){
            for(int j=0; j<n; j++){
                mas[i][j]=kst;
                mas[i][j]=mas[i+t][j];
                mas[i+t][j]=kst;
            }
            p++;
            t++;
        }
        for (int k=i+1; k<n; k++){
            kst=mas[k][i]/mas[i][i];
            for(int j=0; j<n; j++)
                mas[k][j]-=mas[i][j]*kst;
        }
    }
    kst=pow(-1.0, p);
    for(int i=0; i<n; i++)
        kst*=mas[i][i];
    cout<<"Opredelitel': "<<kst;
        if (kst) return 1;
        else return 0;
}
 
void CMatrix::Inversion(){
        for (int i=0; i<n; i++)
                for (int j=0; j<n; j++){
                        if (i==j) E[i][j]=1.0;
                        else E[i][j]=0.0;
                }
        for (int k=0; k<n; k++){
                temp=mas[k][k];
                for (int j=0; j<n; j++){
                        mas[k][j]/=temp;
                        E[k][j]/=temp;
                }
                for (int i=k+1; i<n; i++){
                        temp=mas[i][k];
                        for (int j=0; j<n; j++){
                                mas[i][j]-=mas[k][j]*temp;
                                E[i][j]-=E[k][j]*temp;
                        }
                }
        }
        for (int k=n-1; k>0; k--){
                for (int i=k-1; i>=0; i--){
                        temp=mas[i][k];
                        for (int j=0; j<n; j++){
                                mas[i][j]-=mas[k][j]*temp;
                                E[i][j]-=E[k][j]*temp;
                        }
                }
        }
        cout<<endl<<"Obratnaya matriza:\n";
        for (int i=0; i<n; i++){
                for (int j=0; j<n; j++)
                        cout<<E[i][j]<<"\t";
                cout<<endl;
        }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru