Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти номер первой из строк, содержащих хотя бы один положительный элемент.
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
void main() {
// Opredelenie peremennih i vvod nachalnih dannih
// Opredeljaem promegutochnie peremennie
int n, m, nrez, mrez, i, j, summ, flag;
// Vvodim razmer nachalnoj matrici, opredeljaem ee i dve vspomogatelnie
cout << " Vvedite razmer matrici" ;
cout << "\n kolichestvo strok: " ; cin >> n;
cout << " kolichestvo stolbcov: " ; cin >> m;
int *flag_str= new int [n];
int *flag_stl= new int [m];
int **a= new int *[n];
for (i=0; i<n; i++) a[i]= new int [m];
nrez=n;
mrez=m;
// Vvodim znachenija elementov matrici
cout << "\n Vvedite matricu razmernosti " << n << " na " << m << " " ;
for (i=0; i<n; i++)
for (j=0; j<m; j++) cin >> a[i][j];
// Vivod na ekran nachalnoj matrici
cout << "\n ------ Zadannaja matrica ------ \n" ;
for (i=0; i<n; i++) {
for (j=0; j<m; j++)
cout << a[i][j] << " " ;
cout << "\n" ;}
// Vichisljaem uplotnennju matricu
// Iwem nulevie stroki
for (i=0; i<n; i++) {
summ=0;
for (j=0; j<m; j++) summ+=abs(a[i][j]);
if (summ==0) { nrez--; flag_str[i]=1;}
else flag_str[i]=0;
}
//Sozdaem vremennuju matricu
int **temp= new int *[nrez];
for (i=0; i<nrez; i++) temp[i]= new int [m];
//Udaljaem iz nachalnoj matrici nulevie stroki
flag=0;
for (i=0; i<n; i++) {
if (flag_str[i]==0)
for (j=0; j<m; j++) { temp[i-flag][j]=a[i][j]; } //cout << "\n temp" << i-flag << j << "=" << temp[i-flag][j]; }
else flag++; }
// Vivod na ekran promegutochnoj matrici
cout << "\n ------ Posle udalenija nulevih strok ------ \n" ;
for (i=0; i<nrez; i++) {
for (j=0; j<m; j++)
cout << temp[i][j] << " " ;
cout << "\n" ;}
//Iwem nulevie stolbci
for (j=0; j<m; j++) {
summ=0;
for (i=0; i<nrez; i++) summ+=abs(a[i][j]);
if (summ==0) { mrez--; flag_stl[j]=1; }
else flag_stl[j]=0;
}
//Sozdaem konechnuju matricu
int **rez= new int *[nrez];
for (i=0; i<nrez; i++) rez[i]= new int [mrez];
//Udaljaem iz vremennoj matrici nulevie stolbci
flag=0;
for (j=0; j<m; j++) {
for (i=0; i<nrez; i++)
if (flag_stl[j]==0) { rez[i][j-flag]=temp[i][j]; } //cout << "\n rez" << i << j-flag << "=" << rez[i][j-flag]; }
if (flag_stl[j]==1) flag++;
}
// Vivod na ekran rezultirujuwej matrici
cout << "\n ------ Rezultat ------ \n" ;
for (i=0; i<nrez; i++) {
for (j=0; j<mrez; j++)
cout << rez[i][j] << " " ;
cout << "\n" ;}
// Poisk pervoj stroki s pologitelnim elementom v rezultirujuwej matrice
cout << "\n ------ Pervaja stroka s pologitelnim elementom ------ \n" ;
for (i=0; i<nrez; i++)
for (j=0; j<mrez; j++)
if (rez[i][j]>0) {
cout << "Pervij pologitelnij element raven " << rez[i][j] << " i nahoditsja v " << i+1 << "-i stroke" ;
j=mrez;
i=nrez;
}
}
13 октября 2010, 02:19