Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
MahovIV
5 / 6 / 4
Регистрация: 17.09.2013
Сообщений: 337
1

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

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

В программе я создал класс, отвечающий за ввод и вывод динамической матрицы. Однако после ввода элементов матрицы программа аварийно закрывается. В чём причина?
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2014, 20:32
Ответы с готовыми решениями:

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

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

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

Программа компилируется, но после ввода данных просто закрывается
Программа компилируется,но после ввода номера дня она просто закрывается....

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

4
fishec
122 / 121 / 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
MahovIV
5 / 6 / 4
Регистрация: 17.09.2013
Сообщений: 337
15.03.2014, 20:53  [ТС] 3
А можно ли сделать так, чтобы можно было ввести N и M из класса?

Добавлено через 43 секунды
Задача такая.
Создать класс прямоугольных динамических матриц, переопределить базовые операции над ними (сложение, вычитание, умножение, транспонирование…). Размерность матрицы должна задаваться при создании элемента класса. Резервирование и освобождение памяти регулируется конструктором и деструктором класса. Написать программу, демонстрирующую возможности созданного класса.
0
fishec
122 / 121 / 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
MahovIV
5 / 6 / 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2014, 15:52

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

Программа для поиска седловых точек матрицы перестала работать после добавления функции ввода
есть программа для на поиска седловых точек матрицы (Максимальный элемент в...

Программа аварийно завершается после оператора scanf
Такая проблема. Я начинающий. Занимаюсь уже вторую неделю. Написал такой код,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru