Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
DrG
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
#1

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

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

Помогите написать программу вывода матрицы спиралью, желательно с описанием каждого элемента(какой отвечает за строки, какой за столбцы итд). Читал уже тему на этом форуме, но мало что понял. Пожалуйста, помогите. Просьба максимально подробно всё объяснить. Хотелось бы понять всё всё-таки, а не просто скатать код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 21:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод матрицы спиралью (C++):

Заполнение матрицы спиралью - C++
Доброго времени суток На входе - N, на выходе - матрица NxN, заполненная спиралью(см. пример). input.txt - 5 output.txt: 1 2 3 4...

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

Вывести матрицу спиралью - C++
Нужно вывести матрицу спиралью, начиная с правого нижнего угла. Вот, что должно выводится: 8 9 10 11 12 7 18 19 20 13 6 17 16 15 14...

Квадратная матрица спиралью - C++
Задание: Получить целочисленную квадратную матрицу порядка n, элементами которой являются числа 1, 2, 3, …, n2 , расположенные по спирали...

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

Заполнить двумерный массив спиралью - C++
Всем доброго времени суток. Решал задачи на двумерные массивы, как вдруг столкнулся с этой. Мой код выглядит примерно так: #include...

9
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
07.10.2013, 21:52 #2
матрица задана изначально, или задаётся пользователем в программе?
0
DrG
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
07.10.2013, 21:58  [ТС] #3
задается cin'ом
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
07.10.2013, 21:59 #4
Цитата Сообщение от DrG Посмотреть сообщение
задается cin'ом
если что - я имею ввиду размерность
0
DrG
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
07.10.2013, 22:00  [ТС] #5
любая квадратная
размер не имеет значения
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
07.10.2013, 22:03 #6
Цитата Сообщение от DrG Посмотреть сообщение
любая квадратная
размер не имеет значения
ты понимаешь, о чём я спрашиваю? Решение разное, если границы матрицы вводятся с клавиатуры, то нужно int**=new int*[] ,что запарненько будет, и соответственно вывод реализовывается по-другому. А если тебе от балды и пофигу и ты константой задаешь arraySize=7 к примеру, то это совершенно другое.
0
DrG
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
07.10.2013, 22:14  [ТС] #7
да пусть константа будет.
Извините за непонятливость, просто я только начал изучение языка, поэтому во многом не разбираюсь. И раньше не приходилось сталкиваться с arraySize=...
Например, в выводе массива змейкой использовал просто int a[10][10]. больше никак параметры массива не описывал.
0
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;
}
0
DrG
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 7
08.10.2013, 10:33  [ТС] #9
а не могли бы пояснить, за что отвечают переменные и действия?
0
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;
}
1
09.10.2013, 23:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2013, 23:19
Привет! Вот еще темы с ответами:

Двухмерный массив заполнить спиралью - C++
Нужно заполнить двухмерный массив спиралью. С левого верхнего угла и до центра у меня получилось. А вот в обратную сторону не как не...

Заполнение массива двойной спиралью - C++
Дано число N, вывести массив по двойной спирали из нулей и единиц по часовой стрелке Input: 7 Output: 1111111 0000001 1111101 ...

Сортировка спиралью рандомного двумерного массива - C++
Помогите пожалуйста, поиски длиной в несколько часов не увенчались успехом. Есть массив заполненный случайными числами: 3 8 9 6 2 1 ...

Реализовать задание с использованием функций (ввод матрицы, вывод матрицы, вычисление суммы) - C++
Реализовать задание с использованием функций (ввод матрицы, вывод матрицы, вычисление суммы) и цикла for для вычисления суммы. Изменение...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.