0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 13
1

Решение СЛУ методом Жордана-Гаусса, заменить массив на динамический

14.05.2015, 00:09. Показов 3059. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
#include <iostream>
#include <iomanip>
#include <stdlib.h>
 
using namespace std;
 
class Jordan{
    private:
        int NEQ, N1;
        float A[50][50];
    public:
        Jordan(){
            NEQ=1;
            N1=1;
            for (int i=0;i<=NEQ;i++){
                for(int j=0;j<=N1;j++){
                    A[i][j]=0;
                }
            }
        }
        void setJordan(){
        cout<<"Number of equations : ";
        cin>>NEQ;
        N1=NEQ+1;
            if(N1>50){
        cout<<"***SIZE OF INPUT MATRIX "<<NEQ<<" EXCEEDS ";
        cout<<"ALLOWED MATRIX SIZE ***"<<endl;
        exit(0);
    }
        cout<<"ENTER INPUT MATRIX : "<<endl;
         for(int i=1;i<=NEQ;i++){
           for(int j=1;j<=N1;j++){
            cin>>A[i][j];
                }
            }
        }
        void doCalculate(){
            int N, j, i;
            float D,D1;
            for(N=1;N<=NEQ;N++){
                if(A[N][N]==0){
                    cout<<endl<<"*** DIAGONAL ZERO ELEMENT APPEAR";
                    cout<<N<<" DURING EXECUTION ***"<<endl;
                    exit(0);
                }
                D=(1/A[N][N]);
                for(j=1;j<=N1;j++){
                    A[N][j]=D*A[N][j];
                }
                for(i=1;i<=NEQ;i++){
                    if(i==N){
                        i=i+1;
                    }
                    D1=A[i][N];
                    for(j=1;j<=N1;j++){
                        A[i][j]=A[i][j]-D1*A[N][j];
                    }
                }
                    A[N][N]=1;
                }
                cout<<endl<<"OUTPUT"<<endl<<endl;
        for(i=1;i<=NEQ;i++){
            for(j=1;j<=N1;j++){
                cout<<setprecision(2)<<setw(5)<<A[i][j];
            }
            cout<<endl;
        }
    }
};
int main(){
    Jordan jo;
    jo.setJordan();
    jo.doCalculate();
    
}
Этот код полностью рабочий, но мне нужна сделать динамический массив. И когда я пытаюсь запустить программу с этим динамическим массивом при вводе данных она вылетает. Нужен совет, как правильно заменить статический массив на динамический в этой программе.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2015, 00:09
Ответы с готовыми решениями:

Решение СЛУ методом Гаусса
Напишите плз прогу, которая будет решать слу методом Гаусса. #include &quot;stdafx.h&quot; #include...

Delphi Решение СЛУ Методом Жордана-Гаусса
Привет, форум. Нуждаюсь в вашей помощи. Т.к. я - новичок до мозга костей в delphi, одному...

Решение системы линейных уравнений методом Гаусса и Жордана-Гаусса
Помогите пожалуйста начала работать сначала работать с методом Гаусса, но в Unit2 Delphi ругается...

Решение СЛУ методом Гаусса
Программа не работает,посмотрите пожалуйста procedure TForm1.Button1Click(Sender: TObject); var...

6
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
14.05.2015, 01:01 2
А по руски немогли написать?

Добавлено через 4 минуты
код ужасный зачем прям в класе писали...

Добавлено через 17 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private:
       int NEQ, N1;
     float **A;
public:
   Jordan(){
cout<<"Введите кол-во строк: "<<endl;
cin>>NEQ;
  cout<<"Введите кол-во неизвестных в строке: "<<endl; 
cin>>N1;
 matrix=new float *[ NEQ];
    for (int i=0; i< NEQ; i++)
   matrix[i]=new float [N1+1];
    for (int v=0; v< NEQ; v++){
        for (int j=0; j<N1; j++){
 
           cin>>matrix[v][j];
        }
    {
 
 }
Добавлено через 4 минуты
что-то вроде этого я так примерно не понятный код ,и я незнаю что делает эта программа кстате в деструкторе delete память осоодить там цикл for надо будет
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 13
18.05.2015, 12:41  [ТС] 3
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
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <Windows.h>
 
using namespace std;
class Jordan{
    private:
        int NEQ, N1;
        float **A;
    public:
        Jordan(){
            NEQ=1;
            N1=1;
            A=new float *[NEQ];
            for (int i = 0; i<NEQ; i++){ 
                A[i] = new float [N1];}
            for (int i=0;i<=NEQ;i++){
                for(int j=0;j<=N1;j++){
                    A[i][j]=0;
                }
            }
        }
        
void setJordan(){
        cout<<"Введите количество уравнений : ";
        cin>>NEQ;
        N1=NEQ+1;
        cout<<"Введите матрицу : "<<endl;
            A=new float *[NEQ];
            for (int i = 0; i<NEQ; i++)
           { A[i] = new float [N1];}
         for(int i=1;i<=NEQ;i++){
           for(int j=1;j<=N1;j++){
            cin>>A[i][j];
                }
            }
        }
        
void doCalculate(){
            int N, j, i;
            float D,D1;
            for(N=1;N<=NEQ;N++){
                if(A[N][N]==0){
                    cout<<endl<<"*** НУЛЕВОЙ ЭЛЕМЕНТ НА ДИАГОНАЛИ ";
                    cout<<N<<" ВО ВРЕМЯ ВЫПОЛНЕНИЯ ***"<<endl;
                    exit(0);
                }
                D=(1/A[N][N]);
                for(j=1;j<=N1;j++){
                    A[N][j]=D*A[N][j];
                }
                for(i=1;i<=NEQ;i++){
                    if(i==N){
                        i=i+1;
                    }
                    D1=A[i][N];
                    for(j=1;j<=N1;j++){
                        A[i][j]=A[i][j]-D1*A[N][j];
                    }
                }
                    A[N][N]=1;
                }
                cout<<endl<<"ВЫВОД"<<endl<<endl;
        for(i=1;i<=NEQ;i++){
            for(j=1;j<=N1;j++){
                cout<<setprecision(2)<<setw(5)<<A[i][j];
            }
            cout<<endl;
        }
    }
 
};
 
 
 
int main(){ 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Jordan jo;
    jo.setJordan();
    jo.doCalculate();
    return 0;
    system("pause");
}
Вот такой код и прога просто вылетает. Да знаю, что нет деструктора и все в классе понапихано, но мне нужно в первую очередь понять, как сделать динамический массив, а тогда уже буду редактировать код.
0
60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
18.05.2015, 13:40 4
А что ты хочешь, создавая массив размером 1x1?
0
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
18.05.2015, 13:45 5
Эм почитай про индексирование в массивах
0
60 / 60 / 53
Регистрация: 17.02.2013
Сообщений: 242
18.05.2015, 14:09 6
Цитата Сообщение от Черный мечник Посмотреть сообщение
Эм почитай про индексирование в массивах
А что вы скажете насчёт выделения памяти? Я точно не помню, но память, выделенная под массив 1x1 в конструкторе так и останется неиспользованной. А повторное выделение ищет новый блок. Я прав или нет?

Хм, решение системы линейных уравнений. Мне кажется, алгоритм неточен.
0
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
18.05.2015, 14:29 7
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
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <Windows.h>
 
using namespace std;
class Jordan{
    private:
        int NEQ, N1;
        float **A;
    public:
        Jordan(); 
        ~Jordan();
        void setJordan();        
        void doCalculate();
};
 
 Jordan::Jordan()
  {
    NEQ=1;
    N1=1;
    // объявление двумерного динамического массива на NEQxN1 элементов:
    A=new float *[NEQ];
    for (int i = 0; i<NEQ; i++)
          A[i] = new float [N1];
      for (int i=0;i<NEQ;i++)    //заполняем его нулями
         for(int j=0;j<N1;j++)
             { 
                 A[i][j]=0;
             }
                 
  }
 
 Jordan::~Jordan()
 {
  for (int count = 0; count < NEQ; count++)    //Высвобождаем память
              delete [] A[count]; 
 }
 void Jordan::setJordan()
   {
      for (int count = 0; count < NEQ; count++)    //Высвобождаем память выделенную в конструкторе    
              delete [] A[count]; 
        cout<<"Введите количество уравнений : "; //вводим новые размеры масива данные
        cin>>NEQ;
        N1=NEQ+1;
        cout<<"Введите элементы матрицу : "<<endl;
           A=new float *[NEQ];
           for (int i = 0; i<NEQ; i++)
              A[i] = new float [N1];
        for(int i=0;i<NEQ;i++)       //вводим данные в матрицу
           for(int j=0;j<N1;j++)
           {
            cout<<"Введите элемент масивая["<<i<<"]"<<"["<<j<<"]=";
            cin>>A[i][j];
           }
   }
 void  Jordan::doCalculate()
 {
   float D,D1;
   for(int N=0;N<NEQ;N++)
      {
         if(A[N][N]==0)
                   {
                         cout<<endl<<"*** НУЛЕВОЙ ЭЛЕМЕНТ НА ДИАГОНАЛИ ";
                         cout<<N<<" ВО ВРЕМЯ ВЫПОЛНЕНИЯ ***"<<endl;
                         exit(0);
                   }
            D=(1/A[N][N]);
           for(int j=0;j<N1;j++)
             {
               A[N][j]=D*A[N][j];
             }
           for(int i=0;i<NEQ;i++)
                 {
                       if(i==N)
                            {
                            //  i=i+1;  //Ошибка тут из-за нее вылет программы проверти
                            }
                     D1=A[i][N];
                    for(int j=0;j<N1;j++)
                            {
                               A[i][j]=A[i][j]-D1*A[N][j];
                             }
                  }
          A[N][N]=1;
       }
    cout<<endl<<"ВЫВОД"<<endl<<endl;
      for(int i=0;i<NEQ;i++)
        for(int j=0;j<N1;j++)
          cout<<setprecision(2)<<setw(5)<<A[i][j];
             cout<<endl;
}
int main()
{ 
    setlocale(LC_ALL,"Rus");
    // SetConsoleCP(1251);
    //SetConsoleOutputCP(1251);
    Jordan jo;
    jo.setJordan();
    jo.doCalculate();
    system("pause");
    return 0;
}
Добавлено через 4 минуты
я не знаю какие результаты должна выдовать программа...
но я вытошил все определения методов за клас добавил овобождения... и кое как запустил оргаритм программы...проверти его
0
18.05.2015, 14:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2015, 14:29
Помогаю со студенческими работами здесь

Решение СЛУ методом Гаусса
Написать программу, реализующую алгоритм Гаусса для решения линейных систем

Решение СЛУ методом Гаусса
Не работает, помогите найти проблему procedure TForm1.Button1Click(Sender: TObject); var ...

Решение СЛАУ методом Гаусса-Жордана
Прошу вас помочь мне с портированием программы решения СЛАУ методом исключений Гаусса-Жордана с С++...

Решение СЛАУ методом Жордана Гаусса
Доброго времени суток! Помогите пожалуйста с программой, не могу понять как исправить ошибку....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru