Форум программистов, компьютерный форум CyberForum.ru

Вывод матрицы спиралью - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
DrG
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
07.10.2013, 21:43     Вывод матрицы спиралью #1
Помогите написать программу вывода матрицы спиралью, желательно с описанием каждого элемента(какой отвечает за строки, какой за столбцы итд). Читал уже тему на этом форуме, но мало что понял. Пожалуйста, помогите. Просьба максимально подробно всё объяснить. Хотелось бы понять всё всё-таки, а не просто скатать код.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
07.10.2013, 21:52     Вывод матрицы спиралью #2
матрица задана изначально, или задаётся пользователем в программе?
DrG
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
07.10.2013, 21:58  [ТС]     Вывод матрицы спиралью #3
задается cin'ом
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
07.10.2013, 21:59     Вывод матрицы спиралью #4
Цитата Сообщение от DrG Посмотреть сообщение
задается cin'ом
если что - я имею ввиду размерность
DrG
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
07.10.2013, 22:00  [ТС]     Вывод матрицы спиралью #5
любая квадратная
размер не имеет значения
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
07.10.2013, 22:03     Вывод матрицы спиралью #6
Цитата Сообщение от DrG Посмотреть сообщение
любая квадратная
размер не имеет значения
ты понимаешь, о чём я спрашиваю? Решение разное, если границы матрицы вводятся с клавиатуры, то нужно int**=new int*[] ,что запарненько будет, и соответственно вывод реализовывается по-другому. А если тебе от балды и пофигу и ты константой задаешь arraySize=7 к примеру, то это совершенно другое.
DrG
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
07.10.2013, 22:14  [ТС]     Вывод матрицы спиралью #7
да пусть константа будет.
Извините за непонятливость, просто я только начал изучение языка, поэтому во многом не разбираюсь. И раньше не приходилось сталкиваться с arraySize=...
Например, в выводе массива змейкой использовал просто int a[10][10]. больше никак параметры массива не описывал.
DirectX
 Аватар для DirectX
23 / 17 / 6
Регистрация: 07.10.2013
Сообщений: 47
08.10.2013, 00:45     Вывод матрицы спиралью #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
#include <iostream>
using namespace std;
 
int main()
{
    int i, j, k = 1, m, n, c = 0, b, **a;
    cin >> m >> n;
 
    a = new int*[m];
    for (i = 0; i < m; i++)
    *(a + i) = new int[n];  // *(a + i) == a[i]
    
    b = m * n;
    
    do
    {            
        for (j = c; j < n - c; j++)
        {
            if (k > b)
                break;
            a[c][j] = k++;
        }
  
        for(i=c+1;i<m-c;i++)
        {
            if(k > b)
                break;                   
            a[i][n - c - 1] = k++;
        }
  
        for(j = n - c - 2; j >= c; j--)
        {
            if(k > b)
                break;
            a[m - c - 1][j] = k++;
        }
  
        for(i = m - c - 2; i > c; i--)
        {
            if(k > b)
                break;
            a[i][c] = k++;
        }
  
        c++;   
    }
    while(k <= m * n);  
 
    // output
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n - 1; j++)
            cout << a[i][j] << "\t";
        cout << a[i][n - 1] << "\n";
    }
 
    for(i = 0;i < m; i++)
        delete [] a[i];
    delete [] a;  
 
    system("pause");
    return 0;
}
DrG
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
08.10.2013, 10:33  [ТС]     Вывод матрицы спиралью #9
а не могли бы пояснить, за что отвечают переменные и действия?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2013, 23:19     Вывод матрицы спиралью
Еще ссылки по теме:

C++ Написать и протестировать подпрограмму, которая переставляет в обратном порядке элементы главной диагонали квадратной матрицы - вывод всей матрицы
C++ Заполнение матрицы спиралью - корректировка кода
Проблема с выводом массива спиралью против часовой стрелки C++

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

Или воспользуйтесь поиском по форуму:
DirectX
 Аватар для DirectX
23 / 17 / 6
Регистрация: 07.10.2013
Сообщений: 47
09.10.2013, 23:19     Вывод матрицы спиралью #10
Надеюсь что понятно объяснил
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
#include <iostream>
using namespace std;
 
int main()
{
    int i, j, k = 1, m, n, c = 0, b, **a;
    cin >> m >> n;                                          // вводим размерность
 
    a = new int*[m];                                        // создаем динамическую матрицу если этого еще
    for (i = 0; i < m; i++)                                 // не знаешь, тогда замени на статическую
    *(a + i) = new int[n];  // *(a + i) == a[i]             // int a[m][n] = {0};
    
    b = m * n;                                              // максимальный елемент спирали
    
    do                                                      // до тех пор пока k != b(макс. елем.) заполняем матрицу
    {                                                       //
        for (j = c; j < n - c; j++)                         // алгоритм словами я передать не могу
        {                                                   // но смысл его в том что матрица заполняется
            if (k > b)                                      // по 4 стенкам(соответственно 4 форами)
                break;                                      //
            a[c][j] = k++;                                  // * * * * * 
        }                                                   // * * * * *   <---- "типо" матрица 4х5
                                                            // * * * * *
        for(i=c+1;i<m-c;i++)                                // * * * * *
        {                                                   //
            if(k > b)                                       // 1 2 3 4 5   <---- первая стенка
                break;                                      // * * * * *
            a[i][n - c - 1] = k++;                          // * * * * *
        }                                                   // * * * * *
                                                            //
        for(j = n - c - 2; j >= c; j--)                     // 1 2 3 4 5
        {                                                   // * * * * 6
            if(k > b)                                       // * * * * 7
                break;                                      // * * * * 8
            a[m - c - 1][j] = k++;                          //         ^
        }                                                   //         '-------- вторая стенка
                                                            //
        for(i = m - c - 2; i > c; i--)                      //
        {                                                   // 1  2  3  4  5                                1  2  3  4  5
            if(k > b)                                       // *  *  *  *  6                                14 *  *  *  6
                break;                                      // *  *  *  *  7                                13 *  *  *  7
            a[i][c] = k++;                                  // 12 11 10 9  8     <---- третья стенка        12 11 10 9  8
        }                                                   //                                              ^
                                                            //                                              '------- четвертая стенка
        c++;                                                // счетчик количества("толщины") стенок
    }                                                       //
    while(k <= m * n);                                      // ну и на следующих кругах заполняем оставшиеся "места"
    // if-ы нужны для того чтобы не случилась перезапись
    // верхней стенки -> нижней
    // и левой -> правой
 
    for (i = 0; i < m; i++)                                 //
    {                                                       //
        for (j = 0; j < n - 1; j++)                         // вывод
            cout << a[i][j] << "\t";                        // матрицы
        cout << a[i][n - 1] << "\n";                        //
    }                                                       //
 
    for(i = 0;i < m; i++)                                   // освобождение динамической памяти
        delete [] a[i];                                     // (если матрица статическая, то этот блок не нужен)
    delete [] a;                                            //
 
    system("pause");
    return 0;
}
Yandex
Объявления
09.10.2013, 23:19     Вывод матрицы спиралью
Ответ Создать тему
Опции темы

Текущее время: 19:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru