Указатель: Сдвинуть числа в матрице заданного размер n * n на k позиций вправо - C (СИ)
Формулировка задачи:
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 100 int z, i, j, functs; int *p; void matrix_shift_right(int mat[][N], int n, int k) { for (functs = 1; functs <= k; functs++) { for (i = 0; i < n; i++) { for (j = 1; j < n; j++) { z = mat[i][j]; mat[i][j] = mat[i][0]; mat[i][0] = z; } } } } int main(void) { int mat[N][N], i, j, k, n; printf("Enter size of matrix "); scanf("%d", &n); printf("\n"); srand(time(NULL)); for (i = 0; i<n; ++i) { for (j = 0; j<n; ++j) { mat[i][j] = 0 + rand() %100; printf("%d\t", mat[i][j]); } printf("\n"); } printf("Enter nuber of stift "); scanf("%d", &k); matrix_shift_right(mat, n, k); printf("\n"); for (i = 0; i<n; ++i) { for (j = 0; j<n; ++j) printf("%d\t", mat[i][j]); printf("\n"); } return 0; }
Решение задачи: «Указатель: Сдвинуть числа в матрице заданного размер n * n на k позиций вправо»
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 100 void matrix_shift_right(int *mat, int n, int k) { int z, i, j, functs; for (functs = 1; functs <= k; functs++) for (i = 0; i < n; i++) for (j = 1; j < n; j++) { z = *(mat + i*n + j); *(mat + i*n + j) = *(mat + i*n); *(mat + i*n) = z; } } int main(void) { int i, j, k, n; int *mat = (int*)malloc(N*N*sizeof(int)); printf("Enter size of matrix "); scanf("%d", &n); printf("\n"); srand(time(NULL)); for (i = 0; i<n; ++i) { for (j = 0; j<n; ++j) { mat[i*n + j] = rand() % 100; printf("%d\t", mat[i*n + j]); } printf("\n"); } printf("Enter number of shift "); scanf("%d", &k); matrix_shift_right(mat, n, k); printf("\n"); for (i = 0; i<n; ++i) { for (j = 0; j<n; ++j) printf("%d\t", mat[i*n + j]); printf("\n"); } free(mat); return 0; }
Объяснение кода листинга программы
В данном коде реализована функция matrix_shift_right(), которая сдвигает элементы матрицы на k позиций вправо. Алгоритм сдвига элементов матрицы реализован с помощью трёх вложенных циклов. Внешний цикл выполняется k раз, благодаря чему обеспечивается сдвиг элементов на указанное количество позиций. Два внутренних цикла необходимы для работы с элементами матрицы. В ходе работы алгоритма используется временная переменная z, которая хранит значение элемента, с которым осуществляется сдвиг. В процессе сдвига элемента на одну позицию вправо, элемент, стоящий на этой позиции, перемещается влево, а элемент, стоящий на позиции, которая была последней, перемещается на первую позицию. В функции main() сначала пользователю предлагается ввести размер матрицы, затем на экране выводится исходная матрица, после чего пользователю предлагается ввести число сдвига. Затем вызывается функция matrix_shift_right(), которая сдвигает элементы матрицы на указанное количество позиций вправо. После сдвига на экране выводится изменённая матрица.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д