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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ArhiDeuZ
0 / 0 / 0
Регистрация: 14.05.2014
Сообщений: 6
#1

Класс "Матрица" - C++

18.05.2014, 23:29. Просмотров 568. Ответов 7
Метки нет (Все метки)

Задача: Описать тип-объект MATRIX (матрица произвольной размерности M*N) и его методы: ввод матрицы; вывод матрицы; дублирование столбцов матрицы, где каждый элемент содержит только неповторяющиеся цифры. Описать тип и методы его потомка MATR (методы: дублирование строк матрицы, где количество нулей среди цифр всех чисел строки равно номеру строки; дублирование столбцов матрицы, где все элементы повторяются одинаковое количество раз ).

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
#include "stdafx.h"
#include <stdlib.h>
#include <iomanip>
#include <cstdlib>
#include <iostream>
using namespace std;
 
class Matrix {
public:
int m,n;
int a[20][20];
Matrix ( );// конструктор
~Matrix ( );// деструктор
void Enter ();
void Display ();
void Dubl ();
};
 
Matrix:: Matrix ( )
{
cout << "Vvod v matrix \n";
cout << "Vvedite kolvo strok: ";
cin >> m;
cout << "Vvedite kolvo stolbcov: ";
cin >> n;
}
 
Matrix:: ~Matrix()
{
//cout << "Deleted...\n";
}
void Matrix :: Enter ( )
{
  int i;
  int j;
  for (i=1; i<=m; i++) 
  {
    for (j=1; j<=n;j++) 
    {
       cout << "Vvod chisel v matricu: " << "a["<<i<<"]["<<j<<"]:" ;
       cin >> a[i][j];
    }
  }
   cout <<"\n";
};
 
void Matrix :: Display ()
{
  int i;
  int j;
  int l=0;
  for (i=1; i<=m; i++)
  {
    for (j=1; j<=n; j++)
    {
       cout << a[i][j] << " ";
    }
    cout << "\n";
  }
  cout << "\n";
  cin >> l;
};
void Matrix :: Dubl ( ) 
{
  int i = 0;
  int j = 0;
  int k = 0;
  int x = 0;
  for (j=1; j<=n;j++) 
  {
    for (i=1;i<=m;i++) 
    {
       k=i;
       for (i=1;i<=m;i++)
       {
           if (a[k][j]!=a[i+1][j])
           {
             x=x+1;
           }
       }
    }
    if (x>=i-1)
    {
     n=n+1;
     for(i=1;i<=m;i++)
      {
        a[i][n+1]=a[i][j];
      }
    }
  }
};
class Matr : public Matrix 
{
public:
    int z;
    int i;
    int j;
void Dubl2 ( );
};
 
void Matr :: Dubl2 () 
{
    for (i=1;i<=m;i++) 
    {
        while (j<n) 
        {
            for (j=1;j<=n+1;j++) 
            {
                if (a[i][j]=0) 
                {
                  z=z+1;
                }
            }
            if (z==i) {
                m+=1;
                for (j=1; j<=n;j++) 
                   {
                      a[m+1][j]=a[i][j];
                   }
            }
              
        }
 
    }
};
 
int prompt_menu_item()
{
    // Выбранный вариант менюж
    int variant;
    cout << "VblBerite variant\n" << endl;
    cout << "1. Vvesti Massiv\n"
         << "2. Vblvesti massiv\n"
         << "3. Dublirovanie stolbcov\n"
         << "4. отсортировать\n"
         << "5. найти среднее кол-во элементов\n"
         << "6. дополнить таблицу\n"
         << "7. выйти\n" << endl;
    cout << ">>> ";
    cin >> variant;
    return variant;
};
 
int main ()
{
    Matrix ob;
    Matr ob2;
    ob.Enter ();
    ob.Display();
    ob.Dubl ();
    ob.Display();
    ob2.Dubl2();
    ob.Display();
};
Метод Display не выводит изменения после метода Dubl и Dubl2

Добавлено через 20 минут
помогите проверить Matrix :: Dubl() и Matrix :: Display () - вывод информации на экран. Приложение консольное
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 23:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс "Матрица" (C++):

Определить базовый класс "Матрица" и класс-потомок "Треугольная матрица" - C++
Нужно определить класс &quot;матрица&quot; с возможностью динамического выделения и освобождения памяти, наполнения матрицы, сохранения и чтения из...

Создать базовый класс "Массив" и класс-наследник "Матрица" - C++
Добрый день! такой вопрос, как задать двумерный массив и заполнить его рандомными числами. и как его реализовать используя абстрактные...

Класс "Матрица". Перегрузка оператора "минус" - C++
Помогите дописать программу или исправить ее. Нужно было написать программу, где создать класс матрицы, используя двухмерный динамический...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
19.05.2014, 00:08 #2
ArhiDeuZ, я не знаю как вы там дублируете, но явно выходите за границы массива.
Да и ввод некорректный. Вы ничего не записываете в нулевой индекс массива. Замените сначала цикл ввода:
C++
1
2
3
4
5
6
7
8
for(int i = 0; i < m; i++) 
{
    for(int j = 0; j < n; j++) 
    {
       cout << "Vvod chisel v matricu: " << "a["<<i<<"]["<<j<<"]:" ;
       cin >> a[i][j];
    }
}
Таким образом меняйте всё остальное. Не увеличивайте размер m и n. Будет выход за границу массива.
Программа зависнет.
0
ArhiDeuZ
0 / 0 / 0
Регистрация: 14.05.2014
Сообщений: 6
19.05.2014, 00:28  [ТС] #3
поменял, изменений никаких. Недавно получил ошибку на ob.Display Необработанное исключение в "0x772e15de" в "laba2.exe": 0xC0000005: Нарушение прав доступа при чтении "0x003c0000". я так и не понял что за ошибка, почему то перестало работать
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
19.05.2014, 00:43 #4
ArhiDeuZ, вы вышли за границы массива.
Грубо говоря, пытались прочитать содержимое незарезервированной ячейки.

Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#include <stdlib.h>
#include <iomanip>
#include <cstdlib>
#include <iostream>
using namespace std;
 
class Matrix {
public:
int m,n;
int a[20][20];
Matrix:: Matrix ( ){}
~Matrix ( ){}// äåñòðóêòîð
void Enter ();
void Display ();
void Dubl ();
};
 
void Matrix :: Enter ( )
{
  cout << "Vvod v matrix \n";
  cout << "Vvedite kolvo strok: ";
  cin >> m;
  cout << "Vvedite kolvo stolbcov: ";
  cin >> n;
  int i;
  int j;
  for (i=0; i<m; i++) 
  {
    for (j=0; j<n;j++) 
    {
       cout << "Vvod chisel v matricu: " << "a["<<i<<"]["<<j<<"]:" ;
       cin >> a[i][j];
    }
  }
   cout <<"\n";
};
 
void Matrix :: Display ()
{
  int i;
  int j;
  int l=0;
  for (i=0; i<m; i++)
  {
    for (j=0; j<n; j++)
    {
       cout << a[i][j] << " ";
    }
    cout << "\n";
  }
  cout << "\n";
};
void Matrix :: Dubl ( ) 
{
  int i = 0;
  int j = 0;
  int k = 0;
  int x = 0;
  for (; j<n;j++) 
  {
    for (;i<m;i++) 
    {
       k=i;
       for (;i<m;i++)
       {
           if (a[k][j]!=a[i][j])
           {
             x=x+1;
           }
       }
    }
    if (x>=i-1)
    {
     for(i=0;i<m;i++)
      {
        a[i][n]=a[i][j];
      }
    }
  }
};
class Matr : public Matrix 
{
public:
    int z;
    int i;
    int j;
void Dubl2 ( );
};
 
void Matr :: Dubl2 () 
{
    for (i=0;i<m;i++) 
    {
        while (j<n) 
        {
            for (j=0;j<n;j++) 
            {
                if (a[i][j]=0) 
                {
                  z=z+1;
                }
            }
            if (z==i) {
                for (j=0; j<n;j++) 
                   {
                      a[m][j]=a[i][j];
                   }
            }
              
        }
 
    }
};
 
 
int main()
{
    Matrix ob;
    Matr ob2;
    ob.Enter ();
    ob.Display();
    ob.Dubl ();
    ob.Display();
    ob2.Dubl2();
    ob.Display();
    system("pause");
    return 0;
}

Вот так просто печатает, вы измените логику функций дублирования и.т.д.
Повторюсь, не увеличивайте размер m и n после инициализации.
0
ArhiDeuZ
0 / 0 / 0
Регистрация: 14.05.2014
Сообщений: 6
19.05.2014, 00:51  [ТС] #5
Проблему с ob.Display решил. Не работает видимо Dubl

Добавлено через 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
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
#include "stdafx.h"
//#include <stdlib.h>
//#include <iomanip>
//#include <cstdlib>
#include <iostream>
using namespace std;
 
class Matrix {
public:
int m,n;
int a[100][100];
Matrix ( );// конструктор
~Matrix ( );// деструктор
void Enter ();
void Display ();
void Dubl ();
};
 
Matrix:: Matrix ( )
{
cout << "Vvod v matrix \n";
cout << "Vvedite kolvo strok: ";
cin >> m;
cout << "Vvedite kolvo stolbcov: ";
cin >> n;
}
 
Matrix:: ~Matrix()
{
cout << "Deleted...\n";
}
void Matrix :: Enter ( )
{
  int i;
  int j;
  for (i=0; i<m; i++) 
  {
    for (j=0; j<n;j++) 
    {
       cout << "Vvod chisel v matricu: " << "a["<<i<<"]["<<j<<"]:" ;
       cin >> a[i][j];
    }
  }
   cout <<"\n";
};
 
void Matrix :: Display ()
{
  int i;
  int j;
  int l=0;
  for (i=0; i<m; i++)
  {
    for (j=0; j<n; j++)
    {
       cout << a[i][j] << " ";
    }
    cout << "\n";
  }
  cout << "\n";
  cin >> l;
};
void Matrix :: Dubl ( ) 
{
  int i = 0;
  int j = 0;
  int k = 0;
  int x = 0;
  int p = 0;
  int b = 0;
  for (j=0; j<n;j++) 
  {
    for (i=0;i<m;i++) 
    {
       k=i;
       p=i;
       for (p=0;p<m;p++)
       {
           if (a[k][j]!=a[p+1][j])
           {
             x=x+1;
           }
       }
    }
    if (x >= i-1)
    {
     for(b=0;b<m;b++)
      {
        a[b][n+1]=a[b][j];
      }
    }
  }
};
class Matr : public Matrix 
{
public:
    int z;
    int i;
    int j;
void Dubl2 ( );
};
 
void Matr :: Dubl2 () 
{
    for (i=0;i<m;i++) 
    {
        while (j<n) 
        {
            for (j=0;j<n+1;j++) 
            {
                if (a[i][j]=0) 
                {
                  z=z+1;
                }
            }
            if (z==i) {
                m+=1;
                for (j=0; j<n;j++) 
                   {
                      a[m+1][j]=a[i][j];
                   }
            }
              
        }
 
    }
};
 
int prompt_menu_item()
{
    // Выбранный вариант менюж
    int variant;
    cout << "VblBerite variant\n" << endl;
    cout << "1. Vvesti Massiv\n"
         << "2. Vblvesti massiv\n"
         << "3. Dublirovanie stolbcov\n"
         << "4. отсортировать\n"
         << "5. найти среднее кол-во элементов\n"
         << "6. дополнить таблицу\n"
         << "7. выйти\n" << endl;
    cout << ">>> ";
    cin >> variant;
    return variant;
};
 
int main ()
{
    Matrix ob;
    Matr ob2;
    ob.Enter ();
    ob.Display();
    ob.Dubl ();
    ob.Display();
};

немного доработанный код, но также не работает Dubl и соответственно Dubl2
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
19.05.2014, 00:58 #6
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
void Matrix :: Dubl ( ) 
{
  int i = 0;
  int j = 0;
  int k = 0;
  int x = 0;
  int p = 0;
  int b = 0;
  for (j=0; j<n;j++) 
  {
    for (i=0;i<m;i++) 
    {
       k=i;
       p=i;
       for (p=0;p<m;p++)
       {
           if (a[k][j]!=a[p+1][j]) //Будет выход за границу массива. Допустим вы ввели m = 5 n = 4.
           {                            //Когда цикл дойдёт до p = 4, a[p+1][j] - a[5][j] это уже выход за границу т.к.
             x=x+1;                  //p должно быть меньше m.
           }
       }
    }
    if (x >= i-1)
    {
     for(b=0;b<m;b++)
      {
        a[b][n+1]=a[b][j]; //То же самое...
      }
    }
  }
};
0
ArhiDeuZ
0 / 0 / 0
Регистрация: 14.05.2014
Сообщений: 6
19.05.2014, 01:22  [ТС] #7
Помогите доработать, не пойму никак что сделать необходимо, исправил как вы сказали. Теперь дублирует, но идет замена 1 строки, а не добавление столбца.
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
19.05.2014, 02:14 #8
ArhiDeuZ, вы хотите добавить столбец к массиву? Т. е. увеличить его размер?
У вас не получится или создайте новый массив с другими размерами или используйте vector.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2014, 02:14
Привет! Вот еще темы с ответами:

Класс "Матрица". "Правило трёх" - C++
Проблема в том, что я не могу вернуть тип данных &quot;Матрица&quot;.Что я делаю не так понял в ООП? // matrica.cpp : Defines the entry point for...

Класс "Матрица", перегрузка оператора "+" - C++
Здравствуйте. Создаю класс матрица, в нём перегружаю оператор &quot;+&quot;. На этапе компиляции всё замечательно, но при запуске программа вылетает....

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число" - C++
Ткма работы создать класс pair (пара чисел); определить метод перемножения полей и операцию сложения пар (a,b)+(c,d) =(a+b,c+d)...

Создать класс комплексных чисел и ввести операции: "+", "-", "*", "/". - C++
пожалуйста-помогите написатьпрограмму!!! сижу на экзамене!!! вот само задание: создать класс комплексных чисел и ввести операции: &quot;+&quot;,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.05.2014, 02:14
Ответ Создать тему
Опции темы

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