Получить квадратную матрицу порядка n по заданному образцу - C (СИ)
Формулировка задачи:
5.95 Получить квадратную матрицу порядка n по заданному образцу:
1 2 3 … n-2 n-1 n
2 1 2 … n-3 n-2 n-1
3 2 1 n-4 n-3 n-2
. . . … . . .
. . … … . .
n-1 n-2 n-3 … 2 1 2
n n-1 n-2 … 3 2 1
Нужно решить задачу с помощью указателей. Есть решение, не используя их:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#define n1 100
#define m1 100
void main(void)
{
clrscr();
int a[n1][m1], n, i, j, temp, k, v;
randomize();
printf("Vvedite n - ");
scanf("%i", &n);
for (i = 0; i < n; i++)
{
a[i][i] = 1;
for (j = i + 1; j <= n; j++)
{
a[i][j] = (j - i) + 1;
a[j][i] = (j - i) + 1;
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("%i ", a[i][j]);
printf("\n");
}
getch();
}Решение задачи: «Получить квадратную матрицу порядка n по заданному образцу»
textual
Листинг программы
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#define n1 100
#define m1 100
int main()
{
int a[n1][m1],n,i,j;
n=5;
for(i=0;i<n;i++)
{
*((int*)a+i*m1+i)=1;
for(j=i+1;j<=n;j++)
{
*((int*)a+i*m1+j)=(j-i)+1;
*((int*)a+j*m1+i)=(j-i)+1;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%i ",*((int*)a+i*m1+j));
printf("\n");
}
system("pause");
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Создается массив a типа int размером n1 на m1.
- Задается значение переменной n равным 5.
- В цикле формируется квадратная матрица порядка n по заданному образцу:
-
- Внутренний цикл i=0..n-1 заполняет главную диагональ матрицы значениями 1.
-
- Внешний цикл j=i+1..n заполняет побочные диагонали значениями (j-i)+1.
-
- Выводится на экран полученная матрица.
- Ввод команды system(
pause) приостанавливает выполнение программы до нажатия клавиши. - Возвращается 0, завершая работу программы. Пример вывода на экран при n=5: 1 2 3 4 5 2 1 3 4 5 3 2 1 4 5 4 3 2 1 5 5 4 3 2 1