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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.86
hacer
2 / 0 / 1
Регистрация: 10.06.2012
Сообщений: 18
#1

Удалить строку и столбец матрицы - C++

10.06.2012, 20:50. Просмотров 5156. Ответов 12
Метки нет (Все метки)

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
#include <iostream>
 
using namespace std;
 
void ReadMatr(int **a, int n, int m);//Ввод матрицы с клавиатуры
 
void PrintMatr(int **a, int n, int m);//Вывод матрицы на экран монитора
 
int P(int **a, int n, int m);//Максимальный элемент главной диагонали
 
int O(int **a, int n, int m, int q);//Исключаю столбец и строку где находиться максимальный элемент
 
 
 
int main()
 
{
 
 int n=3, m=3, i;
 
    int **a;
 
    a = new int*[n] ;
 
    for(i = 0; i < n; i++)
 
 a[i] = new int [m];
 
 ReadMatr(a, n, m);
 
 
 
 O(a, n, m, P(a, n, m)) ;
 
 PrintMatr(a, n, m);
 
 
 
 for(i = 0; i < n; i++)
 
 delete []a[i];
 
 delete []a;
 
 return 0;
 
}
 
 
 
// Ввод матрицы с клавиатуры
 
void ReadMatr(int **a, int n, int m)
 
{
 
 int i, j;
 
 cout << "Input matriza A(" << n << "*" << m << "):" << endl;
 
 for(i = 0; i < n; i++)
 
 for(j = 0; j < m; j++)
 
 cin >> a[i][j];
 
}
 
 
 
// Вывод матрицы на экран монитора
 
void PrintMatr(int **a, int n, int m)
 
{
 
    int i, j;
 
 cout << "Matriza:" << endl;
 
 for(i = 0; i < n; i++)
 
 {
 
 for(j = 0; j < m; j++)
 
 cout << a[i][j] << " ";
 
 cout << endl;
 
 }
 
}
 
 
 
// Максимальный элемент главной диагонали
 
int P(int **a, int n, int m)
 
{
 
    int i, max=0;
 
    if(n>m)
 
    n = m;
 
 for(i = 0; i < n; i++)
 
 {
 
 if (a[max][max]<a[i][i])
 
 max=i;
 
 }
 
 cout<<"max"<<max<<endl;
 
    return max;
 
}
 
 
 
// Исключаю столбец и строку где находиться максимальный элемент 
 
int O(int **a, int n, int m, int q)
 
{
 
 
 
 
 
 
    cout<<"OTBET::::"<<endl;
 
}
Добавлено через 1 минуту
надо удалить от максимального столбец и строку )максимальную нашел а как удаляется не знаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2012, 20:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить строку и столбец матрицы (C++):

Удалить из матрицы строку и столбец - C++
Привет всем ,помогите пожалуйста написать программу : Заранее спасибо всем. Добавлено через 11 часов 45 минут Никто не...

Удалить столбец и строку из матрицы - C++
Пытаюсь удалить из матрицы x строку strI и столбец stlbI путем создания &quot;временной матрицы&quot; a, удаления матрицы x, и перезаписывания a в x....

Удалить заданную строку и столбец матрицы со сдвигом - C++
Как удалить заданную строку a и столбец b со сдвигом, в динамическом массиве MxN заполненного рандомными числами?

Удалить строку и столбец целочисленной квадратной матрицы - C++
Дана целочисленная квадратная матрица порядка n. Удалить из нее строку и столбец, на пересечении которых находится максимальный элемент...

Удалить строку и столбец, на пересечении которых расположен наименьший по модулю элемент матрицы - C++
Задан двумерный массив целых чисел. Удалить строку и столбец, на пересечении которых расположен наименьший по модулю элемент матрицы. ...

Удалить из матрицы строку и столбец, на пересечении которых расположен наибольший по модулю элемент - C++
Из матрицы размером NxM получить матрицу размером (N-1)x(M-1) путем удаления из исходной матрицы строки и столбца, на пересечении которых...

12
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
10.06.2012, 21:22 #2
Либо создавать новый массив с размером [n-1][m-1] и копировать туда все элементы, кроме находящихся на "удяляемых" стоке и столбце.
Либо сдвигать строки, начиная с k+1 до конца матрицы на предыдущую строку(где k-строка, где находится максимальный элемент). со столбцами соответственно аналогично. И уменьшать n и m на единицу, предварительно запомнив в новую переменную(для удаления массива)
Либо использовать вектор
0
hacer
2 / 0 / 1
Регистрация: 10.06.2012
Сообщений: 18
10.06.2012, 21:34  [ТС] #3
я пытался создать новый но выдает ошибок много
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
10.06.2012, 21:44 #4
Цитата Сообщение от hacer Посмотреть сообщение
я пытался создать новый но выдает ошибок много
покажите код, как пытались создать новый.

Не по теме:

используйте теги, когда код вставляете

0
hacer
2 / 0 / 1
Регистрация: 10.06.2012
Сообщений: 18
10.06.2012, 22:11  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int O(int **a, int n, int m, int q)
{
int i,y;
for(i=0; i<n-1; i++)
{
for(y=q; y<m-1; y++)
{
a[i][y]=a[i][y+1];
a[y][i]=a[y][i+1];
}
}
cout«"OTBET::::"«endl;
}
Добавлено через 1 минуту
Я новый толком создавать не умею ) и эту задачу решить толком не могу
0
hacer
2 / 0 / 1
Регистрация: 10.06.2012
Сообщений: 18
10.06.2012, 22:52  [ТС] #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
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
#include <iostream>
 
using namespace std;
 
void ReadMatr(int **a, int n, int m);//Ввод матрицы с клавиатуры
 
void PrintMatr(int **a, int n, int m);//Вывод матрицы на экран монитора
 
int P(int **a, int n, int m);//Максимальный элемент главной диагонали
 
int O(int **a, int n, int m);//Исключаю столбец и строку где находиться максимальный элемент
 
 
 
int main()
 
{
 
 int  i;
 const int m = 3;
  const int n = 3;
 
    int **a;
 
    a = new int*[n] ;
 
    for(i = 0; i < n; i++)
 
 a[i] = new int [m];
 
 ReadMatr(a, n, m);
 
 
 P(a, n, m);
 O(a, n, m);
 
 PrintMatr(a, n, m);
 
 
 
 for(i = 0; i < n; i++)
 
 delete []a[i];
 
 delete []a;
 
 return 0;
 
}
 
 
 
// Ввод матрицы с клавиатуры
 
void ReadMatr(int **a, int n, int m)
 
{
 
 int i, j;
 
 cout << "Input matriza A(" << n << "*" << m << "):" << endl;
 
 for(i = 0; i < n; i++)
 
 for(j = 0; j < m; j++)
 
 cin >> a[i][j];
 
}
 
 
 
// Вывод матрицы на экран монитора
 
void PrintMatr(int **a, int n, int m)
 
{
 
    int i, j;
 
 cout << "Matriza:" << endl;
 
 for(i = 0; i < n; i++)
 
 {
 
 for(j = 0; j < m; j++)
 
 cout << a[i][j] << " ";
 
 cout << endl;
 
 }
 
}
 
 
 
// Максимальный элемент главной диагонали
 
int P(int **a, int n, int m)
 
{ int i,j,imax=0,max=0,jmax=0;
 max=a[0][0];
    imax=0;
    jmax=0;
    for (i=0;i<n;i++)
    for(j=0;j<n;j++)
    if (max<a[i][j])  // здесь стояла ;
    {
        max=a[i][j];
        imax=i;
        jmax=j;
    }
}
 
 
 
// Исключаю столбец и строку где находиться максимальный элемент
 
int O(int **a, int n, int m)
 
{
    int i,j,imax,jmax;
 for(i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
            if (i!=imax)
            if(j!=jmax)  // здесь стояла ;
                cout<<" "<<a[i][j];
        cout<<endl;
    }
    for (i=0;i<n;i++)
        delete[] a[i];
    delete[] a;
 
        cout<<"OTBET::::"<<endl;
 
}
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
10.06.2012, 23:55 #7
вот ваше создание массива.
C++
1
2
3
4
5
6
7
int **a;
 
 a = new int*[n] ;
 
 for(i = 0; i < n; i++)
 
 a[i] = new int [m];
вот удаление
C++
1
2
3
4
5
for(i = 0; i < n; i++)
 
 delete []a[i];
 
 delete []a;
сделайте по аналогии.
сначало создайте новый массив с меньшим размером и скопируйте в него нужное из исходного, затем исходный удалите.
у вас, кстати, программа неверно "спроектирована". ф-я P возвращает максимальное значение, а нужно чтоб возвращала(или изменяла по ссылке) номера строки и столбца этого элемента.

Не по теме:

еще раз, используйте теги, уважайте других!

1
hacer
2 / 0 / 1
Регистрация: 10.06.2012
Сообщений: 18
10.06.2012, 23:59  [ТС] #8
у вас, кстати, программа неверно "спроектирована". ф-я P возвращает максимальное значение, а нужно чтоб возвращала(или изменяла по ссылке) номера строки и столбца этого элемента.

Не по теме:

еще раз, используйте теги, уважайте других!

[/QUOTE]

как сделать чтобы возвращала??
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
11.06.2012, 00:12 #9
Цитата Сообщение от hacer Посмотреть сообщение
как сделать чтобы возвращала??
извиняюсь, ошибся, посмотрел что возвращается 1 переменная...

главную диагональ имеет только квадратная матрица, а заданная может такой не являться. кол-во строк должно равняться кол-ву столбцов.
0
hacer
2 / 0 / 1
Регистрация: 10.06.2012
Сообщений: 18
11.06.2012, 00:19  [ТС] #10
как тогда мне записать час он получается макс не считывает
0
Ne0nX
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 18
11.06.2012, 00:25 #11
C++
1
2
3
4
5
6
7
8
9
10
int MaxDig (int **a, int n, int m)
{
    int max=a[0][0];
    for(int i = 0, j=0; i < n,j<m; i++,j++)
    {
        if (max<a[i][j])
            max=a[i][j];
    }
    return max;
}
Вот эта функция должна возвращать макс число диагонали
0
hacer
2 / 0 / 1
Регистрация: 10.06.2012
Сообщений: 18
11.06.2012, 19:36  [ТС] #12
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 <iostream>
 
using namespace std;
 
void ReadMatr(int **a, int n, int m);//Ввод матрицы с клавиатуры
 
void PrintMatr(int **a, int n, int m);//Вывод матрицы на экран монитора
 
int P(int **a, int n, int m);//Максимальный элемент главной диагонали
 
int O(int **a, int n, int m, int q);//Исключаю столбец и строку где находиться максимальный элемент
 
 
 
int main()
 
{
 
 int n=3, m=3, i;
 
    int **a;
 
    a = new int*[n] ;
 
    for(i = 0; i < n; i++)
 
 a[i] = new int [m];
 
 ReadMatr(a, n, m);
 
 
 
 O(a, n, m, P(a, n, m)) ;
 
 PrintMatr(a, n, m);
 
 
 
 for(i = 0; i < n; i++)
 
 delete []a[i];
 
 delete []a;
 
 return 0;
 
}
 
 
 
// Ввод матрицы с клавиатуры
 
void ReadMatr(int **a, int n, int m)
 
{
 
 int i, j;
 
 cout << "Input matriza A(" << n << "*" << m << "):" << endl;
 
 for(i = 0; i < n; i++)
 
 for(j = 0; j < m; j++)
 
 cin >> a[i][j];
 
}
 
 
 
// Вывод матрицы на экран монитора
 
void PrintMatr(int **a, int n, int m)
 
{
 
    int i, j;
 
 cout << "Matriza:" << endl;
 
 for(i = 0; i < n; i++)
 
 {
 
 for(j = 0; j < m; j++)
 
 cout << a[i][j] << " ";
 
 cout << endl;
 
 }
 
}
 
 
 
// Максимальный элемент главной диагонали
 
int P(int **a, int n, int m)
 
{
 
    int i, max=0;
 
    if(n>m)
 
    n = m;
 
 for(i = 0; i < n; i++)
 
 {
 
 if (a[max][max]<a[i][i])
 
 max=i;
 
 }
 
 //cout<<"max"<<max<<endl;
 
    return max;
 
}
 
 
 
// Исключаю столбец и строку где находиться максимальный элемент
 
int O(int **a, int n, int m, int q)
 
{
 
    int i,j;
    n=m;
for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
            if (i!=q)
 
                cout<<" "<<a[i][j];
        cout<<endl;
    }
    for (i=0;i<n;i++)
        delete[] a[i];
    delete[] a;
 
 
 
 
 
 
    cout<<"OTBET::::"<<endl;
 
}
Добавлено через 1 минуту
я вожу например 1 2 3 == 1 2
4 5 6 == 4 5
6 7 8==

Добавлено через 2 минуты
Вот Задача --Из квадратной матрицы исключить строку и столбец, на пересечении которых находится максимальный элемент главной диагонали.
0
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
11.06.2012, 19:38 #13
а что вот тут происходит?
C++
1
cout<<"OTBET::::"<<endl;
0
11.06.2012, 19:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2012, 19:38
Привет! Вот еще темы с ответами:

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

Из матрицы удалить строку и столбец, в которых находится первый элемент, равный нулю - C++
Из заданой матрицы A(N,N) удалить строку и столбецб в которых находится первый элемент, равно нулю.Полученую матрицу уплотнить.Элементы...

Преобразование матрицы (удалить из матрицы столбец с наибольшей по модулю суммой элементов) - C++
Всем привет, есть программа для ввода матрицы и вывода на экран. Нужно удалить из матрицы столбец с наибольшей по модулю суммой элементов. ...

Как удалить строку/столбец из двумерного вектора? - C++
Прошу помощи. До самого не доходит. Имеем вектор v . std::vector&lt;std::vector&lt;int&gt; &gt; v( N, std::vector&lt;int&gt;M); Как с помощью функции...


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

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

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