Дана действительная матрица размера m*n. Найти сумму наибольших значений элементов ее строк. - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать программу по заданию:Дана действительная матрица размера m*n. Найти сумму наибольших значений элементов ее строк.Необходимо написать программу в 2-х вариантах:с использованием указателей и без использования указателей. Примеры:1:Найти максимальную сумму элементов строк матрицы 3*5.Пример программы без использования указателей:
#include <stdio.h>
void main()
{
int a[3][5], i, j, s, max;
printf (“Введите 3 строки по 5 чисел”);
for (i=0;i<3;i++)
 for (j=0;j<5;j++)
  scanf("%d",&a[i][j]);
printf (“Матрица а :\n”);
 for (i=0; i<3; i++)
  {for (j=0; j<5; j++)
    printf (“%5d”, a[i][j]);
    printf (“\n”);
  }
for(i=0;i<3;i++)
  {s=0;
    for (j=0;j<5;j++)
      s+=a[i][j];
    if (i==0) max=s;
    else if (max<s) max=s;
  }
printf("Максимальная сумма строки = %d",max);
}
2:Найти максимальную сумму элементов строк матрицы 3*5. Пример программы с использованием указателей:
#include <stdio.h>
void main()
{
int a[3][5], *Р, i, j, s, max;
printf (“Введите 3 строки по 5 чисел”);
for (i=0;i<3;i++)
 for (j=0;j<5;j++)
  scanf("%d",&a[i][j]);
printf (“Матрица а :\n”);
 for (i=0; i<3; i++)
  {for (j=0; j<5; j++)
    printf (“%5d”, a[i][j]);
    printf (“\n”);
  }
P=&a[0][0];
for(i=0;i<3;i++)
  {s=0;
    for (j=0;j<5;j++)
      {s+=*P;
        P++;
      }
    if (i==0) max=s;
    else if (max<s) max=s;
  }
printf("Максимальная сумма строки = %d",max);
}
Работаем в проге Borland C++

Решение задачи: «Дана действительная матрица размера m*n. Найти сумму наибольших значений элементов ее строк.»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
    srand(time(NULL));
    int **arr;
    int cols, rows;
    int i, j;
    int sum = 0;
    size_t posMax = 0;
    
    scanf("%d%d", &rows, &cols);
    arr = (int**)malloc(rows * sizeof(int*));
    for(i = 0; i < rows; ++i)
    {
        *(arr + i) = (int*)malloc(cols * sizeof(int));
        for(j = 0; j < cols; ++j)
        {
            *(*(arr + i) + j) = rand() % 21;
            printf("%d\t", *(*(arr + i) + j));
            if(*(*(arr + i) + j) > *(*(arr + i) + posMax))
                posMax = j;
        }
        sum += *(*(arr + i) + posMax);
        posMax = 0;
        printf("\n");
        free(*(arr + i));
    }
    printf("sum max elements in each row = %d\n", sum);
    free(arr);
    return 0;
}

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

В этом коде:

  1. arr - это указатель на массив указателей, который будет использоваться для хранения m строк матрицы.
  2. cols и rows - это переменные, которые используются для хранения количества столбцов и строк в матрице соответственно.
  3. i и j - это индексы, которые используются для обхода матрицы.
  4. sum - это переменная, которая используется для хранения суммы максимальных значений в каждой строке.
  5. posMax - это переменная, которая используется для хранения позиции максимального значения в текущей строке.
  6. scanf(%d%d, &rows, &cols) - этот код используется для считывания количества строк и столбцов матрицы от пользователя.
  7. arr = (int)malloc(rows sizeof(int))** - этот код используется для выделения памяти под массив указателей, который будет использоваться для хранения строк матрицы.
  8. for(i = 0; i < rows; ++i) - это цикл, который используется для обхода каждой строки матрицы.
  9. *(arr + i) = (int)malloc(cols sizeof(int)) - этот код используется для выделения памяти под строку матрицы.
  10. for(j = 0; j < cols; ++j) - это цикл, который используется для обхода каждого столбца в текущей строке.
  11. ((arr + i) + j) = rand() % 21 - этот код используется для инициализации случайного значения в текущем элементе матрицы.
  12. printf(%d\t, ((arr + i) + j)) - этот код используется для печати значения текущего элемента матрицы.
  13. if(((arr + i) + j) > ((arr + i) + posMax)) - этот код используется для проверки, является ли текущее значение максимальным в текущей строке.
  14. posMax = j - этот код используется для обновления позиции максимального значения в текущей строке.
  15. sum += ((arr + i) + posMax) - этот код используется для обновления суммы максимальных значений в текущей строке.
  16. printf(\n) - этот код используется для перехода на новую строку.
  17. *free((arr + i))** - этот код используется для освобождения памяти, выделенной под текущую строку матрицы.
  18. free(arr) - этот код используется для освобождения памяти, выделенной под массив указателей.
  19. printf(sum max elements in each row = %d\n, sum) - этот код используется для вывода суммы максимальных значений в каждой строке.
  20. return 0 - этот код используется для завершения программы.

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


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

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

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