Дана целочисленная прямоугольная матрица. Определить:
- количество отрицательных элементов в тех строках, которые содержат хотя бы один нулевой элемент;
- номера строк и столбцов всех седловых точек матрицы.
ПРИМЕЧАНИЕ———————————————————————————————————
Матрица А имеет седловую точку Aij, если Aij является минимальным элементом
в i-й строке и максимальным в j-м столбце.
——————————————————————————————————————————
Код программы:
//--------------------------------------------------------------------------- #include<iostream.h> #include<conio.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,cnt=0,ipos=0,jpos=0,maxmin=0,minmax=0; //объявление переменных cout<<rus("Введите размерность массива:")<<endl; cout<<rus("\nВведите количество строк: n=");cin>>n;//ввод кол-ва строк cout<<rus("Введите количество столбцов: m=");cin>>m; //ввод кол-ва столбцов 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; randomize(); for(i=0;i<n;i++) { for(j=0;j<m;j++) { a[i][j]=-7+random(11); //случайное заполнение и вывод матрицы 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++) //подсчет { //количества if(a[i][j]<0) //отрицательных cnt++; //чисел } cout<<endl; cout<<rus("Количество отрицательных элементов в ");//вывод cout<<(i+1)<<rus(" строке: ")<<cnt; //количества cnt=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(3)<<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; } //---------------------------------------------------------------------------
Результат работы программы: