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

Как производится удаление строк матрицы? - C++

Восстановить пароль Регистрация
 
Маринчик
 Аватар для Маринчик
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 123
10.04.2014, 00:49     Как производится удаление строк матрицы? #1
Дан массив и матрица.Из матрицы М удалить строки, сумма элементов которых больше суммы элементов массива V.

строки и суммы элементов нашла.. а как удалять их - незнаю..
будет ли правильным задать новую матрицу и в нее эти строки с элементами назначать или как то по другому?мне просто в дальнейшем предстоит работать с уже преобразованной матрицей.. а как к ней дойти, добиться ее - не понимаю.. подскажите пожалуйста.
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
#include<stdio.h>
#include<iostream>/*zagolovochnij fajl s klassami, funktsijami i peremennimi dlja organizacii vvoda-vivoda v jazike programmirovaniya C++*/
#include <stdlib.h>
using namespace std;/*ob'javlenie prostranstva imen  std.*/
 
class massiv
        { float *a; int stroka; float sum1;int n;
         public: 
         massiv();
         void vvod();/*vvod elementov*/
         void vivod();
         void sum_el();
         void vivod_stroka();
         ~massiv(){delete[]a; puts("rabotal destryktor\n");}    /*{puts("rabotal destryktor massiva\n")*/;
         };
 //==============================================//        
  massiv::massiv()
    {printf("\nvvedite razmer massiva n: ");
     scanf("%d",&n);
     puts("\nrabotal konstruktor massiva\n");    
    }  
    
//==============================================//    
  void massiv::vvod()/*vvod elementov*/
    {a=new float[n];
     for(int i=0;i<n;i++)
      {*(a+i)=rand() % 101 - 50;printf("%3.2f ", *(a+1));
      }/*ot -50 do 50  ili  rand() % 201 - 100 ot -100 do 100 */
    } 
  
//==============================================//        
  void massiv::sum_el()
    {sum1=0;/*snachala summa v stroke=0*/
     for(int i=0;i<n;i++)/*idem po strokam*/
      {sum1+=*(a+i);}/*summiruyem yeye elementy*/
    }
//==============================================//       
  void massiv::vivod_stroka()
    {printf("\nsumma elementov massiva= %3.2f",sum1); printf("\n");}
 
//========================================//==============================================//======//  
 
 
class matrica
        { float *x; int n,m; 
          public:float sum2; int stroka;
          matrica(); 
          void vvod();
          void vivod(); 
          void sum_el();
          void vivod_stroka();
          void yslovie();
          ~matrica(){delete[]x; puts("rabotal destryktor matrici\n");}                
        };
//==============================================//     
  matrica::matrica()
    {printf("\nvvedite razmernost n*m: ");
     scanf("%d %d",&n,&m);
     puts("\nrabotal konstruktor matrici\n");    
    } 
//==============================================//    
  void matrica:: vvod()    
    {x=new float [n*m]; 
     for(int i=0;i<n;i++)
     for(int j=0;j<m;j++)
      *(x+i*m+j)=rand() % 101 - 50;
    }
//==============================================//
  void matrica::vivod()/*vivodit matrici na ekran*/
    {printf("\nmatrica:\n"); 
     for(int i=0; i<n; i++)
     {for(int j=0;j<m;j++)
       cout<<*(x+i*m+j)<< " ";cout << "\n";}
    }
//==============================================//    
  void matrica::sum_el()
    {for(int i=0;i<n;i++)/*idem po strokam*/
      {sum2=0;/*snachala summa v stroke=0*/
      for(int j=0;j<m;j++)/*idem po stroke*/
       sum2+=*(x+i*m+j);/*summiruyem yeye elementy*/
      stroka=i+1; 
      printf("\nsumma= %3.2f v stroke %d ",sum2, stroka); }printf("\n");
    } 
    
 
 
 
int main()
{
massiv V;
V.vvod();
V.sum_el();
V.vivod_stroka();
system("pause");  
  
matrica A;
A.vvod();
A.vivod();
A.sum_el();
system("pause"); 
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2014, 00:49     Как производится удаление строк матрицы?
Посмотрите здесь:

C++ Удаление всех строк содержащих минимальный элемент матрицы.
Как производится векторизация BITMAP? C++
Матрицы. Удаление строк. C++
C++ Как правильно производится наследование элементов от шаблона класса? В чем ошибка?
C++ Дописать код о удаление строк и столбцов с матрицы
Неправильно производится умножение матрицы на вектор C++
Подскажите как создать конструктор класса в котором производится инкрементирование статической переменной! C++
C++ Как изменить программу, чтобы она добавляла К строк в начало матрицы?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
10.04.2014, 03:20     Как производится удаление строк матрицы? #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
#include <iostream>
using namespace std;
 
class Matrix{
public:
Matrix(int rows = 0, int columns = 0);
void del_row(int row_to_del_ind);
void show();
int rows;
int columns;
float **matrix;
};
 
Matrix::Matrix( int rows_ , int columns_ ){
if(rows_<1)rows=3;
else rows=rows_;
if(columns_<1)columns=3;
else columns=columns_;
matrix = new float*[rows];
for(int i=0; i<rows; ++i) matrix[i] = new float[columns];
for(int i=0; i<rows; ++i)
for(int j=0; j<columns; ++j)matrix[i][j]=(i*(rows+1.f)+j);
}
 
void Matrix::show(){
    for(int i=0; i<rows; ++i){
        for(int j=0; j<columns; ++j){
            cout.width(6);
    cout<<matrix[i][j]<<" ";
        }
        cout<<endl;
    }
}
 
void Matrix::del_row(int row_to_del_ind){
    if(row_to_del_ind < rows && row_to_del_ind > -1 && rows>1){
delete matrix[row_to_del_ind];
    for(int i = row_to_del_ind; i<rows-1; ++i){
matrix[i]=matrix[i+1];
    }
rows--;
    }else cout<<"\nCan not delete last row!"<<endl;
}
 
int main(){
Matrix matrix(4,5);
matrix.show();
cout<<endl;
//удаляем 3-ю строку
matrix.del_row(2);
matrix.show();
cout<<endl;
//удаляем 3-ю строку
matrix.del_row(2);
matrix.show();
cout<<endl;
//удаляем 1-ю строку
matrix.del_row(0);
matrix.show();
cout<<endl;
//пытаемся удаляить последнюю строку
matrix.del_row(0);
matrix.show();
cout<<endl;
system("pause"); 
    return 0; 
}
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
10.04.2014, 04:00     Как производится удаление строк матрицы? #3
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <memory.h>
 
#define N1 10
#define N2 3
 
int main(int argc, char* argv[])
{
    int V[N2] = { 40, 5, 10 };
 
    int** M = new int*[N1];
    memset((void*)M, 0x00, (N1+1) * 4);
 
    for (int t1 = 0; t1 < N1; t1++)
    {
        M[t1] = new int[N1];
        for (int t2 = 0; t2 < N1; t2++)
        {
            M[t1][t2] = rand() % 9 + 1;
            printf("%d ",M[t1][t2]);
        }
 
        printf("\n");
    }
 
    printf("\n\n");
 
    int sum = 0, k = sum;
    while (k < N2) sum+=V[k++];
 
    int i = 0;
    while (i < N1 && M[i] != NULL)
    {
        int sum_row = 0, j = sum_row, r = i;
        while (j < N1 && M[i] != NULL) sum_row+=M[i][j++];
        while (r < N1 && M[i] != NULL && sum_row > sum) 
            M[r++] = M[r+1];
 
        int t = 0; while (M[t] != NULL) t++;
        if (sum_row > sum && i > 0) i--;
        i = (t > 1) ? i + 1 : i;
    }
 
    for (int z1 = 0; z1 < N1 && M[z1] != NULL; z1++)
    {
        for (int z2 = 0; z2 < N1; z2++)
            printf("%d ",M[z1][z2]);
 
        printf("\n");
    }
 
    printf("\n");
 
    _getch();
 
    return 0;
}
Yandex
Объявления
10.04.2014, 04:00     Как производится удаление строк матрицы?
Ответ Создать тему
Опции темы

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