Дана целочисленная квадратная матрица. Определить:
- сумму элементов в тех столбцах, которые не содержат отрицательных элементов;
- минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.
Код программы:
//--------------------------------------------------------------------------- #include<iostream.h> #include<conio.h> #include<math.h> #include<windows.h> #include<iomanip.h> #include<vcl.h> #pragma hdrstop #pragma argsused //--------------------------------------------------------------------------- char *rus(const char *text); int main(int argc, char* argv[]) { randomize(); int n,m,i,j,k,cnt=0,s1,q,w,minsum_of_diag; bool all_posit; cout<<rus("Введите размерность массива:")<<endl; cout<<rus("Введите количество строк и столбцов: n=");cin>>n; int **a=new int*[n]; for(i=0;i<n;i++)a[i]=new int[n]; int **buf_a=new int*[n]; for(i=0;i<n;i++)buf_a[i]=new int[n]; long unsigned *sum=new unsigned long[n]; int *sums_of_diag=new int[m]; //--------------------------------------------------------------------------- cout<<rus("\nВведите элементы массива:\n\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { a[i][j]=-1+random(10); cout<<setw(5)<<a[i][j]; } cout<<endl; } //--------------------------------------------------------------------------- cout<<rus("\nСумма элементов в столбцах, которые не содержать отрицательных элементов:\n\n"); for(j=0;j<n;j++) { all_posit=true; sum[j]=0; for(i=0;i<n;i++) if(a[i][j]<0) { all_posit=false; sum[j]=0; break; } if(all_posit) { for(i=0;i<n;i++) sum[j]+=a[i][j]; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) cout<<setw(5)<<a[i][j]; cout<<endl; } for(i=0;i<n;i++)cout<<setw(5)<<"=";cout<<endl; for(i=0;i<n;i++)cout<<setw(5)<<sum[i]; //--------------------------------------------------------------------------- for(i=q=0;i<n,q<n;i++,q++) //преобразование матрицы { //начало и конец for(j=n-1,w=0;j>=0,w<n;j--,w++) //каждой строки матрицы { //меняются местами buf_a[q][w]=a[i][j]; } } //------------------------- for(q=n-1,m=0;q>0;q--) { s1=0; for(w=0;w<n-1;w++) //сумма элементов диагоналей { //расположенных for(k=q+w;k<n;) //ниже главной диагонали { //матрицы s1+=buf_a[k][w]; break; } } sums_of_diag[m++]=s1; cnt++; } //------------------------- s1=0; for(q=0;q<n;q++) { //сумма элементов for(w=n-1;w>=0;w--) //расположенных на if(q==w) //главной диагонали s1+=buf_a[q][w]; } sums_of_diag[m++]=s1; cnt++; //------------------------- for(w=1,m=cnt;w<n;w++) { s1=0; for(q=0;q<n-1;q++) //сумма элементов диагоналей { //расположенных выше for(k=q+w;k<n;) //главной диагонали { //матрицы s1+=buf_a[q][k]; break; } } sums_of_diag[m++]=s1; cnt++; } cout<<rus("\n\nКоличество просуммированных диагоналей: ")<<cnt<<endl; cout<<rus("Сумма элементов диагоналей, параллельных побочной диагонали матрицы:\n\n"); for(m=cnt-1;m>=0;m--) cout<<setw(5)<<sums_of_diag[m]; //--------------------------------------------------------------------------- cout<<rus("\n\nМинимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы: "); minsum_of_diag=sums_of_diag[0]; for(m=0;m<cnt;m++) { if(sums_of_diag[m]<minsum_of_diag) minsum_of_diag=sums_of_diag[m]; } cout<<minsum_of_diag; getch(); return 0; } //--------------------------------------------------------------------------- char bufrus[256]; char *rus(const char *text) { CharToOem(text, bufrus); return bufrus; } //---------------------------------------------------------------------------
Результат работы программы: