Советы, трюки и секреты для Blogger.com блоггеров. Все для Blogspot. Советы, трюки и секреты для Blogger.com блоггеров. Все для Blogspot.

Двумерные массивы (C++)

13 октября 2010, 02:19

Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти номер первой из строк, содержащих хотя бы один положительный элемент.

#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;
}



}

Двумерные массивы (C++)