Заполнить матрицу по спирали - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите заполнить матрицу по спирали, но нужно это сделать при помощи функции с заданным прототипом. Киньте хотя бы идеи как это можно сделать, пожалуйста. Скрин задания

Решение задачи: «Заполнить матрицу по спирали»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#define NUM_ROWS 10
#define NUM_COLS 10
void matrix_spiral(int * mat, int n, int k);
 
int main()
{
    setlocale(LC_ALL, "Rus");
    int mat[NUM_ROWS][NUM_COLS] = { 0 }, n, k;
    printf("Введите к-во элементво в строке, столбце:");
    scanf_s("%d", &n);
    printf("Введите значение среднего элемента:");
    scanf_s("%d", &k);
    matrix_spiral(mat[n], n, k);
    _getch();
    return 0;
}
 
void matrix_spiral(int * mat, int n, int k)
{
 
    int *p = NULL;
    int max_num = n*n + k - 1, num_el = n*n, num_now = 0, k_help = 0, i_help = 0, help_for_out = 0;
    printf("%d\n", n);
    printf("\n");
    printf("\n");
    while (num_now < num_el)
    {
        k_help++;
        for (int j = n - k_help; j >= k_help - 1; j--)
        {
            mat[j*n + i_help] = max_num--;
            num_now++;
        }
        if (num_now >= num_el) break;
 
        for (int j = k_help; j <= n - k_help; j++)
        {
            mat[n*i_help + j] = max_num--;
            num_now++;
        }
        if (num_now >= num_el) break;
 
        for (int j = k_help; j <= n - k_help; j++)
        {
            mat[j*n + n - k_help] = max_num--;
            num_now++;
        }
        if (num_now >= num_el) break;
 
            for (int j = n - k_help; j > k_help; j--)
        {
        mat[n*(n-k_help)+j-1] = max_num--;
        num_now++;
        }
        if (num_now >= num_el) break;
 
        i_help++;
    }
 
    for (p = &mat[0]; p < &mat[n*n]; p++)
    {
        printf(" %2d ", *p);
        help_for_out++;
        if (help_for_out == n)
        {
            help_for_out = 0;
            printf("\n");
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы