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

Программа для решения СЛАУ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В массиве действительных чисел получить последовательность http://www.cyberforum.ru/cpp-beginners/thread611676.html
Вот задание... Нужно написать ее в BORLAND помогите плиз, очен надо))) потрудитесь перепечатать задание на форум Зарание всех благодарю! В массиве действительных чисел размером M*N получить последовательность b1,b2,…,bm где bk ∑ квадратов элементов к строки, модули которой лежат в промежутке .
C++ Измерение времени while (Message.message!=WM_QUIT) { if(PeekMessage(&Message, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&Message); DispatchMessage (&Message); } else { dt=/*Здесь надо измерить время от предыдущего шага цикла, дошедшего до рендеринга. Шаги главного цикла с обработкой сообщений не учитывать.*/ http://www.cyberforum.ru/cpp-beginners/thread611646.html
Двумерный массив C++
Задан двумерный динамический массив размером NxM.Определить количество размерных элементов матрицы (т.е повторяющиеся элементы считать один раз) (реализовать при помощи ф-ции пользователя) Нужна помощь , вообще не шарю
Игра очень долго инициализируется и система принимает это за мёртвое зависание C++
Как то ещё, кроме потоков, с этим можно бороться?
C++ Выделение памяти http://www.cyberforum.ru/cpp-beginners/thread611625.html
Нубский вопрос, но не могу до конца разобраться. Допустим, есть простое определение переменной: int ival = 1024; Когда и как производится выделение под неё памяти? Из книжки Липпмана: "определение переменной заставляет компилятор выделить в памяти область, достаточную для хранения переменной типа int, связать с этой областью имя ival и поместить туда значение 1024". В каком смысле...
C++ Шаблон функций Написать шаблон функции для поиска среднего арифметического значений массива. Всю программу для консоли можете помочь? Экзамен у меня, готов отблагодарить. Добавлено через 6 минут #include <iostream> #include <algorithm> #include <vector> #include <iostream> template <typename T> подробнее

Показать сообщение отдельно
Fedor N
 Аватар для Fedor N
0 / 0 / 0
Регистрация: 22.06.2012
Сообщений: 17
22.06.2012, 13:39     Программа для решения СЛАУ
Здравствуйте,в общем, моя программа решает СЛАУ матричным методом, на основе библиотеки Matrixclass, программа вылетает из-за привышения размера матрицы. И я не могу понять, где ошибка!? Помогите, пожалуйста! В приложенном файле Main, библиотека Matrixclass.h, exe.

Matrixclass.h
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#include <iostream>
#include <stdlib.h>
#include <conio.h>
 
using namespace std;
 
enum ElemStatus {minimal=-5000, maximal};
enum Action {sum=-6000, prod};
enum ConvertType{row, column};
class Matrix
{
    private:
        // Размеры массива
        unsigned xsize, ysize;
        // Указатель на начало массива в динамической памяти
        double *Array;
      // Флаг временности
      int temporary;
    public:
        // Возвратить размеры матрицы
        unsigned getxsize(void) {return xsize;}
        unsigned getysize(void) {return ysize;}
        void inversion(Matrix &, unsigned);
        // конструктор, заполняет матрицу
        Matrix(unsigned y , unsigned x );
        Matrix(unsigned y , unsigned x , double v );
        // конструктор копирования
        Matrix(Matrix &);
      // Конструктор "скалярной матрицы" xsize=ysize=1
        Matrix(double v);
        // деструктор, вывод "!" для отслеживания вызовов
        //~Matrix(){delete []Array; cout << "!";}
        // "Примитивный" вывод
        void show(void);
      // Последовательный доступ к элементу
      double & operator()(unsigned n) const;
       Matrix & operator*(Matrix& M);
       Matrix & operator()(unsigned n, unsigned v)
       {
           Array[n]=v;
       }
};
 
Matrix::Matrix(unsigned y, unsigned x)
{
    unsigned asize = x*y;
    double v;
    Array = new double[asize];
    xsize = x;
    ysize = y;
   temporary = 0;
    for(unsigned i = 0; i<asize; i++) {
                                  cout<<"Enter "<< i+1 <<" elemet ";
                                  cin>>v;
                                  Array[i] = v;
                                  }
}
 
void inversion(Matrix &A, unsigned N)
{
    unsigned temp;
    unsigned p[2];
 
    double **E = new double *[N];
 
    for (int i = 0; i < N; i++)
        E[i] = new double [N];
 
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
        {
            E[i][j] = 0.0;
 
            if (i == j)
                E[i][j] = 1.0;
        }
 
    for (unsigned k = 0; k < N; k++)
    {
        temp = A(k+k);
 
        for (unsigned j = 0; j < N; j++)
        {
            //A.Array[k*j] /= temp;
          A((k*N+j),(A(k*j)/ temp));
            E[k][j] /= temp;
        }
 
        for (unsigned i = k + 1; i < N; i++)
        {
            temp = A(k*i);
 
            for (unsigned j = 0; j < N; j++)
            {
               // A.Array[i*j] -= A(k*j)* temp;
                A((i*N+j),(A(i*j)-(A(k*j)* temp)));
                E[i][j] -= E[k][j] * temp;
            }
        }
    }
 
    for (unsigned k = N - 1; k > 0; k--)
    {
        for (unsigned i = k - 1; i >= 0; i--)
        {
            temp = A(k*i);
 
            for (unsigned j = 0; j < N; j++)
            {
              // A.Array[i*j] -= A(k*j) * temp;
              A((i*N+j),(A(i*j)-(A(k*j)* temp)));
                E[i][j] -= E[k][j] * temp;
            }
        }
    }
 
    for (unsigned i = 0; i < N; i++)
        for (unsigned j = 0; j < N; j++)
         //  A.Array[i*j] = E[i][j];
         {
      A((i*j),E[i][j]);
         }
 
    for (int i = 0; i < N; i++)
        delete [] E[i];
 
    delete [] E;
}
 
Matrix::Matrix(Matrix & M)
{
    xsize = M.xsize;
    ysize = M.ysize;
    unsigned asize = xsize*ysize;
    Array = new double[asize];
            // вычисляем определитель раскладывая по нулевой строке
            for(int k=0; k<asize; k++)
            {
                // заполняем вспомогательную матрицу
                // строки берем из основной матрицы все кроме нулевой
                // столбцы все кроме k-го
                for (unsigned i=0; i<asize-1; i++)
                    for(unsigned j=0; j<asize-1; j++)
                    {
                        if(j<k)
Array[i*j]=M(j*(i+1));
                        else Array[i*j]=M((i+1)*(j+1));
                    };
   temporary = 0;
    if (M.temporary) delete &M;
}
}
 
Matrix::Matrix( double v)
{
    xsize = ysize = 1;
   Array = new double;
    *Array = v;
   temporary = 0;
}
 
void Matrix::show(void)
{
    cout << '\n';
    for (int i = 0; i<ysize; i++)
   {
        for (int j = 0; j<xsize; j++)
                cout << Array[i*xsize+j]<< '\t';
        cout << '\n';
   }
    if (temporary) delete this;
}
double & Matrix::operator()(unsigned n) const
{
    if (n > xsize*ysize)
   {
       cerr << "Index exceeds matrix dimensions!";
       exit(1);
   }
    if (temporary)
   {
       cerr << "Operation is not allowed!";
       exit(1);
   }
    return Array[n-1];
}
 Matrix & Matrix::operator*(Matrix& M)
 {
  // double a;
   if(ysize==M.xsize)
   //реализация алгоритма перемножения матриц
      for(int i=0;i<ysize;i++)
         for(int j=0;j<M.xsize;j++)
            for(int k=0;k<ysize;k++)
               M(i*j) += Array[i*k]*M(k*j);
   else cout<<"Размерности матриц не верны"<<endl;
   return M ;
 
}
 
Matrix::Matrix(unsigned y, unsigned x, double v)
{
   temporary = 0;
     Array[y*x] = v;
}
main()
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
#include <iostream>
#include <conio.h>
#include "Matrixclass.h"
 
using namespace std;
 
int main()
{
   unsigned n;
   cout<<"Enter size matrix: ";
   cin>>n;
   cout<<"Input matrix: "<<endl;
   Matrix A(n,n);
   cout<<"Output matrix: "<<endl;
   A.show();
   cout<<"Output inversion matrix "<<endl;
   inversion(A,n);
   A.show();
   cout<<"Output matrix free elements"<<endl;
   Matrix B(n,1);
   A*B;
   cout<<"Output solution"<<endl;
   B.show();
   cin>>n;
   return 0;
   getch();
 
}
Вложения
Тип файла: rar Курсовая.rar (185.7 Кб, 18 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru