Матрицы: номера строк и столбцов всех седловых точек матриц - C (СИ)
Формулировка задачи:
Дана целочисленная прямоугольная матрица. Определить:
1) Сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.
2) Номера строк и столбцов всех седловых точек матриц.
Кто сможет, решите
Решение задачи: «Матрицы: номера строк и столбцов всех седловых точек матриц»
textual
Листинг программы
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main(void)
{
int RowCount,ColCount; //количество строк и столбцов матрицы
int i,j,k; //переменные цикла
int Sum; //счетчик суммы
int** Matrix; //матрица
int flag; //флаг наличия отрицательного элемента
int MinJ,MaxJ; //индексы столбца минимума и максимума
int MinI,MaxI; //индексы строк минимума и максимума
printf("%s","Enter number of rows:\n");
//вводим количество строк
scanf("%d",&RowCount);
printf("%s","Enter number of columns:\n");
//вводим количество столбцов
scanf("%d",&ColCount);
//выделение памяти
Matrix=(int *)malloc(RowCount*sizeof(int*));
for(i=0;i<RowCount;i++) Matrix[i]=(int*)malloc(ColCount*sizeof(int));
//ввод матрицы
for(i=0;i<RowCount;i++)
{
for(j=0;j<ColCount;j++)
{
printf("%s%d%s%d%s","Enter element [",i,";",j,"]:");
scanf("%d",&Matrix[i][j]);
}
}
//вывод матрицы
for(i=0;i<RowCount;i++)
{
for(j=0;j<ColCount;j++)
{
printf("%d%s",Matrix[i][j]," ");
}
printf("%s","\n");
}
//задание 1
for(i=0;i<RowCount;i++)
{
j=0;
flag=0;
while((j<ColCount)&&(flag==0))
{
if(Matrix[i][j]<0) flag=1;
j++;
}
if(flag==1)
{
Sum=0;
for(j=0;j<ColCount;j++) Sum=Sum+Matrix[i][j]; //считаем сумму элементов строки
printf("%s%d%s%d%s","Row ",i," - Sum=",Sum,".\n");
}
}
//задание 2
for(i=0;i<RowCount;i++)
{
for(j=0;j<ColCount;j++)
{
//ищем минимум в строке, т.е. индекс столбца
MinJ=0;
for(k=1;k<ColCount;k++)
{
if(Matrix[i][k]<Matrix[i][MinJ]) MinJ=k;
}
//ищем максимум в столбце, т.е. индеск строки
MaxI=0;
for(k=1;k<RowCount;k++)
{
if(Matrix[k][j]>Matrix[MaxI][j]) MaxI=k;
}
if((MaxI==i)&&(MinJ==j)) printf("%s%d%s%d%s%d%s","Saddle point at [",i,";",j,"]=",Matrix[i][j],".\n");
else
{
//ищем максимум в строке, т.е. индекс столбца
MaxJ=0;
for(k=1;k<ColCount;k++)
{
if(Matrix[i][k]>Matrix[i][MaxJ]) MaxJ=k;
}
//ищем минимум в столбце, т.е. индеск строки
MinI=0;
for(k=1;k<RowCount;k++)
{
if(Matrix[k][j]<Matrix[MinI][j]) MinI=k;
}
if((MinI==i)&&(MaxJ==j)) printf("%s%d%s%d%s%d%s","Saddle point at [",i,";",j,"]=",Matrix[i][j],".\n");
}
}
}
//освобождаем память
for(i=0;i<RowCount;i++) free(Matrix[i]);
free(Matrix);
getch();
return 0;
}
Объяснение кода листинга программы
- Объявление переменных: RowCount, ColCount, i, j, k, Sum, Matrix, flag, MinJ, MaxJ, MinI, MaxI.
- Ввод количества строк и столбцов.
- Выделение памяти под матрицу.
- Ввод матрицы.
- Вывод матрицы.
- Поиск строки с отрицательным элементом и вывод суммы элементов такой строки.
- Поиск столбца с минимальным элементом в строке и поиск строки с максимальным элементом в столбце.
- Проверка найденных седловых точек.
- Освобождение памяти.
- Возврат значения 0.