Для заданной матрицы найти максимум среди сумм элементов диагоналей, параллельных главной диагонали - C (СИ)
Формулировка задачи:
Для заданной матрицы найти максимум среди сумм элементов диагоналей, параллельных главной диагонали.
скажите пожалуйста, что нужно изменить чтобы было не параллельных главной, а наоборот-побочной. Заранее спасибо.
#include<stdio.h> #include<math.h> #include<conio.h> #include<stdlib.h> int summa(int *ar,int n) { int m,j,i,k; int S=0, Smax=-10000; m=n; for (j=1;j<n;j++) { k=0; S=0; for (i=0; i<m-1; i++) { S=S+(*(ar+i*n+j+k)); k++; } m--; if (S>Smax) {Smax=S;} } m=n; for (i=1;i<n;i++) { k=0; S=0; for (j=0; j<m-1; j++) { S=S+(*(ar+(i+k)*n+j)); k++; } m--; if (S>Smax) {Smax=S;} } return Smax; } void main() { int i,j,n,Smax,k; //,p=-3,b=7; int Pr[100]; int *a; clrscr(); // randomize(); printf("vvedite razmernost matrici: "); scanf("%d",&n); printf("\n "); a=(int*)malloc (n*n*sizeof(int)); for (i=0;i<n;i++) { for (j=0;j<n;j++) { // *(a+i*n+j)=random(b-p+1)+p; // printf("%d\t", *(a+i*n+j)); printf("a[%d,%d]=",i+1,j+1); scanf("%d",(a+i*n+j)); } } printf("\n "); for(i=0;i<n;i++)
Решение задачи: «Для заданной матрицы найти максимум среди сумм элементов диагоналей, параллельных главной диагонали»
textual
Листинг программы
#include "stdafx.h" #include <stdio.h> #include <conio.h> #include <time.h> #include <Windows.h> #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> int _tmain(int argc, _TCHAR* argv[]) { _CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); SetConsoleCP(1251); SetConsoleOutputCP(1251); int menu = 0; do { srand(time(NULL)); int **a = NULL; int height = 0; int width = 0; int temp = 0; printf("Демонстрация работы с массивами\n"); printf("Введите размерность массива(ширина, высота): "); scanf("%d %d", &width, &height ); a = new int*[height]; for (int i = 0; i < height; i = i+1) { a[i] = new int[width]; } for (int i = 0; i < height; i = i+1) { for (int j = 0; j < width; j = j+1) { a[i][j] = rand() % 10; } } for (int i = 0; i < height; i = i+1) { for (int j = 0; j< width; j = j+1) { printf("%d", a[i][j]); } printf("\n"); } for (int i = 0; i < height; i = i+1) { delete [] a[i]; } delete []a; { printf("Повторить? 1-ДА, 0-НЕТ"); scanf("%d" , &menu); } } while (menu != 0); getchar(); return 0; }
Объяснение кода листинга программы
В этом коде:
- a - это динамический массив (массив указателей), который хранит указатели на подмассивы. Он инициализируется как NULL, а затем инициализируется новыми указателями на подмассивы.
- height и width - это переменные, которые хранят высоту и ширину матрицы соответственно. Они инициализируются вводом пользователя.
- temp - это временная переменная, которая используется в цикле для временного хранения значения.
- printf и scanf - это функции ввода-вывода, используемые для отображения и ввода данных соответственно.
- srand и rand - это функции для инициализации и генерации случайных чисел соответственно.
- new и delete - это операторы динамического выделения и освобождения памяти соответственно.
- menu - это переменная, которая используется в цикле do-while для контроля повторения программы.
- getchar - это функция для получения символа ввода из консоли.
- return 0 - это оператор, который указывает на успешный конец выполнения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д