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

Уплотнить матрицу - C++

Восстановить пароль Регистрация
 
r.e.a.c.t.o.r
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 43
22.11.2012, 02:40     Уплотнить матрицу #1
Доброго всем времени суток. Хотелось бы разобраться с одним вопросом.

Задание звучит так
Дана целочисленная прямоугольная матрица:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
m = {{ -16, -78,   0,  -6, -29, -19,  0, -65, -88, -51},
 
     { -79, -22,  0, -25, -62, -69,  0, -59, -75, -89},
 
     { -87, -95,  0, -85, -49, -75,  0, -73, -59, -52},
 
     {   0,   0,  0,   0,   0,   0,  0,   0,   0,   0},
 
     { -99, -21,  0,  64,  22,  -2,  0, -84,  -1, -71},
 
     { -25,  47,  0,  43,  15, -44,  0,  61,   4,  74},
 
     {  88, -61,  0, -64, -83,  97,  0,  90,  15,   8},
 
     {   0,   0,  0,   0,   0,   0,  0,   0,   0,   0},
 
     {  98,  58,  0, -29,  95,  62,  0,  89,  36, -32},
 
     {  78,  60,  0, -18,  30, -13,  0, -92,   1, -38}}

1) Найти номер первой из строк, содержащих хотя бы один положительный элемент (>0).

2) Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями (оставшееся место справа и снизу заполнить нулями).


Сделал пункт 1. А в пункте 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
#include <iostream>
#include <math.h>
using namespace std;
void main ()
{
    const int size=10,column=10,row=10;
    int  a=0,b=0,i,j, f,n=0,
    mas[column][row]=
    {{ -16, -78,   0,  -6, -29, -19,  0, -65, -88, -51},
 
     { -79, -22,  0, -25, -62, -69,  0, -59, -75, -89},
 
     { -87, -95,  0, -85, -49, -75,  0, -73, -59, -52},
 
     {   0,   0,  0,   0,   0,   0,  0,   0,   0,   0},
 
     { -99, -21,  0,  64,  22,  -2,  0, -84,  -1, -71},
 
     { -25,  47,  0,  43,  15, -44,  0,  61,   4,  74},
 
     {  88, -61,  0, -64, -83,  97,  0,  90,  15,   8},
 
     {   0,   0,  0,   0,   0,   0,  0,   0,   0,   0},
 
     {  98,  58,  0, -29,  95,  62,  0,  89,  36, -32},
 
     {  78,  60,  0, -18,  30, -13,  0, -92,   1, -38}};
    for ( i=0;i<column;i++)
    {
    for ( j=0;j<row;j++)
    
        if (mas[i][j]>0)
        {
            cout<<"pervaia strochka s polozhitelnim elementom:"<<i<<endl;
                goto m1;}
 
    }
m1:
    cout<<"-------------"<<endl;
 
 
double temp;
 
int j2;
int j1=2;
j2=j1;
 
 
while (j2<9)
{
    for ( i=0;i<10;i++)
    {
        temp=mas[i][j2];
        mas[i][j2]=mas[i][j2+1];
        mas[i][j2+1]=temp;
    }
    j2++;
 
}
 
 
 
    for ( i=0;i<column;i++)
    {
    for ( j=0;j<row;j++)
        printf("%7d",mas[i][j]);    
 
 cout << endl << endl;
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2012, 02:40     Уплотнить матрицу
Посмотрите здесь:

Уплотнить заданную матрицу C++
Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями C++
Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями C++
Необходимо уплотнить заданную матрицу,удаляя из нее строки и столбцы, заполненные нулями C++
Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями C++
C++ Объсните эксперты как реализовать последнее условие, Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями
Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями C++
C++ Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
22.11.2012, 06:56     Уплотнить матрицу #2
Вы присваиваете переменной типа double значение типо int - так делать нехорошо. Возможна потеря данных. В данной целочисленной матрице double использовать нет смысла. Вот дописал некий код с функциями для рассмотрения, вроде работает

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
//http://www.cyberforum.ru/cpp-beginners/thread705155.html
#include <iostream>
#include <math.h>
using namespace std;
#define size 10
#define column 10
#define row 10
void print_matrix(int m_pointer[column][row]) {
    for(int i=0;i<column;i++) {
    for (int j=0;j<row;j++)
        printf("%5d",m_pointer[i][j]);    
    cout << endl << endl;
    }
}
bool null_string(int m_pointer[column][row],int n) { //проверка является ли строки нулевой
    for(int j=0;j<row;j++) {
        if(m_pointer[n][j]!=0) return false; //не все элементы строки нулевые 
    }
    return true; //все элементы строки нулевые
}
bool null_stolb(int m_pointer[column][row],int m) { //проверка является ли строки нулевой
    for(int i=0;i<column;i++) {
        if(m_pointer[i][m]!=0) return false; //не все элементы столбца нулевые 
    }
    return true; //все элементы столбца нулевые
}
void main ()
{
    int mas[column][row]=
    {{ -16, -78,  0,  -6, -29, -19,  0, -65, -88, -51},
     { -79, -22,  0, -25, -62, -69,  0, -59, -75, -89},
     { -87, -95,  0, -85, -49, -75,  0, -73, -59, -52},
     {   0,   0,  0,   0,   0,   0,  0,   0,   0,   0},
     { -99, -21,  0,  64,  22,  -2,  0, -84,  -1, -71},
     { -25,  47,  0,  43,  15, -44,  0,  61,   4,  74},
     {  88, -61,  0, -64, -83,  97,  0,  90,  15,   8},
     {   0,   0,  0,   0,   0,   0,  0,   0,   0,   0},
     {  98,  58,  0, -29,  95,  62,  0,  89,  36, -32},
     {  78,  60,  0, -18,  30, -13,  0, -92,   1, -38}};
    setlocale(LC_ALL,"rus");
//печать исходной
    //print_matrix(mas);
//1)
    for(int i=0;i<column;i++) {
        for(int j=0;j<row;j++)
            if (mas[i][j]>0) {
                cout<<"Первая строка с положительным элементом: "<<i<<endl;
                goto m1;
            }
    }
m1:
//2
    //преобразуем строки
    for(int i=0;i<column;i++) {
        if(null_string(mas,i)) //если строка нулевая
            for(int i2=i; i2<column; i2++) //то смещаем её в конец массива
                for(int j=0;j<row;j++) {
                    if(i2==column-1) //если последняя забиваем нулями)
                        mas[i2][j]=0;
                    else //иначе берем значения из слудующей строки
                        mas[i2][j]=mas[i2+1][j];
                }
 
    }
    //печать что получилосб
    //print_matrix(mas);
 
    //преобразуем столбци
    for(int j=0;j<row;j++) {
        if(null_stolb(mas,j)) { //если столбец нулевой
            for(int j2=j;j2<row;j2++) { //то начиная с этого столбца смещаем его в конец
                for(int i=0;i<column;i++) {
                    if(j2==row-1) //если последний то забиваем нулями
                        mas[i][j2]=0;
                    else         //иначе берем элемент из слудующего столбца
                        mas[i][j2]=mas[i][j2+1];
                }
            }
        }
    }
    //печать что получилосб
    print_matrix(mas);
    getchar();
}
r.e.a.c.t.o.r
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 43
22.11.2012, 13:27  [ТС]     Уплотнить матрицу #3
Спасибо огромное) очень помогли!
Yandex
Объявления
22.11.2012, 13:27     Уплотнить матрицу
Ответ Создать тему
Опции темы

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