Дана действительная матрица размера m*n. Найти сумму наибольших значений элементов ее строк. - C (СИ)
Формулировка задачи:
Написать программу по заданию:Дана действительная матрица размера m*n. Найти сумму наибольших значений элементов ее строк.Необходимо написать программу в 2-х вариантах:с использованием указателей и без использования указателей.
Примеры:1:Найти максимальную сумму элементов строк матрицы 3*5.Пример программы без использования указателей:
2:Найти максимальную сумму элементов строк матрицы 3*5.
Пример программы с использованием указателей:
Работаем в проге Borland C++
#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); }
#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); }
Решение задачи: «Дана действительная матрица размера 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; }
Объяснение кода листинга программы
В этом коде:
- arr - это указатель на массив указателей, который будет использоваться для хранения m строк матрицы.
- cols и rows - это переменные, которые используются для хранения количества столбцов и строк в матрице соответственно.
- i и j - это индексы, которые используются для обхода матрицы.
- sum - это переменная, которая используется для хранения суммы максимальных значений в каждой строке.
- posMax - это переменная, которая используется для хранения позиции максимального значения в текущей строке.
- 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) - этот код используется для обновления суммы максимальных значений в текущей строке.
- printf(
\n
) - этот код используется для перехода на новую строку. - *free((arr + i))** - этот код используется для освобождения памяти, выделенной под текущую строку матрицы.
- free(arr) - этот код используется для освобождения памяти, выделенной под массив указателей.
- printf(
sum max elements in each row = %d\n
, sum) - этот код используется для вывода суммы максимальных значений в каждой строке. - return 0 - этот код используется для завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д