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

Класс для динамических матриц. После ввода элементов матрицы программа аварийно закрывается - C++

Восстановить пароль Регистрация
 
MahovIV
5 / 6 / 1
Регистрация: 17.09.2013
Сообщений: 337
15.03.2014, 20:32     Класс для динамических матриц. После ввода элементов матрицы программа аварийно закрывается #1
В программе я создал класс, отвечающий за ввод и вывод динамической матрицы. Однако после ввода элементов матрицы программа аварийно закрывается. В чём причина?
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
#include <iostream> 
#include <conio.h>
using namespace std;
 class MyClass //Îáúÿâèëè ГЄГ«Г*Г±Г± MyClass
    {
               int **a; // ГіГЄГ*Г§Г*òåëü Г*Г* ГіГЄГ*Г§Г*òåëü Г*Г* ГІГЁГЇ double
 
     int N, M, i, j;
     public:
       void Show() //ÔóГ*êöèÿ ГўГ*óòðè ГЄГ«Г*Г±Г±Г* (ìåòîä ГЄГ«Г*Г±Г±Г*)
         {
          cin >> N >> M;
         }
       MyClass() //ГЉГ®Г*ñòðóêòîð. ГЉГ®Г*ñòðóêòîð ГўГ±ГҐГЈГ¤Г* èìååò ГІГ® æå èìÿ, Г·ГІГ® ГЁ ГЄГ«Г*Г±Г±
         { 
           
a = new int* [N];
                           for(i = 0; i < N; i++)
 
      a[i] = new int[M];
 
                           }
                           void Vvod() {
      for(i = 0; i < N; i++) {
                     for(j = 0; j < M; j++) {
                           cin >> a[i][j];
                           }
                           }
                           }
                           void Vivod() {
                                for(i = 0; i < N; i++) {
                                      for(j = 0; j < M; j++) {
                                            cout << a[i][j] << " ";
                                            }
                                            cout << "\n";
                                            }
                                            }
                           ~MyClass() {
                                      for(i = 0; i < N; i++)
 
       delete []a[i];
   delete []a;
}
   } obj1,obj2; // 2 îáúåêòГ* ГІГЁГЇГ* MyClass
  int main() 
   {
     obj1.Show();
     obj1.Vvod();
     obj1.Vivod();
 
     getch(); //ÎæèäГ*ГҐГ¬ Г*Г*Г¦Г*ГІГЁГҐ Enter
     
    return 0; 
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2014, 20:32     Класс для динамических матриц. После ввода элементов матрицы программа аварийно закрывается
Посмотрите здесь:

C++ Класс "Матрица" для нахождения суммы, разности, умножения матриц и суммы элементов матрицы.
Закрывается, а не выполняется программа после нажатия enter C++
Программа закрывается после первой команды C++
Программа для поиска седловых точек матрицы перестала работать после добавления функции ввода C++
Программа закрывается сразу после отработки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
15.03.2014, 20:52     Класс для динамических матриц. После ввода элементов матрицы программа аварийно закрывается #2
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
#include <iostream> 
#include <conio.h>
using namespace std;
class MyClass{
    int **a; // указатель на указатель на тип double
    int N, M;
public:
    MyClass(int x,int y){
        N = x;
        M = y;
        a = new int*[N];
        for (int i = 0; i < N; i++)
            a[i] = new int[M];
    }
    void Vvod() {
        for (int i = 0; i < N; i++) 
            for (int j = 0; j < M; j++) 
                cin >> a[i][j];
    }
    void Vivod() {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++)
                cout << a[i][j] << " ";
            cout << "\n";
        }
    }
    ~MyClass(){
        for (int i = 0; i < N; i++)
            delete[]a[i];
        delete[]a;
    }
};
 
int main(){
    int N, M;
    cin >> N >> M;
    MyClass obj1(N, M);
    obj1.Vvod();
    obj1.Vivod();
    system("pause");
    return 0;
}
Добавлено через 5 минут
В полях класса не нужны рабочие индексы i и j. Конструктор лучше сделать с двумя параметрами - размерами матрицы.
MahovIV
5 / 6 / 1
Регистрация: 17.09.2013
Сообщений: 337
15.03.2014, 20:53  [ТС]     Класс для динамических матриц. После ввода элементов матрицы программа аварийно закрывается #3
А можно ли сделать так, чтобы можно было ввести N и M из класса?

Добавлено через 43 секунды
Задача такая.
Создать класс прямоугольных динамических матриц, переопределить базовые операции над ними (сложение, вычитание, умножение, транспонирование…). Размерность матрицы должна задаваться при создании элемента класса. Резервирование и освобождение памяти регулируется конструктором и деструктором класса. Написать программу, демонстрирующую возможности созданного класса.
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
15.03.2014, 21:03     Класс для динамических матриц. После ввода элементов матрицы программа аварийно закрывается #4
Цитата Сообщение от MahovIV Посмотреть сообщение
Размерность матрицы должна задаваться при создании элемента класса.
Так и происходит в строке 37. MyClass obj1(N, M);
А в случае с твоим методом void Show такого не происходит. В задании не требуется, чтобы размер матрицы вводился в методе класса.

Если сильно хочется)) Но вообще так не очень логично делать. И еще, обычно большие реализации методов выносят из интерфейса класса.
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
#include <iostream> 
#include <conio.h>
using namespace std;
class MyMatrix{
    int **a; // указатель на указатель на тип double
    int N, M;
public:
    MyMatrix();
    void Vvod();
    void Vivod();
    ~MyMatrix();
};
 
int main(){
    MyMatrix obj1;
    obj1.Vvod();
    obj1.Vivod();
    system("pause");
    return 0;
}
 
MyMatrix::MyMatrix(){
    cout << "Enter N and M : ";
    cin >> N >> M;
    a = new int*[N];
    for (int i = 0; i < N; i++)
        a[i] = new int[M];
}
void MyMatrix::Vvod() {
    cout << "Enter Matrix: " << endl;
    for (int i = 0; i < N; i++)
    for (int j = 0; j < M; j++)
        cin >> a[i][j];
}
void MyMatrix::Vivod() {
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++)
            cout << a[i][j] << " ";
        cout << "\n";
    }
}
MyMatrix::~MyMatrix(){
    for (int i = 0; i < N; i++)
        delete[]a[i];
    delete[]a;
}
MahovIV
5 / 6 / 1
Регистрация: 17.09.2013
Сообщений: 337
18.03.2014, 15:52  [ТС]     Класс для динамических матриц. После ввода элементов матрицы программа аварийно закрывается #5
Цитата Сообщение от fishec Посмотреть сообщение
Размерность матрицы должна задаваться при создании элемента класса. Так и происходит в строке 37. MyClass obj1(N, M);
А в случае с твоим методом void Show такого не происходит. В задании не требуется, чтобы размер матрицы вводился в методе класса.
Если сильно хочется)) Но вообще так не очень логично делать. И еще, обычно большие реализации методов выносят из интерфейса класса.
Спасобо. При сложении матриц не отображается правильный результат. Как тут можно исправить?
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
#include <iostream> 
#include <conio.h>
using namespace std;
class MyMatrix{
    int **a, **sum; // ГіГЄГ*Г§Г*òåëü Г*Г* ГіГЄГ*Г§Г*òåëü Г*Г* ГІГЁГЇ double
    int N, M;
public:
    MyMatrix();
    void Vvod();
    void Summa();
    void Null();
    void Vivod();
    ~MyMatrix();
};
 
int main(){
    MyMatrix obj1, obj2;
    obj1.Vvod();
    obj1.Null();
    obj1.Vvod();
    obj1.Vivod();
    obj2.Vvod();
    obj2.Summa();
    obj2.Vivod();
    system("pause");
    return 0;
}
 
MyMatrix::MyMatrix(){
    cout << "Enter N and M : ";
    cin >> N >> M;
    a = new int*[N];
    for (int i = 0; i < N; i++)
        a[i] = new int[M];
        sum = new int*[N];
        for(int i = 0; i < N; i++) {
              sum[i] = new int[M];
              }
              }
void MyMatrix::Vvod() {
    cout << "Enter Matrix: " << endl;
    for (int i = 0; i < N; i++)
    for (int j = 0; j < M; j++)
        cin >> a[i][j];
            
}
void MyMatrix::Vivod() {
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++)
            cout << a[i][j] << " ";
        cout << "\n";
    }
    for(int i = 0; i < N; i++) {
                for(int j = 0; j < M; j++) {
                 sum[i][j] = sum[i][j] +  a[i][j];
                 }
                 }  
    for(int i = 0; i < N; i++) {
             for(int j = 0; j < M; j++) {
                     cout << sum[i][j] << " ";
                     }
                     cout << "\n";
                     }
}
void MyMatrix::Summa() {
     for(int i = 0; i < N; i++) {
                                      for(int j = 0; j < M; j++) {
                                              sum[i][j] = sum[i][j] + a[i][j];
                                              }
                                              }
                     }
                     void MyMatrix::Null() {
                                      for(int i = 0; i < N; i++) {
                                              for(int j = 0; j < N; j++) {
                                                      sum[i][j] = 0;
                                                      }
                                                      }
                                                      }
MyMatrix::~MyMatrix(){
    for (int i = 0; i < N; i++)
        delete[]a[i];
    delete[]a;
    for(int i = 0; i < N; i++) {
            delete[]sum[i];
            }
            delete[]sum;
}
Yandex
Объявления
18.03.2014, 15:52     Класс для динамических матриц. После ввода элементов матрицы программа аварийно закрывается
Ответ Создать тему
Опции темы

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