0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 13
1

Заполнить матрицу по спирали

10.04.2018, 14:44. Показов 994. Ответов 7
Метки нет (Все метки)

Помогите заполнить матрицу по спирали, но нужно это сделать при помощи функции с заданным прототипом. Киньте хотя бы идеи как это можно сделать, пожалуйста.
Скрин задания
Миниатюры
Заполнить матрицу по спирали  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2018, 14:44
Ответы с готовыми решениями:

Заполнить матрицу по спирали
Заполнить матрицу, от центра по спирали: вниз - влево - вверх - вправо. Размерность матрицы должна...

Заполнить матрицу по спирали
Как заполнить одномерный массив c++ по спирали?

Заполнить матрицу по спирали
Заполнить матрицу по спирали что бы выглядела таким образом: 21 20 19 18 17 22 7 6 5 16 23...

Заполнить матрицу по спирали

7
570 / 352 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
10.04.2018, 15:06 2
Вот недавно я такое делал Сортировка двумерного массива по спирали из центра

Добавлено через 4 минуты
Олег Т, Тебе по сути нужен только этот кусок:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int arrsort[SIZE][SIZE]{ 0 };
int posi, posj, pos = -1, num(0);
// Заполнение спиралью
for (int n = 1; n <= SIZE; n++) {
    for (int i = 0; i < n; i++) {
        arrsort[posi][posj] = num++;
        posj += pos;
    }
    if (n < SIZE)for (int i = 0; i < n; i++) {
        arrsort[posi][posj] = num++;
        posi += pos;
    }
    pos *= -1;
}
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 13
10.04.2018, 15:18  [ТС] 3
Да, но мне нужно сделать заполнение в отдельной функции, и с заданным прототипом. Сам алгоритм заполнения я более-менее понимаю, но не могу понять как это сделать в моих условиях
0
570 / 352 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
10.04.2018, 15:31 4
Цитата Сообщение от Олег Т Посмотреть сообщение
но не могу понять как это сделать в моих условиях
Т.е. не умеешь функции создавать?
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 13
10.04.2018, 15:36  [ТС] 5
Я не могу создать функцию в которую нужно передать матрицу, а потом как-то с помощью указателей ее нужно заполнять, потому-что в функции я уже не могу использовать индексацию. Вот с этим моментом у меня проблемы.
0
570 / 352 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
10.04.2018, 15:45 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
using namespace std;
 
void matrix_spiral(int **mat, int size, int k); // Прототип
 
int main() {
    int **mat;
    int size, k;
    cin >> size >> k;
    
    //Создаем
    mat = new int*[size];
    for (int i = 0; i < size; i++) mat[i] = new int[size];
    // Заполняем
    matrix_spiral(mat, size, k);
 
    // Вывод
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            cout << mat[i][j] << '\t';
        }
        cout << endl;
    }
 
    for (int i = 0; i < size; i++) delete[] mat[i];
    delete[] mat;
    return 0;
}
 
// Реализация
void matrix_spiral(int **mat, int size, int k) {
    int posi, posj, pos = -1;
    posi = posj = size / 2;
    for (int n = 1; n <= size; n++) {
        for (int i = 0; i < n; i++) {
            mat[posi][posj] = k++;
            posj += pos;
        }
        if (n < size)for (int i = 0; i < n; i++) {
            mat[posi][posj] = k++;
            posi += pos;
        }
        pos *= -1;
    }
}
1
3893 / 2818 / 651
Регистрация: 08.06.2007
Сообщений: 9,574
Записей в блоге: 4
10.04.2018, 16:25 7
Как я понял, вы не можете использовать два индекса. У вас матрица представлена вектором с одним индексом. Значит, придется вместо a[i][j] писать a[i*n+j] Если это получается слишком многословно, то напишите макрос
#define A(i,j) a[(i)*n+(j)]
1
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 13
10.04.2018, 21:34  [ТС] 8
Я попробовал написать код, но постоянно небольшая ошибка. Посмотрите, пожалуйста, где может быть ошибка

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#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[j*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(" %d ", *p);
        help_for_out++;
        if (help_for_out == n)
        {
            help_for_out = 0;
            printf("\n");
        }
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2018, 21:34
Помогаю со студенческими работами здесь

Заполнить матрицу по спирали
Через ранд формируются элементы массива размер n^2 .Нужно по спирали заполнить матрицу n*n по...

Заполнить квадратную матрицу по спирали
Одномерный: В заданном целочисленном массиве R(9) определить индекс наибольшего из нечетных по...

Заполнить матрицу змейкой по спирали
Необходимо создать змейку типа 1 2 3 4 5 6 36 35 34 33 32 7 19 20 21 22 31 8 18 25 24...

Заполнить матрицу nxm по спирали
Заполнить матрицу nxm Помогите с кодом


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru