Разместить на главной диагонали суммы элементов, которые лежат на диагоналях, перпендикулярных к главной - C (СИ) (75938)
Формулировка задачи:
Здравствуйте, очень нужна ваша помощь в выполнении одного задания.
Я нахожу их в отдельных переменных, но я не знаю как присвоить найденное значение переменной определенному элементу массива. И так же хотелось бы узнать, можно ли все эти действия как-нибудь запихнуть в цикл, чтобы не нужно было каждый раз прописывать
Очень надеюсь на вашу помощь, заранее спасибо!
Заполнить матрицу случайными числами. Разместить на главной диагонали суммы элементов, которые лежат на диагоналях, перпендикулярных к главной.
Я написал программу, которая находит сумму элементов, которые лежат на диагоналях, перпендикулярных к главной.#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <math.h> void main() { int i,j,q=0,w=0,e=0; float a[20][20]; clrscr(); randomize(); for (i=0;i<=4;i++) for (j=0;j<=4;j++) a[i][j]=rand()%5; for (i=0;i<=4;i++) {for (j=0;j<=4;j++) printf("%10.2f",a[i][j]); printf("\n");} printf("\n"); for (i=0;i<=4;i++) for (j=0;j<=4;j++) if (i+j==2) q=q+a[i][j]; printf("a[1][1]=%i\n",q); for (i=0;i<=4;i++) for (j=0;j<=4;j++) if (i+j==4) w=w+a[i][j]; printf("a[2][2]=%i\n",w); for (i=0;i<=4;i++) for (j=0;j<=4;j++) if (i+j==6) e=e+a[i][j]; printf("a[3][3]=%i\n",e); getch(); }
for (i=0;i<=4;i++) for (j=0;j<=4;j++) if (i+j==2) q=q+a[i][j]; printf("a[1][1]=%i\n",q);
Решение задачи: «Разместить на главной диагонали суммы элементов, которые лежат на диагоналях, перпендикулярных к главной»
textual
Листинг программы
#include <stdio.h> #include <time.h> int main() { int N; // N - matrix size int **matrix,i,j,sum; int *l_diag,max_diag; // вектор длин диагоналей srand(time(NULL)); scanf("%d",&N); // создаем вектор диаг. l_diag = (int*)malloc(sizeof(int)*N); // создаем матрицу matrix = (int**)malloc(sizeof(int*)*N); for(i = 0; i < N; i++) { matrix[i] = (int*)malloc(sizeof(int)*N); } // заполняем слу. значениями и выводим for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { matrix[i][j] = rand()%9+1; printf("%2d ",matrix[i][j]); } putchar('\n'); } // заполняем вектор диагоналей if(N%2 == 0) { max_diag = N/2-1; } else { max_diag = N/2; } for(i=0; i < max_diag; i++) { l_diag[i]=i; l_diag[N-1-i]=i; } if(N % 2 == 0) { l_diag[i] = max_diag; l_diag[++i] = max_diag; } else { l_diag[i] = max_diag; } // выводим вектор диагоналей for(i = 0; i < N; i++) { printf("%d ",l_diag[i]); } printf("\n"); // суммируем диагонали for(i=0; i < N; i++) { sum = 0; // верхняя диагональ for(j = 0; j < l_diag[i]; j++) { sum += matrix[i-(j+1)][i+j+1]; } // нижняя диагональ for(j = 0; j < l_diag[i]; j++) { sum += matrix[i+j+1][i-(j+1)]; } matrix[i][i] = matrix[i][i] + sum; } printf("\n\n\n"); // выводим изменененую матрицу for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { printf("%2d ",matrix[i][j]); } putchar('\n'); } // очищаем память free(l_diag); free(matrix); for(i=0; i < N; i++) { free(matrix[i]); } return 0; }
Объяснение кода листинга программы
В этом коде реализована задача, описанная в вашем вопросе. Вот список ключевых моментов работы программы:
- Создается матрица заданного размера и заполняется случайными значениями.
- Создается вектор длин диагоналей, который заполняется значениями от 0 до N-1, где N - размер матрицы.
- Если размер матрицы четный, то в векторе длин диагоналей добавляются два элемента, равных максимальному значению диагонали.
- Суммируются элементы диагоналей, проходя по всем элементам матрицы.
- Результат суммирования добавляется к элементу в главной диагонали.
- Выводится измененная матрица.
- Все выделенные памятью объекты освобождаются. Стоит отметить, что этот код можно оптимизировать, например, вычислив сумму диагоналей заранее, до заполнения матрицы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д