Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
6 / 7 / 4
Регистрация: 17.09.2013
Сообщений: 337
1

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

15.03.2014, 20:32. Показов 1019. Ответов 4
Метки нет (Все метки)

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
#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; 
 }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2014, 20:32
Ответы с готовыми решениями:

Программа закрывается после ввода массива
Доброго времени суток, помогите, пожалуйста, поправить код. Опыт программирования = 0. В visual...

Программа сразу после ввода закрывается
Ввела код { int buf; int a; int n,i; cin &gt;&gt; n; for (int i=0; i&lt;n; i++) {...

Почему после ввода переменной программа закрывается?
#include&lt;iostream&gt; using namespace std; int main() { int n, a=10,b, g=1; ...

Программа компилируется, но после ввода данных просто закрывается
Программа компилируется,но после ввода номера дня она просто закрывается. #include &lt;iostream&gt;...

4
126 / 125 / 62
Регистрация: 07.09.2013
Сообщений: 343
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. Конструктор лучше сделать с двумя параметрами - размерами матрицы.
0
6 / 7 / 4
Регистрация: 17.09.2013
Сообщений: 337
15.03.2014, 20:53  [ТС] 3
А можно ли сделать так, чтобы можно было ввести N и M из класса?

Добавлено через 43 секунды
Задача такая.
Создать класс прямоугольных динамических матриц, переопределить базовые операции над ними (сложение, вычитание, умножение, транспонирование…). Размерность матрицы должна задаваться при создании элемента класса. Резервирование и освобождение памяти регулируется конструктором и деструктором класса. Написать программу, демонстрирующую возможности созданного класса.
0
126 / 125 / 62
Регистрация: 07.09.2013
Сообщений: 343
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;
}
0
6 / 7 / 4
Регистрация: 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;
}
0
18.03.2014, 15:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.03.2014, 15:52
Помогаю со студенческими работами здесь

После ввода данных программа закрывается, не показав ответ (Dev C++)
Ребят помогите!!!! работаю в dev c++, после ввода суммы просто закрывает командную стоку и ответа...

После ввода первой строки программа дает ошибку и закрывается
#include&lt;iostream&gt; #include&lt;cstring&gt; #include&quot;stdio.h&quot; using namespace std; struct strk{ char...

Программа аварийно закрывается
Доброе время суток. Проблема такова. Я учусь Языку Си. Тут по книге написал маленький код. Весь...

Программа закрывается после ввода данных
У меня такая проблема: При вводе данных первый раз нормально всё вводится, а начиная со второго не...


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

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