Дана целочисленная прямоугольная матрица. Определить:
- сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент;
- номера строк и столбцов всех седловых точек матрицы.
ПРИМЕЧАНИЕ———————————————————————————————————
Матрица А имеет седловую точку Аij, если Аij является минимальным элементом
в i-й строке и максимальным в j-м столбце.
——————————————————————————————————————————
Код программы:
//--------------------------------------------------------------------------- #include<iostream.h> #include<conio.h> #include<iomanip.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[]) { int n,m,i,j,sum=0,ipos=0,jpos=0,maxmin=0,minmax=0; //объявление переменных cout<<rus("Введите размерность массива:")<<endl; cout<<rus("\nВведите количество строк: n=");cin>>n;//ввод кол-ва строк cout<<rus("Введите количество столбцов: m=");cin>>m; //ввод кол-ва столбцов randomize(); int **a=new int*[n]; // объявление for(i=0;i<n;i++)a[i]=new int [m]; // двумерного массива int *min=new int[n]; // объявление массива для хранения минимальных int *max=new int[m]; // и максимальных значений матрицы cout<<rus("\nВведите элементы массива:")<<endl<<endl; for(i=0;i<n;i++) for(j=0;j<m;j++)a[i][j]=-5+random(20); //заполнение матрицы случайными числами for(i=0;i<n;i++) { for(j=0;j<m;j++) cout<<setw(4)<<a[i][j]; cout<<endl; } for(i=0;i<n;i++) //поиск { //отрицательного for(j=0;j<m;j++) if(a[i][j]<0) //элемента { for(j=0;j<m;j++) sum+=a[i][j]; //суммирование cout<<endl; cout<<rus("Сумма элементов в ");//вывод cout<<(i+1)<<rus(" строке: ")<<sum; //количества sum=0; } } for(i=0;i<n;i++) { min[i]=a[i][0];//принимаем за минимальный элемент все 1-е значения строк } for(i=0;i<n;i++) { //поиск for(j=0;j<m-1;j++) //минимального if(a[i][j+1]<min[i]) //элемента { //по min[i]=a[i][j+1]; //строкам } } cout<<endl; cout<<rus("\nМинимальный элемент по строкам:")<<endl<<endl; for(i=0;i<n;i++)cout<<setw(4)<<min[i]<<endl;//вывод минимальных элементов for(j=0;j<m;j++) { max[j]=a[0][j];//принимаем за максимальный элемент все 1-е значения столбцов } for(j=0;j<m;j++) { //поиск for(i=0;i<n-1;i++) //максимального if(a[i+1][j]>max[j]) //элемента { //по max[j]=a[i+1][j]; //столбцам } } cout<<endl; cout<<rus("Максимальный элемент по столбцам:")<<endl<<endl; for(j=0;j<m;j++)cout<<setw(4)<<max[j];//вывод максимальных элементов minmax=min[0]; //поиск for(i=0;i<n;i++) //максимального if(min[i]>minmax) //элемента { //из минимальных minmax=min[i]; //по строкам ipos=i; //запоминаем позицию элемента } cout<<rus("\n\nМаксимальный из минимальных по строкам: ")<<minmax;//вывод maxmin=max[0]; //поиск for(j=0;j<m;j++) //минимального if(max[j]<maxmin) //элемента { //из максимальных maxmin=max[j]; //по столбцам jpos=j; //запоминаем позицию элемента } cout<<rus("\nМинимальный из максимальных по столбцам: ")<<maxmin; //вывод cout<<rus("\nСедловая точка: ")<<a[ipos][jpos];//вывод седловой точки getch(); return 0; } //--------------------------------------------------------------------------- char bufrus[256]; char *rus(const char *text) { CharToOem(text, bufrus); return bufrus; } //---------------------------------------------------------------------------
Результат работы программы: