С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/89: Рейтинг темы: голосов - 89, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
1

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

07.10.2013, 21:43. Показов 17984. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите написать программу вывода матрицы спиралью, желательно с описанием каждого элемента(какой отвечает за строки, какой за столбцы итд). Читал уже тему на этом форуме, но мало что понял. Пожалуйста, помогите. Просьба максимально подробно всё объяснить. Хотелось бы понять всё всё-таки, а не просто скатать код.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2013, 21:43
Ответы с готовыми решениями:

Заполнение матрицы спиралью
Здравствуйте! Я знаю, что на форуме есть ответ на данный вопрос, но не понятно, как происходит само...

Заполнение матрицы спиралью
Доброго времени суток На входе - N, на выходе - матрица NxN, заполненная спиралью(см. пример)....

Заполнение матрицы спиралью - корректировка кода
Код вроде работает,но не хочет заполняться в консольке по спирали. Можете исправить эту маленькую...

Заполнение матрицы спиралью против часовой стрелки
Напишите программу, которая выводит на экран матрицу размера N*N (0<N<100) заполненную змейкой...

9
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
07.10.2013, 21:52 2
матрица задана изначально, или задаётся пользователем в программе?
0
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
07.10.2013, 21:58  [ТС] 3
задается cin'ом
0
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
07.10.2013, 21:59 4
Цитата Сообщение от DrG Посмотреть сообщение
задается cin'ом
если что - я имею ввиду размерность
0
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
07.10.2013, 22:00  [ТС] 5
любая квадратная
размер не имеет значения
0
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
07.10.2013, 22:03 6
Цитата Сообщение от DrG Посмотреть сообщение
любая квадратная
размер не имеет значения
ты понимаешь, о чём я спрашиваю? Решение разное, если границы матрицы вводятся с клавиатуры, то нужно int**=new int*[] ,что запарненько будет, и соответственно вывод реализовывается по-другому. А если тебе от балды и пофигу и ты константой задаешь arraySize=7 к примеру, то это совершенно другое.
0
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
07.10.2013, 22:14  [ТС] 7
да пусть константа будет.
Извините за непонятливость, просто я только начал изучение языка, поэтому во многом не разбираюсь. И раньше не приходилось сталкиваться с arraySize=...
Например, в выводе массива змейкой использовал просто int a[10][10]. больше никак параметры массива не описывал.
0
24 / 18 / 21
Регистрация: 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;
}
0
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
08.10.2013, 10:33  [ТС] 9
а не могли бы пояснить, за что отвечают переменные и действия?
0
24 / 18 / 21
Регистрация: 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;
}
2
09.10.2013, 23:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2013, 23:19
Помогаю со студенческими работами здесь

Вывод прямоугольной матрицы спиралью
Вводится прямоугольная матрица произвольного размера. Нужно вывести её элементы по спирали по...

Вывод двумерного массива спиралью.
Вот собственно есть множество вариантов решений данной задачи. Одно из них чуть ниже. Сам вопрос в...

Вывод двумерного масива спиралью
Дано число n. Создать массив A и заполнить его по спирали, начиная с числа 0 в центральной клетке...

Обход матрицы спиралью
Не могу адаптировать свой же код для квадратных матриц.. Все работает, за исключением центрального...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru