Матрицы: номера строк и столбцов всех седловых точек матриц - 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;
}

Объяснение кода листинга программы

  1. Объявление переменных: RowCount, ColCount, i, j, k, Sum, Matrix, flag, MinJ, MaxJ, MinI, MaxI.
  2. Ввод количества строк и столбцов.
  3. Выделение памяти под матрицу.
  4. Ввод матрицы.
  5. Вывод матрицы.
  6. Поиск строки с отрицательным элементом и вывод суммы элементов такой строки.
  7. Поиск столбца с минимальным элементом в строке и поиск строки с максимальным элементом в столбце.
  8. Проверка найденных седловых точек.
  9. Освобождение памяти.
  10. Возврат значения 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.615 из 5
Похожие ответы